加入收藏 | 设为首页 | 会员中心 | 我要投稿 菏泽站长网 (https://www.0530zz.cn/)- 数据工坊、负载均衡、数据快递、云计算、事件网格!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP封装的验证码工具类定义与用法示例

发布时间:2022-06-20 09:08:50 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP封装的验证码工具类定义与用法,结合完整实例形式详细分析了php封装的验证码工具类相关图片创建、随机字符串、验证码验证等功能定义与使用技巧,需要的朋友可以参考下。 本文实例讲述了PHP封装的验证码工具类定义与用法,分享给大家供大
  这篇文章主要介绍了PHP封装的验证码工具类定义与用法,结合完整实例形式详细分析了php封装的验证码工具类相关图片创建、随机字符串、验证码验证等功能定义与使用技巧,需要的朋友可以参考下。
 
  本文实例讲述了PHP封装的验证码工具类定义与用法,分享给大家供大家参考,具体如下:
 
  下面分享的是我自己封装的验证码工具类,在平时的项目中会比较经常用到的工具类,目前封装的这个工具类简易版的,如果有需要的伙伴可以拿去用,当然我建议用之前在配置文件里增加一些选项信息
 
  //验证码宽度
  private $width;
  //验证码高度
  private $height;
  //验证的个数
  private $length;
  //干扰点个数
  private $dots;
  //干扰点的类型
  private $type;
  //干扰线个数
  private $lines;
  //文字
  private $font;
  方便在项目中对验证码的要求进行更改,以方便项目逻辑的需求,而且验证码所选用的字体需要和验证码工具类放在同一目录下,否则就要在配置文件中修改字体的路径才能实现验证码的显示
 
  <?php
  //创建验证码工具类
  class captcha {
   //验证码的各种参数
   //验证码宽度
   private $width;
   //验证码高度
   private $height;
   //验证的个数
   private $length;
   //干扰点个数
   private $dots;
   //干扰点的类型
   private $type;
   //干扰线个数
   private $lines;
   //文字
   private $font;
   //验证码属性的构造方法
   public function __construct($arr = array ()) {
    //将属性赋值
    $this->width = isset ($arr['width']) ? trim($arr['width']) : '270';
    $this->height = isset ($arr['height']) ? trim($arr['height']) : '30';
    $this->length = isset ($arr['length']) ? trim($arr['length']) : '4';
    $this->dots = isset ($arr['dots']) ? trim($arr['dots']) : '81';
    $this->type = isset ($arr['type']) ? trim($arr['type']) : '*';
    $this->lines = isset ($arr['lines']) ? trim($arr['lines']) : '5';
    $this->font = isset ($arr['font']) ? trim($arr['font']) : './cambriab.ttf';
   }
   //创建验证码的方法
   public function captcha() {
    //创建画布
    $img = imagecreatetruecolor($this->width, $this->height);
    //填充颜色
    //颜色资源
    $color = imagecolorallocate($img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
    //填充背景
    imagefill($img, 0, 0, $color);
    //添加干扰点
    for ($i = 0; $i < $this->dots; $i++) {
     //颜色资源
     $dots_color = imagecolorallocate($img, mt_rand(150, 200), mt_rand(150, 200), mt_rand(150, 200));
     //插入干扰点
     imagestring($img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), $this->type, $dots_color);
    }
    //添加干扰线
    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);
    }
    //首先获取验证码,然后插入验证文字
    //文字高度
    $size = mt_rand(18, 20);
    //获取验证码
    $str = $this->captchastring();
    for ($i = 0; $i < strlen($str); $i++) {
     //颜色资源
     $str_color = imagecolorallocate($img, mt_rand(50, 150), mt_rand(50, 150), mt_rand(50, 150));
     //插入验证码
     imagettftext($img, $size, mt_rand(-45, 45), $this->width / ($this->length + 2) * ($i +1), (($this->height - $size) / 2) + $size, $str_color, $this->font, $str[$i]);
    }
    //将得到的验证码存入SESSION中,便于以后的验证码判断
    @ session_start();
    $_SESSION['captcha'] = $str;
    //输出图片
    header("content-type:image/png");
    imagepng($img);
    //清除资源
    imagedestroy($img);
   }
   //获取随机的验证内容:A-Z,a-z,1-9
   private function captchaString() {
    //获取四个随机的字符串
    $str = "";
    for ($i = 0; $i < $this->length; $i++) {
     switch (mt_rand(1, 3)) {
      case 1 :
       $str .= chr(mt_rand(49, 57));
       break;
      case 2 :
       $str .= chr(mt_rand(97, 122));
       break;
      case 3 :
       $str .= chr(mt_rand(65, 90));
       break;
     }
    }
    return $str;
   }
   //判断验证码
   public static function checkCaptcha($captcha) {
    @ session_start();
    return strtoupper($captcha) === strtoupper($_SESSION['captcha']);
   }
  }
  //使用方法:
  $img = new captcha();//这里采用默认参数
  $img->captcha();
  ?>

(编辑:菏泽站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读