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面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
PHP中的session永不过期的解决思路及实现方法分享
Apr 20 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
Aug 09 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
PHP实现阳历到农历转换的类实例
Mar 07 PHP
php邮箱地址正则表达式验证
Nov 13 PHP
PHP实现导出excel数据的类库用法示例
Oct 15 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
php简单处理XML数据的方法示例
May 19 PHP
PHP构造二叉树算法示例
Jun 21 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微框架Dispatch简介
2014/06/12 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
前端必学之PHP语法基础
2016/01/01 PHP
浅谈php fopen下载远程文件的函数
2016/11/18 PHP
js局部刷新页面时间具体实现
2013/07/04 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
Python中非常实用的一些功能和函数分享
2015/02/14 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
python开发之str.format()用法实例分析
2016/02/22 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
旅游专业职业生涯规划范文
2014/01/13 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
Python matplotlib绘制雷达图
2022/04/13 Python