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


Posted in PHP onAugust 22, 2018

本文实例讲述了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();
?>

运行结果:

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

注:代码中用到的字体为cambriab.ttf可完整实例代码点击此处本站下载

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
使用sockets:从新闻组中获取文章(三)
Oct 09 PHP
php include的妙用,实现路径加密
Jul 29 PHP
php 不同编码下的字符串长度区分
Sep 26 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
Jun 28 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
PHP易混淆函数的区别及用法汇总
Nov 22 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
PHP命名空间(namespace)原理与用法详解
Dec 11 PHP
php提高脚本性能的4个技巧
Aug 18 PHP
Yii2语言国际化自动配置详解
Aug 22 #PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 #PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 #PHP
PHP封装的完整分页类示例
Aug 21 #PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 #PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 #PHP
PHP依赖注入原理与用法分析
Aug 21 #PHP
You might like
NO3第三帝国留言簿制作过程
2006/10/09 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
js转化毫秒为时间格式代码
2014/04/10 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
js中this用法实例详解
2015/05/05 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
jQuery操作cookie
2016/08/08 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
2018/08/10 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
Django实现单用户登录的方法示例
2019/03/28 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
农田水利实习自我鉴定
2013/09/19 职场文书
质检员岗位职责
2013/12/17 职场文书
毕业生就业意向书
2014/04/01 职场文书
白酒营销策划方案
2014/08/17 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers