验证码封装类

Posted 人在钱途

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证码封装类相关的知识,希望对你有一定的参考价值。

<?php 
/**
 * 验证码类
 */
class VerifyCode{
       private $width;
       private $height;
       private $num;        //验证码位数
       private $fontsize;
       private $pixes;        //干扰点的密集度
       private $lines;        //干扰线的密集度        
       /**
        * 构造函数初始化数据
        * @AuthorHTL-Mr.K
        * @DateTime  2017-12-23T18:46:36+0800
        * @param     int                   $width  验证码画布宽度
        * @param     int                   $height 画布高度
        * @param     int                   $num    验证码位数
        * @param     int                   $fontsize  验证码字体大小
        * @param     int                  $pixes   干扰点密集度
        * @param     int                  $lines   干扰线密集度
        */
       function __construct($width,$height,$num=4,$fontsize=6,$pixes=200,$lines=200){
               $this->width=$width;
               $this->height=$height;
               $this->num=$num;
               $this->fontsize=$fontsize;
               $this->pixes=$pixes;
               $this->lines=$lines;
       }
     
       /**
        * 产生验证码图片
        * @AuthorHTL
        * @DateTime  2017-12-23T19:14:51+0800
        * @return    null
        */
       public function createImage(){
               //制作画布
               $img=imagecreatetruecolor($this->width, $this->height);
               //设定背景色
               $bgcolor=imagecolorallocate($img, 255, 255, 255);
               imagefill($img, 0, 0, $bgcolor);
               //制作干扰点
               $this->getPixels($img);
               //制作干扰线
               $this->getLines($img);
               //增加验证码
               $captcha=$this->getCaptcha();
               //增加文字颜色
               $fontcolor=imagecolorallocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
               //文字的起始位置
               $start_x = ceil($this->width/2) - 25;
            $start_y = ceil($this->height/2) - 8;
            if(imagestring($img, $this->fontsize,$start_x,$start_y,$captcha,$fontcolor)){
                header(Content-type:image/png);
                imagepng($img);
            }else{
                return false;
            }
       }


         /**
        * 获取验证码随机字符串
        * @AuthorHTL
        * @DateTime  2017-12-23T18:50:31+0800
        * @return    string         $captcha ,返回值验证码
        */
       private function getCaptcha(){
               $str=implode("", array_merge(range(a, z),range(A, Z),range(1, 9)));
               $captcha=‘‘;
               for ($i=0,$len=strlen($str);$i < $this->num ; $i++) { 
                   $captcha.=$str[mt_rand(0,$len-1)]. ;
               }
               //将数据存储在session中
               $_SESSION[captcha]=str_replace( ,‘‘,$captcha);
               //返回值
               return $captcha;
       }


        /*
         * 增加干扰点
         * @param1 resource $img
        */
        private function getPixels($img){
            //增加干扰点
            for($i = 0;$i < $this->pixes;$i++){
                //分配颜色
                $pixel_color = imagecolorallocate($img,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));

                //画点
                imagesetpixel($img,mt_rand(0,$this->width),mt_rand(0,$this->height),$pixel_color);
            }
        }

        /*
         * 增加干扰线
         * @param1 resource $img,要增加干扰线的图片资源
        */
        private function getLines($img){
            //增加干扰线
            for($i = 0;$i < $this->lines;$i++){
                //分配颜色
                $line_color = imagecolorallocate($img,mt_rand(150,200),mt_rand(150,200),mt_rand(150,200));

                //画线
                imageline($img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$line_color);
            }
        }
        /**
         * 静态方法校验验证码
         * @AuthorHTL
         * @DateTime  2017-12-23T19:34:06+0800
         * @param     string     $captcha  用户提交的验证码
         * @return    bool       成功功返回true,失败返回false             
         */
       public static function checkCaptcha($captcha){
           return (strtolower($captcha) === strtolower($_SESSION[captcha]));
       } 


}
<?php 
     session_start();
     require_once ./VerifyCode.php;
     $code=new VerifyCode(100,30,4,6,200,200);
     $code->createImage();
     

     

 

以上是关于验证码封装类的主要内容,如果未能解决你的问题,请参考以下文章

Laravel通过request表单验证类返回封装http状态码

验证码封装类

封装了一个类,可生成验证码,缩略图,及水印图

4-5验证码类封装

4-1验证码类封装之GD库验证

Java 封装