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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
完美解决PHP中文乱码
Nov 26 PHP
PHP Memcached应用实现代码
Feb 08 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
Parse正式发布开源PHP SDK
Aug 11 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
Apr 10 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
Oct 04 PHP
详解thinkphp的Auth类认证
May 28 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中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
自动更新作用
2006/10/08 Javascript
Prototype RegExp对象 学习
2009/07/19 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
javascript计时器详解
2015/02/28 Javascript
基于jQuery实现网页打印功能
2015/12/01 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
python 实现两个线程交替执行
2020/05/02 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
简述数据库的设计过程
2015/06/22 面试题
如何理解委托
2012/01/06 面试题
智乐游戏测试笔试题
2014/05/21 面试题
2015年敬老院工作总结
2015/05/18 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
Redis RDB技术底层原理详解
2021/09/04 Redis