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 分页分组类
Dec 10 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
PHP stripos()函数及注意事项的分析
Jun 08 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 PHP
php编写简单的文章发布程序
Jun 18 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
laravel 5.5 关闭token的3种实现方式
Oct 24 PHP
WordPress多语言翻译插件 - WPML使用教程
Apr 01 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中动态HTML的输出技术
2006/10/09 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
Python实现方便使用的级联进度信息实例
2015/05/05 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
基于python 凸包问题的解决
2020/04/16 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
运行Python编写的程序方法实例
2020/10/21 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
印度低票价航空公司:GoAir
2017/10/11 全球购物
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
自我评价正确写法范文
2013/12/10 职场文书
司机辞职报告范文
2014/01/20 职场文书
消防安全承诺书
2014/05/22 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
vue backtop组件的实现完整代码
2021/04/07 Vue.js
解决numpy和torch数据类型转化的问题
2021/05/23 Python
Django实现drf搜索过滤和排序过滤
2021/06/21 Python
httpclient调用远程接口的方法
2022/08/14 Java/Android