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加密解密的代码
Jul 16 PHP
C# Assembly类访问程序集信息
Jun 13 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
基于递归实现的php树形菜单代码
Nov 19 PHP
php计算函数执行时间的方法
Mar 20 PHP
php中smarty模板条件判断用法实例
Jun 11 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
PHP基于递归实现的约瑟夫环算法示例
Aug 27 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
May 06 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 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 中InnoDB和MyISAM的区别分析小结
2008/04/15 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
JavaScript中的闭包原理分析
2010/03/08 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
js初始化验证实例详解
2016/11/26 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
vue 解决computed修改data数据的问题
2019/11/06 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
python sys模块sys.path使用方法示例
2013/12/04 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
Python中一行和多行import模块问题
2018/04/01 Python
解读python如何实现决策树算法
2018/10/11 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
使用Python在Windows下获取USB PID&amp;VID的方法
2019/07/02 Python
django框架中间件原理与用法详解
2019/12/10 Python
Python list运算操作代码实例解析
2020/01/20 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
信息工程学院毕业生推荐信
2013/11/05 职场文书
优秀求职信范文分享
2013/12/19 职场文书
证婚人搞笑证婚词
2014/01/10 职场文书
硕士生找工作求职信
2014/07/05 职场文书
个人委托书范本汇总
2014/10/01 职场文书