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 相关文章推荐
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
PHP 替换模板变量实现步骤
Aug 24 PHP
php 文件上传代码(限制jpg文件)
Jan 05 PHP
php中用foreach来操作数组的代码
Jul 17 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
php使用ob_start()实现图片存入变量的方法
Nov 14 PHP
thinkphp连贯操作实例分析
Nov 22 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 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设计模式之解释器模式的深入解析
2013/06/13 PHP
php实现通过ftp上传文件
2015/06/19 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
Python压缩和解压缩zip文件
2015/02/14 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
环境工程大学生个人的自我评价
2013/10/08 职场文书
期末总结的个人自我评价
2013/11/02 职场文书
运动会广播稿200米
2014/01/27 职场文书
小学一年级学生评语
2014/04/22 职场文书
公司介绍信范文
2015/01/31 职场文书
爱国教育主题班会
2015/08/14 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书