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利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
组合算法的PHP解答方法
Feb 04 PHP
php实现单链表的实例代码
Mar 22 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
php二维数组转成字符串示例
Feb 17 PHP
非常实用的php验证码类
May 15 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
May 09 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 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获取当前页面完整URL地址
2015/12/30 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
Python pass 语句使用示例
2014/03/11 Python
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
Python实现统计单词出现的个数
2015/05/28 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
python的unittest测试类代码实例
2017/12/07 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
法院实习人员自我鉴定
2013/09/26 职场文书
企业治理工作自我评价
2013/09/26 职场文书
应届生服务员求职信
2013/10/31 职场文书
公司合作协议书范本
2014/04/18 职场文书
公务员培的训心得体会
2014/09/01 职场文书
高中运动会广播稿
2014/09/16 职场文书
服务承诺书
2015/01/19 职场文书
撤诉申请怎么写
2015/05/19 职场文书
亲情作文之母爱
2019/09/25 职场文书
简单介绍 http请求响应参数、无连接无状态、MIME、状态码、端口、telnet、curl
2021/03/31 HTML / CSS
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS