Laravel下生成验证码的类


Posted in PHP onNovember 15, 2017

本文实例为大家分享了Laravel生成验证码的类,供大家参考,具体内容如下

<?php
 
namespace App\Tool\Validate;
 
//验证码类
class ValidateCode {
  private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
  private $code;//验证码
  private $codelen = 4;//验证码长度
  private $width = 130;//宽度
  private $height = 50;//高度
  private $img;//图形资源句柄
  private $font;//指定的字体
  private $fontsize = 20;//指定字体大小
  private $fontcolor;//指定字体颜色
 
  //构造方法初始化
  public function __construct()
  {
    $this->font = public_path() . '/fonts/Elephant.ttf';//注意字体路径要写对,否则显示不了图片
    $this->createCode();
  }
  //生成随机码
  private function createCode()
  {
    $_len = strlen($this->charset) - 1;
    for ($i = 0;$i < $this->codelen;++$i) {
      $this->code .= $this->charset[mt_rand(0, $_len)];
    }
  }
  //生成背景
  private function createBg()
  {
    $this->img = imagecreatetruecolor($this->width, $this->height);
    $color = imagecolorallocate($this->img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
    imagefilledrectangle($this->img, 0, $this->height, $this->width, 0, $color);
  }
  //生成文字
  private function createFont()
  {
    $_x = $this->width / $this->codelen;
    for ($i = 0;$i < $this->codelen;++$i) {
      $this->fontcolor = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
      imagettftext($this->img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(1, 5), $this->height / 1.4, $this->fontcolor, $this->font, $this->code[$i]);
    }
  }
  //生成线条、雪花
  private function createLine()
  {
    //线条
    for ($i = 0;$i < 6;++$i) {
      $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
      imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color);
    }
    //雪花
    for ($i = 0;$i < 100;++$i) {
      $color = imagecolorallocate($this->img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
      imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color);
    }
  }
  //输出
  private function outPut()
  {
    header('Content-type:image/png');
    imagepng($this->img);
    imagedestroy($this->img);
  }
  //对外生成
  public function doimg()
  {
    $this->createBg();
    $this->createLine();
    $this->createFont();
    $this->outPut();
  }
  //获取验证码
  public function getCode()
  {
    return strtolower($this->code);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
win7下memCache的安装过程(具体操作步骤)
Jun 28 PHP
php求正负数数组中连续元素最大值示例
Apr 11 PHP
PHP常用正则表达式集锦
Aug 17 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
浅析PHP中的i++与++i的区别及效率
Jun 15 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
laravel邮件发送的实现代码示例
Jan 31 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 #PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 #PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 #PHP
PHP中递归的实现实例详解
Nov 14 #PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 #PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 #PHP
浅谈PHP中如何实现Hook机制
Nov 14 #PHP
You might like
PHP抽象类 介绍
2012/06/13 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
python自动发送邮件脚本
2018/06/20 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
python3下载抖音视频的完整代码
2019/06/05 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
python列表生成器迭代器实例解析
2019/12/19 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
农业大学毕业生的个人自我评价
2013/10/11 职场文书
医学生自荐信范文
2013/12/03 职场文书
企业厂长岗位职责
2013/12/17 职场文书
清华大学自主招生自荐信
2014/01/29 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
医学专业大学生求职信
2014/07/12 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
面试通知邮件
2015/04/20 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers