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
PHP时间戳使用实例代码
Jun 07 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
Oct 22 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
Aug 09 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
Aug 10 PHP
PHP中多维数组的foreach遍历示例
Jun 13 PHP
win7安装php框架Yii的方法
Jan 25 PHP
php7 安装yar 生成docker镜像
May 09 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 PHP
php + WebUploader实现图片批量上传功能
May 06 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
Mysql的常用命令
2006/10/09 PHP
PHP4实际应用经验篇(9)
2006/10/09 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
ECMAScript 基础知识
2007/06/29 Javascript
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
python3音乐播放器简单实现代码
2020/04/20 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
Python tcp传输代码实例解析
2020/03/18 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
详解Python中第三方库Faker
2020/09/25 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript