<?php
header('Content-type:text/html;charset=utf8');
class
Code{
protected
$number
;
protected
$codeType
;
protected
$width
;
protected
$height
;
protected
$code
;
protected
$image
;
public
function
__construct(
$number
=4,
$codeType
=0,
$height
=50,
$width
=100){
$this
->number=
$number
;
$this
->codeType=
$codeType
;
$this
->width =
$width
;
$this
->height=
$height
;
$this
->code =
$this
->createCode();
}
public
function
__get(
$name
){
if
(
$name
== 'code'){
return
$this
->code;
}
return
false;
}
public
function
getCode() {
return
$this
->code;
}
public
function
__destruct(){
imagedestroy(
$this
->image);
}
protected
function
createCode(){
switch
(
$this
->codeType){
case
0:
$code
=
$this
->getNumberCode();
break
;
case
1:
$code
=
$this
->getCharCode();
break
;
case
2:
$code
=
$this
->getNumCharCode();
break
;
default
:
die
('不支持此类验证码类型');
}
return
$code
;
}
protected
function
getNumberCode(){
$str
= join('', range(0, 9));
return
substr
(
str_shuffle
(
$str
),0,
$this
->number);
}
protected
function
getCharCode(){
$str
= join('', range('a', 'z'));
$str
=
$str
.
strtoupper
(
$str
);
return
substr
(
str_shuffle
(
$str
),0,
$this
->number);
}
protected
function
getNumCharCode(){
$numstr
= join('',range(0, 9));
$str
=join('', range('a', 'z'));
$str
=
$numstr
.
$str
.
strtoupper
(
$str
);
return
substr
(
str_shuffle
(
$str
), 0,
$this
->number);
}
protected
function
createImage(){
$this
->image = imagecreatetruecolor(
$this
->width,
$this
->height);
}
protected
function
fillBack(){
imagefill(
$this
->image, 0, 0,
$this
->lightColor());
}
protected
function
lightColor(){
return
imagecolorallocate(
$this
->image, mt_rand(133,255), mt_rand(133,255), mt_rand(133,255));
}
protected
function
darkColor(){
return
imagecolorallocate(
$this
->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
}
protected
function
drawChar(){
$width
=
ceil
(
$this
->width /
$this
->number);
for
(
$i
=0;
$i
<
$this
->number;
$i
++){
$x
= mt_rand(
$i
*
$width
+5, (
$i
+1)*
$width
-10);
$y
= mt_rand(0,
$this
->height -15);
imagechar(
$this
->image, 5,
$x
,
$y
,
$this
->code[
$i
],
$this
->darkColor());
}
}
protected
function
drawLine(){
for
(
$i
=0;
$i
<5;
$i
++) {
imageline(
$this
->image,mt_rand(0,
$this
->width),mt_rand(0,
$this
->height),mt_rand(0,
$this
->width),mt_rand(0,
$this
->height),
$this
->darkColor());
}
}
protected
function
drawDisturb(){
for
(
$i
=0;
$i
<150;
$i
++){
$x
=mt_rand(0,
$this
->width);
$y
=mt_rand(0,
$this
->height);
imagesetpixel(
$this
->image,
$x
,
$y
,
$this
->lightColor());
}
}
protected
function
show(){
header('Content-Type:image/png');
imagepng(
$this
->image);
}
public
function
outImage(){
$this
->createImage();
$this
->fillBack();
$this
->drawChar();
$this
->drawDisturb();
$this
->drawLine();
$this
->show();
}
}