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 相关文章推荐
PHP3 safe_mode 失效漏洞
Oct 09 PHP
PHP文件读写操作之文件写入代码
Jan 13 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
PHP自定义大小验证码的方法详解
Jun 07 PHP
PHP计算一年多少个星期和每周的开始和结束日期
Jul 01 PHP
PHP利用header跳转失效的解决方法
Oct 24 PHP
非常全面的php日期时间运算汇总
Nov 04 PHP
Zend Framework教程之MVC框架的Controller用法分析
Mar 07 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 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
PHP 和 XML: 使用expat函数(二)
2006/10/09 PHP
实用函数9
2007/11/08 PHP
php单一接口的实现方法
2015/06/20 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
很好用的js日历算法详细代码
2013/03/07 Javascript
jquery中的查找parents与closest方法之间的区别
2013/12/02 Javascript
js读取配置文件自写
2014/02/11 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
新学期班主任寄语
2014/01/18 职场文书
生产部管理制度
2014/01/31 职场文书
销售经理工作职责
2014/02/03 职场文书
个人收入证明模板
2014/09/18 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
基于Redis过期事件实现订单超时取消
2021/05/08 Redis
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js