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投票程序源码
Mar 11 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
Dec 16 PHP
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
php URL验证正则表达式
Jul 19 PHP
php 如何获取数组第一个值
Aug 06 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
PHP概率计算函数汇总
Sep 13 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
PHP CURL使用详解
Mar 21 PHP
Nginx+php配置文件及原理解析
Dec 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 数组的指针操作实现代码
2011/02/08 PHP
php获取目标函数执行时间示例
2014/03/04 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
jQuery技巧总结
2011/01/01 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
如何解决python多种版本冲突问题
2020/10/13 Python
模具专业毕业推荐信
2014/03/08 职场文书
国际商务专业求职信
2014/07/15 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
pandas求平均数和中位数的方法实例
2021/08/04 Python
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL