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编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
PHP对MongoDB[NoSQL]数据库的操作
Mar 01 PHP
利用php递归实现无限分类 格式化数组的详解
Jun 08 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
php中stdClass的用法分析
Feb 27 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
zen_cart实现支付前生成订单的方法
May 06 PHP
解读PHP中上传文件的处理问题
May 29 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
PHP屏蔽关键字实现方法
Nov 17 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 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 中关于ord($str)&amp;gt;0x80的详细说明
2012/09/23 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
2011/03/17 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
使用python实现接口的方法
2017/07/07 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
条幅标语大全
2014/06/20 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书
Python下opencv库的安装过程及问题汇总
2021/06/11 Python
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android