php验证码类

来源:互联网 发布:淘宝口红代购 编辑:程序博客网 时间:2024/06/07 18:28
<?php/** * Created by JetBrains PhpStorm. * User: 张华 * Date: 14-3-8 * Time: 下午12:21 * QQ: 746502560@qq.com * To change this template use File | Settings | File Templates. */final class Captcha{    private $width;    private $height;    private $codeNum;    private $code;    private $im;   public  function __construct($width=80, $height=35, $codeNum=4)    {        $this->width = $width;        $this->height = $height;        $this->codeNum = $codeNum;    }    function showImg()    {        //创建图片        $this->createImg();        //设置干扰元素        $this->setDisturb();        //设置验证码        $this->setCaptcha();        //输出图片        $this->outputImg();    }    public  function  checkCaptcha($captchaVal){      $codeNum=httpRequest::getSession('codeNum');         if($codeNum == $captchaVal){             return true;         }        return false;    }   public  function getCaptcha()    {        return $this->code;    }    private function createImg()    {        $this->im = imagecreatetruecolor($this->width, $this->height);        $bgColor = imagecolorallocate($this->im, 255, 255, 255);        imagefill($this->im, 0, 0, $bgColor);        unset($bgColor);    }    private function setDisturb()    {        $area = ($this->width * $this->height) / 20;        $disturbNum = ($area > 250) ? 250 : $area;        //加入弧线        for ($i = 0; $i <= 5; $i++) {            $color = imagecolorallocate($this->im, rand(128, 255), rand(125, 255), rand(100, 255));            imagearc($this->im, rand(0, $this->width), rand(0, $this->height), rand(30, 300), rand(20, 200), 50, 30, $color);        }        unset($area,$disturbNum,$color);    }    private function createCode()    {        $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";        for ($i = 0; $i < $this->codeNum; $i++) {            $this->code .= $str{rand(0, strlen($str) - 1)};        }         httpRequest::setSession('codeNum',$this->code);        unset($str,$i);    }    private function setCaptcha()    {        $this->createCode();       for ($i = 0; $i < $this->codeNum; $i++) {            $color = imagecolorallocate($this->im, rand(0, 250), rand(0, 250), rand(0, 250));            $size = rand(14, 20);            $x = floor($this->width / $this->codeNum) * $i + 5;            $y = rand(0, $this->height - 20);            imagechar($this->im, $size, $x, $y, $this->code{$i}, $color);        }        unset($color,$size,$x,$y,$i);    }    private function outputImg()    {        if (imagetypes() & IMG_JPG) {            header('Content-type:image/jpeg');            imagejpeg($this->im);            imagedestroy($this->im);        } elseif (imagetypes() & IMG_GIF) {            header('Content-type: image/gif');            imagegif($this->im);            imagedestroy($this->im);        } elseif (imagetype() & IMG_PNG) {            header('Content-type: image/png');            imagepng($this->im);            imagedestroy($this->im);        } else {            die("没有你需要的图像资源类型!");        }    }    public function __destruct(){        $this->width=null;        $this->height=null;        $this->codeNum=null;        $this->code=null;        $this->im=null;        unset($this->width,$this->height,$this->codeNum,$this->code);    }}

0 0
原创粉丝点击