php實現驗證碼類
阿新 • • 發佈:2018-12-22
<?php
class
Code{
// 1. 定義各個成員 有寬、高、畫布、字數、型別、畫型別
private
$width
;
//寬度
private
$height
;
//高度
private
$num
;
//驗證碼字數
private
$imgType
;
//生成圖片型別
private
$Type
;
//字串型別 1,2,3 三個選項 1 純數字 2 純小寫字母 3 大小寫數字混合
private
$hb
;
//畫布
public
$codestr
;
// 驗證碼字串
public
function
__construct(
$height
=20,
$num
=4,
$imgType
=
"jpeg"
,
$Type
=1){
$this
->width =
$num
*20;
$this
->height =
$height
;
$this
->num =
$num
;
$this
->imgType =
$imgType
;
$this
->Type =
$Type
;
$this
->codestr =
$this
->codestr();
$this
->zuhe();
}
// 2. 定義隨機獲取字串函式
private
function
codestr(){
switch
(
$this
->Type){
case
1:
// 型別為1 獲取1-9隨機數
$str
= implode(
""
,
array_rand
(range(0,9),
$this
->num));
break
;
case
2:
// 型別為2 獲取a-z隨機小寫字母
$str
= implode(
""
,
array_rand
(
array_flip
(range(a,z)),
$this
->num));
break
;
case
3:
// 型別為3 獲取數字,小寫字母,大寫字母 混合
for
(
$i
=0;
$i
<
$this
->num;
$i
++){
$m
= rand(0,2);
switch
(
$m
){
case
0:
$o
= rand(48,57);
break
;
case
1:
$o
= rand(65,90);
break
;
case
2:
$o
= rand(97,122);
break
;
}
$str
.= sprintf(
"%c"
,
$o
);
}
break
;
}
return
$str
;
}
// 3. 初始化畫布影象資源
private
function
Hb(){
$this
->hb = imagecreatetruecolor(
$this
->width,
$this
->height);
}
// 4. 生成背景顏色
private
function
Bg(){
return
imagecolorallocate(
$this
->hb,rand(130,250),rand(130,250),rand(130,250));
}
// 5. 生成字型顏色
private
function
Font(){
return
imagecolorallocate(
$this
->hb,rand(0,100),rand(0,100),rand(0,100));
}
// 6. 填充背景顏色
private
function
BgColor(){
imagefilledrectangle(
$this
->hb,0,0,
$this
->width,
$this
->height,
$this
->Bg());
}
// 7. 干擾點
private
function
ganrao(){
$sum
=
floor
((
$this
->width)*(
$this
->height)/3);
for
(
$i
=0;
$i
<
$sum
;
$i
++){
imagesetpixel(
$this
->hb,rand(0,
$this
->width),rand(0,
$this
->height),
$this
->Bg());
}
}
// 8. 隨機直線 弧線
private
function
huxian(){
for
(
$i
=0;
$i
<
$this
->num;
$i
++){
imageArc(
$this
->hb,rand(0,
$this
->width),rand(0,
$this
->height),rand(0,
$this
->width),rand(0,
$this
->height),rand(0,360),rand(0,360),
$this
->Bg());
}
}
// 9. 寫字
private
function
xiezi(){
for
(
$i
=0;
$i
<
$this
->num;
$i
++){
$x
=
ceil
(
$this
->width/
$this
->num)*
$i
;
$y
=rand(1,
$this
->height-15);
imagechar(
$this
->hb,5,
$x
+4,
$y
,
$this
->codestr[
$i
],
$this
->Font());
}
}
// 10. 輸出
private
function
OutImg(){
$shuchu
=
"image"
.
$this
->imgType;
$header
=
"Content-type:image/"
.
$this
->imgType;
if
(function_exists(
$shuchu
)){
header(
$header
);
$shuchu
(
$this
->hb);
}
else
{
exit
(
"GD庫沒有此類影象"
);
}
}
// 11. 拼裝
private
function
zuhe(){
$this
->Hb();
$this
->BgColor();
$this
->ganrao();
$this
->huxian();
$this
->xiezi();
$this
->OutImg();
}
public
function
getCodeStr(){
return
$this
->codestr;
}
}
$a
=
new
Code();
$a
->getCodeStr();
?>