Home  >  Article  >  Backend Development  >  Complete example code of verification code tool class encapsulated in PHP

Complete example code of verification code tool class encapsulated in PHP

黄舟
黄舟Original
2017-02-27 10:02:161175browse

The example of this article describes the verification code tool class encapsulated in PHP. Share it with everyone for your reference, the details are as follows:

<?php
//验证码工具类
class Captcha{
    //属性
    private $width;
    private $height;
    private $fontsize;
    private $pixes;
    private $lines;
    private $str_len;
    /*
     * 构造方法
     * @param1 array $arr = array(),初始化属性的关联数组
    */
    public function __construct($arr = array()){
      //初始化
      $this->width = isset($arr[&#39;width&#39;]) ? $arr[&#39;width&#39;] : $GLOBALS[&#39;config&#39;][&#39;captcha&#39;][&#39;width&#39;];
      $this->height = isset($arr[&#39;height&#39;]) ? $arr[&#39;height&#39;] : $GLOBALS[&#39;config&#39;][&#39;captcha&#39;][&#39;height&#39;];
      $this->fontsize = isset($arr[&#39;fontsize&#39;]) ? $arr[&#39;fontsize&#39;] : $GLOBALS[&#39;config&#39;][&#39;captcha&#39;][&#39;fontsize&#39;];
      $this->pixes = isset($arr[&#39;pixes&#39;]) ? $arr[&#39;pixes&#39;] : $GLOBALS[&#39;config&#39;][&#39;captcha&#39;][&#39;pixes&#39;];
      $this->lines = isset($arr[&#39;lines&#39;]) ? $arr[&#39;lines&#39;] : $GLOBALS[&#39;config&#39;][&#39;captcha&#39;][&#39;lines&#39;];
      $this->str_len = isset($arr[&#39;str_len&#39;]) ? $arr[&#39;str_len&#39;] : $GLOBALS[&#39;config&#39;][&#39;captcha&#39;][&#39;str_len&#39;];
    }
    /*
     * 产生验证码图片
    */
    public function generate(){
      //制作画布
      $img = imagecreatetruecolor($this->width,$this->height);
      //给定背景色
      $bg_color = imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
      imagefill($img,0,0,$bg_color);
      //制作干扰线
      $this->getLines($img);
      //增加干扰点
      $this->getPixels($img);
      //增加验证码文字
      $captcha = $this->getCaptcha();
      //文字颜色
      $str_color = 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,$str_color)){
        //成功:输出验证码
        header(&#39;Content-type:image/png&#39;);
        imagepng($img);
      }else{
        //失败
        return false;
      }
    }
    /*
     * 获取验证码随机字符串
     * @return string $captcha,随机验证码文字
    */
    private function getCaptcha(){
      //获取随机字符串
      $str = implode(&#39;&#39;,array_merge(range(&#39;a&#39;,&#39;z&#39;),range(&#39;A&#39;,&#39;Z&#39;),range(1,9)));
      //随机取
      $captcha = &#39;&#39;;  //保存随机字符串
      for($i = 0,$len = strlen($str);$i < $this->str_len;$i++){
        //每次随机取一个字符
        $captcha .= $str[mt_rand(0,$len - 1)] . &#39; &#39;;
      }
      //将数据保存到session
      $_SESSION[&#39;captcha&#39;] = str_replace(&#39; &#39;,&#39;&#39;,$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);
      }
    }
    /*
     * 验证验证码
     * @param1 string $captcha,用户提交的验证码
     * @return bool,成功返回true,失败返回false
    */
    public static function checkCaptcha($captcha){
      //验证码不区分大小写
      return (strtolower($captcha) === strtolower($_SESSION[&#39;captcha&#39;]));
    }
}

The above is the content of the complete example code of the verification code tool class encapsulated in PHP. For more related content, please pay attention to the PHP Chinese website (www. php.cn)!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn