Heim >Backend-Entwicklung >PHP-Tutorial >Vollständiger Beispielcode der in PHP gekapselten Verifizierungscode-Toolklasse

Vollständiger Beispielcode der in PHP gekapselten Verifizierungscode-Toolklasse

黄舟
黄舟Original
2017-02-27 10:02:161179Durchsuche

Das Beispiel in diesem Artikel beschreibt die in PHP gekapselte Verifizierungscode-Toolklasse. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

<?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;]));
    }
}

Das Obige ist der Inhalt des vollständigen Beispielcodes der in PHP gekapselten Verifizierungscode-Toolklasse Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn