php写验证码类和实现方法功能
class Code{
protected $number;
protected $codeType;
protected $width;
protected $height;
protected $image;
protected $code;
public function __construct($number = 4,$codeType = 2,$width = 100 ,$height = 50)
{
$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;
}
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(130,255),mt_rand(130,255),mt_rand(130,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 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->show();
}
}
$code=new Code();
echo $code->outImage();