<?php
/**
*
*/// $code = new VerifyCode(4,2,100,50);
$code = new VerifyCode();
// echo $code->code;
$code->outImage();class VerifyCode
{   // 验证码个数protected $number;// 验证码类型protected $codeType;// 验证码宽度protected $width;// 验证码高度protected $height;// 图像资源protected $image;// 验证码字符串protected $code;// 构造函数,初始化对象需要传入个数,类型,宽度和高度,不传则默认值function __construct($number=4, $codeType=2, $width=100, $height=50){// 初始化成员属性$this->number = $number;$this->codeType = $codeType;$this->width = $width;$this->height = $height;// 生成验证码,调用生成验证码函数creatCode()$this->code = $this->creatCode();// echo $this->code;}// 外部只允许读取code,不允许修改public function __get($name){if ($name = 'code') {return $this->code;}return false;}protected function creatCode(){// 通过验证码类型,生成对应的验证码switch ($this->codeType) {case '0': //生成纯数字验证码$code = $this->getNumberCode();break;case '1': //生成纯字母验证码$code = $this->getCharCode();break;case '2': //生成字母和数字混合验证码$code = $this->getNumCharCode();break;                                 default:die('不支持的验证码类型');}    return $code;}protected function getNumberCode(){//join():将数组元素合并成字符串(implode() 的别名),range(0,9):创建一个包含从 "0" 到 "9" 之间的元素的数组:$str = join('',range(0,9));  // substr():从0开始截取字符串,长度为$this->number,str_shuffle($str):随机打散字符串$strreturn substr(str_shuffle($str), 0,$this->number);}protected function getCharCode(){// 生成a-z的数组,然后拼接成字符串$str = join('',range('a','z'));// 小写字符串拼接大写字符串:strtoupper():将字符串转换为大写$str = $str.strtoupper($str);// 返回随机截取的字符串return substr(str_shuffle($str), 0,$this->number);}protected function getNumCharCode(){// 生成0-9的数组,拼接为字符串$numstr = join('',range(0,9));  // 生成a-z的数组,拼接为字符串$str = join('',range('a','z'));// 拼接数字和英文字符串$str = $numstr.$str.strtoupper($str);// 返回随机截取的字符串return substr(str_shuffle($str), 0,$this->number);}// 输出验证码图片 public function outImage(){// 创建画布$this->creatImage();// 填充背景色$this->fillBack();// 将验证码字符串画到画布中$this->drawChar();// 添加干扰元素$this->drawDisturb();// 输出并且显示验证码图片$this->show();}protected function creatImage(){// 创建画布,尺寸为$this->width, $this->height)$this->image = imagecreatetruecolor($this->width, $this->height);}protected function fillBack(){// imagefill(image, x, y, color)填充背景色:0,0,填充坐标起点,color为填充色        imagefill($this->image, 0, 0, $this->lightColor());}protected function lightColor(){// imagecolorallocate(image, red, green, blue): 为一幅图像分配颜色,浅色return imagecolorallocate($this->image, mt_rand(130,255), mt_rand(130,255), mt_rand(130,255));}protected function darkColor(){// imagecolorallocate(image, red, green, blue): 为一幅图像分配颜色,深色return imagecolorallocate($this->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));}protected function drawChar(){// 每个字符占的宽度:画布宽度/验证码个数$width = ceil($this->width/$this->number);// 循环写入验证码字符串内容for ($i=0; $i < $this->number ; $i++) { // 每个字的x坐标$x = mt_rand($i * $width, ($i + 1) * $width - 5);// 每个字的y坐标$y = mt_rand(0, $this->height - 15);// imagechar(image, font, x, y, c, color):写出横向的字符,C为字符内容imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());}}protected function drawDisturb(){for ($i=0; $i <150 ; $i++) { // 每个干扰元素的的x坐标$x = mt_rand(0, $this->width);// 每个字的y坐标$y = mt_rand(0, $this->height);// imagesetpixel(image, x, y, color);用于在指定坐标处绘制像素。imagesetpixel($this->image, $x, $y, $this->lightColor());}}protected function show(){// 设置header头header('Content-type:image/png');// 输出png格式的图片imagepng($this->image);}// 释放画布资源function __destruct(){// 销毁画布imagedestroy($this->image);}}

封装了一个加单的php验证码功能类,超级详细,麻雀虽小五脏俱全相关推荐

  1. Spring Boot进阶(16):Spring Boot 如何通过Redis实现手机号验证码功能? | 超级详细,建议收藏

    1. 前言

  2. html表单输入框添加验证码,织梦Dedecms为自定义表单添加验证码功能

    使用织梦Dedecms自定义表单的时候,即使你做了字段的验证,也很有可能被人刷很多垃圾的内容,更加安全的一个方法是为自定义表单添加上验证码功能.今天我就来为大家分享一下怎样给自定义表单添加验证码! 一 ...

  3. 单文件图片管理php,php封装的单文件(图片)上传类完整实例

    本文实例讲述了php封装的单文件(图片)上传类.分享给大家供大家参考,具体如下: //封装php中的单文件(图片)上传类 /* //参数1:$file 文件数组 5个属性值 name,type,siz ...

  4. php单文件上传实例,php封装的单文件(图片)上传类完整实例

    本文实例讲述了php封装的单文件(图片)上传类.分享给大家供大家参考,具体如下: //封装php中的单文件(图片)上传类 /* //参数1:$file 文件数组 5个属性值 name,type,siz ...

  5. php登录调用验证码,PHP编写登录验证码功能 附调用方法

    本文实例为大家分享了一个PHP写的登录验证码功能,供大家参考,具体内容如下 ShowKey.php<?php session_start(); //设置COOKIE或Session functi ...

  6. 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 StatusDialog 和自定义 Toast,全部支持背景颜色,圆角,边框和文字的自定义,构建者模

    MNProgressHUD 项目地址:maning0303/MNProgressHUD  简介: 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 S ...

  7. Django验证码*短信验证码之2-容联云通讯短信平台(联云通讯短信平台介绍、容联云通讯Python SDK、封装发送短信单例类)

    容联云通讯短信平台介绍 容联云通讯网址:https://www.yuntongxun.com/ 容联云管理控制台 容联云创建应用 容联云通讯Python SDK https://doc.yuntong ...

  8. 利用抽象工厂创建DAO、利用依赖注入去除客户端对工厂的直接依赖、将有关Article的各种Servlet封装到一个Servlet中(通过BaseServlet进行

    利用抽象工厂创建DAO.利用依赖注入去除客户端对工厂的直接依赖.将有关Article的各种Servlet全部封装到一个Servlet中(通过BaseServlet来进行ArticleServlet方法 ...

  9. React Native封装Toast与加载Loading组件

    React Native开发封装Toast与加载Loading组件 在App开发中,我们避免不了使用的两个组件,一个Toast,一个网络加载Loading,在RN开发中,也是一样,React Nati ...

  10. c 语言 验证码识别算法,一个简单的文件传输验证码识别c/s实现

    一个简单的文件传输验证码识别c/s实现 大体思路 client通过tcp向server传输一个待识别的验证图片,server端识别后通过tcp回传给client. server端识别验证码采用pyte ...

最新文章

  1. TensorRT Samples: MNIST(Plugin, add a custom layer)
  2. 2.4寸液晶控制方法
  3. HDOJ1106 排序
  4. Python项目实践:文本词频统计、软文的诗词风
  5. 读书笔记-大型网站技术架构
  6. swig c java gemt,SWIG C函数指针和JAVA
  7. paip.抓取网页内容--java php python
  8. Ruby gem 更换国内源
  9. 这 9 个 Java 开源项目 yyds
  10. linux常用net命令
  11. 阻抗匹配是什么意思?阻抗匹配原理详解
  12. 数据分析 之八种方法
  13. python绘制拟合曲线与样本点_python 拟合曲线并求参
  14. 福利:推荐一个免费的抠图网站
  15. 矩阵基础概念之行列式与秩
  16. qt creator插入代码块快速注释snippets代码片段的功能
  17. 美国大学计算机工程专业排名,2018美国大学计算机工程专业排名_美国大学计算机工程排名...
  18. AI智能联系人管理系统(二)
  19. 太神了!世界上最著名的菲尔人格测试!
  20. 径向基网络(RBF network)之BP监督训练

热门文章

  1. 移动魔百盒CM211-1_YS代工_S905L3B_RTL8822C_线刷固件包
  2. 萤石云视频监控接入详细流程,添加设备,展示视频,云台控制
  3. 我对Javascript闭包的理解
  4. 【总结】1050- Code Review流程规范
  5. 搜狐新闻数据400w+
  6. 小米官网首页(html+css+JavaScript)
  7. 运维工程师种种尴尬的瞬间情景,你有无?
  8. 程序员必须收藏的网站整理(持续更新)
  9. copyonwritearraylist 深究
  10. catia标题栏自动填写_CATIA 工程图 常见问题之二 工程图标题栏设置