/**
* 验证码的生成:
* 第一步:写一个VerifyCode的类的,负责生成验证码
* 定义验证码的属性:
* public $im;//画布
public $length=4;//字符个数
public $size=20;//字体大小
public $font='';//字体
public $width=140;//宽
public $height=35;//高
* 第二步:定义一个createCanvas 方法,负责生成一个画布。
*
* 第三步:定义一个printCode 的方法,负责输出验证码。
*
* 第四步:定义一个writeChar 的方法,在画布上写字
* 1、复制字体到对应的文件夹
* 2、使用imagettftext写入文字
* 3、定义一个随机颜色的方法 randColor
* 第五步:定义一个createChar的方法 生成随机字符
*
* 第六步:定义一个createLine的方法 生成混淆线
*
* 第七步:
* //雪花
for ($i=0;$i<100;$i++) {
$color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
}
*
*/
class VerifyCode{
public $im;//画布
public $length=4;//字符个数
public $size=20;//字体大小
public $font='./font/SIMYOU.TTF';//字体
public $width=80;//宽
public $height=35;//高
public $code='';//存储随机字符
public $line=5;//混淆线的最大条数
/*
* createCanvas 负责生成一个画布
* param null
* return null
* */
public function createCanvas(){
//生成画布
$this->im=imagecreate($this->width,$this->height);
//给画布填充颜色
imagecolorallocate($this->im,mt_rand(200,220),mt_rand(200,220),mt_rand(200,220));
}
/*
* createChar 生成随机的字符
* param null
* return null
* */
public function createChar(){
$fontString = "abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789";
$length=strlen($fontString);
for($i=0;$i<$this->length;$i++){
$index=mt_rand(0,$length-1);//随机下标
$this->code=$this->code.$fontString[$index];//把字符放到容器里面
}
session_start();//开启session会话
$_SESSION['mycode'] = $this->code;
}
/*
* writeChar 负责在画布上面写字符串
* param null
* return null
* */
public function writeChar(){
//生成验证码
$this->createChar();
$y=($this->height-$this->size)/2+$this->size;
$x=0;
//生成随机验证码
//$text=array('a','b','c','d');
for($i=0;$i<$this->length;$i++){
$x=$i*$this->size;//设置不同起点x坐标
$x=$x+mt_rand(-2,8);//设置不同间距
$angle=mt_rand(-20,30);//随机角度
imagettftext($this->im,$this->size,$angle,$x,$y,$this->randColor(),$this->font,$this->code[$i]);
}
}
/*
* createLine 负责生成混淆线
* param null
* return color
* */
public function createLine(){
for($i=0;$i1,$this->line);$i++){
imageline($this->im,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$this->randColor());
}
}
/*
* randColor 负责随机字符颜色
* param null
* return color
* */
public function randColor(){
return imagecolorallocate($this->im,mt_rand(0,200),mt_rand(0,200),mt_rand(0,200));
}
/*
* printCode 负责输出验证码
* param null
* return null
* */
public function printCode(){
header("Content-type:image/jpeg");
//生成画布
$this->createCanvas();
//生成字符
$this->writeChar();
//生成混淆线
$this->createLine();
//输出画布
imagejpeg($this->im);
}
}
$y = new VerifyCode();
//生成验证码
$y->printCode();