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 相关文章推荐
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
Mar 07 PHP
php分页示例代码
Mar 19 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
PHP 循环列出目录内容的函数代码
May 26 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
php打开远程文件的方法和风险及解决方法
Nov 12 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
PHP 极验验证码实例讲解
Sep 29 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
php之header的不同用法总结(实例讲解)
Nov 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生成图形(Libchart)实例
2013/11/06 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
Javascript与flash交互通信基础教程
2008/08/07 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
vue实现弹幕功能
2019/10/25 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
Django更新models数据库结构步骤
2020/04/01 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
医学护理系毕业生求职信
2013/10/01 职场文书
总经理秘书的岗位职责
2013/12/27 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
教师个人事迹材料
2014/12/17 职场文书
岳麓书院导游词
2015/02/03 职场文书
自我检讨书怎么写
2015/05/07 职场文书
主持人开场白台词
2015/05/29 职场文书