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面向对象全攻略 (五) 封装性
Sep 30 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
php url路由入门实例
Apr 23 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
Jul 21 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
Laravel程序架构设计思路之使用动作类
Jun 07 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 PHP
php解决约瑟夫环算法实例分析
Sep 30 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
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
js实现拖拽元素选择和删除
2020/08/25 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
用Python中的字典来处理索引统计的方法
2015/05/05 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
保证书范文大全
2014/04/28 职场文书
琅琊山导游词
2015/02/05 职场文书
母亲节感言
2015/08/03 职场文书
《火烧云》教学反思
2016/02/23 职场文书
JavaScript分页组件使用方法详解
2021/07/26 Javascript
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers