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个人网站架设连环讲(二)
Oct 09 PHP
PHP5 面向对象程序设计
Feb 13 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
php数组键名技巧小结
Feb 17 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
php结合curl实现多线程抓取
Jul 09 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 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 dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
CI框架常用函数封装实例
2016/11/21 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
JavaScript 函数式编程的原理
2009/10/16 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
深入理解javascript中的this
2021/02/08 Javascript
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫