php验证码生成类

/**
 * 验证码的生成:
 * 第一步:写一个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();

你可能感兴趣的:(PHP积累)