热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:简单实用的PHP验证码类

篇首语:本文由编程笔记#小编为大家整理,主要介绍了简单实用的PHP验证码类相关的知识,希望对你有一定的参考价值。最近在学习

篇首语:本文由编程笔记#小编为大家整理,主要介绍了简单实用的PHP验证码类相关的知识,希望对你有一定的参考价值。


最近在学习php。实现了一个简单的验证码类,仅供参考。记得自己的PHP环境得有GD库。

先上效果图:

技术分享图片

    图一

技术分享图片

    图二

 


php
/**
* 验证码类
*/
class Code
{
// 验证码个数
protected $num;
// 验证码类型(纯数字 纯字母 组合)
protected $codeType;
// 验证码宽度
protected $width;
// 验证码高度
protected $height;
// 验证码$code
protected $code;
// 图像资源$image
protected $image;
// 初始化成员变量,给默认值
public function __construct($num = 4, $codeType = 2, $width = 100, $height = 50)
{
$this->num = $num;
$this->codeType = $codeType;
$this->width = $width;
$this->height = $height;
$this->code = $this->createCode();
$this->image = $this->createImage();
// echo $this->code;
}
// 创建验证码
protected function createCode()
{
// 根据验证码类型调用不同方法
switch ($this->codeType) {
case 0:
$code = $this->getNumberCode();
break;
case 1:
$code = $this->getCharCode();
break;
case 2:
$code = $this->getMixCode();
break;
default:
die(‘类型错误‘);
}
return $code;
}
// 纯数字验证码
protected function getNumberCode()
{
// range(0, 9)返回数组 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// join(‘‘, range(0,9))返回字符串‘0123456789‘

$num = join(‘‘, range(0, 9));
// str_shuffle($num)打乱‘0123456789‘, 再用substr()截取打乱后的前四位字符串
return substr(str_shuffle($num), 0, 4);
}
// 纯字母验证码
protected function getCharCode()
{
$char = join(‘‘, range(‘a‘, ‘z‘));
$char = $char . strtoupper($char);
return substr(str_shuffle($char), 0, 4);
}
// 字母数字组合验证码
protected function getMixCode()
{
$num = join(‘‘, range(0, 9));
$char = join(‘‘, range(‘a‘, ‘z‘));
$mix = $num . $char . strtoupper($char);
return substr(str_shuffle($mix), 0, 4);
}
// 创建图像
protected function createImage()
{
// 创建画布
$image = imagecreatetruecolor($this->width, $this->height);
// 填充颜色
imagefill($image, 0, 0, $this->lightColor($image));
// 画字符 根据传递的字符数量$this->num,这里默认值为4
for ($i = 0; $i <$this->num; $i++) {
// 分别取x坐标(0, 25) (25, 50)(50, 75)(75, 100), +10 和-15 是为了是字符距离左右有点空隙,可以自己微调
$x = mt_rand(floor($this->width / $this->num) * $i + 10, floor($this->width / $this->num) * ($i + 1) - 15);
$y = mt_rand(10, $this->height - 20);
imagechar(
$image, 5, $x, $y, $this->code[$i], $this->darkColor($image));
}
// 干扰点 150个
for ($i = 0; $i <150; $i++) {
imagesetpixel(
$image, mt_rand(0, $this->width), mt_rand(0, $this->height), $this->darkColor($image));
}
// 干扰线 5条
for ($i = 0; $i <5; $i++) {
imageline(
$image, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $this->darkColor($image));
}
// 设置mime
header(‘Content-type:image/png‘);
// 输出图像
imagepng($image);
// 释放资源
imagedestroy($image);
}
// 浅色
protected function lightColor($image)
{
// 浅色的rgb值范围大概是130~255之间
return imagecolorallocate($image, mt_rand(130, 255), mt_rand(130, 255), mt_rand(130, 255));
}
// 深色
protected function darkColor($image)
{
// 深色的rgb值范围大概是0~120之间
return imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
}
}

在一个新文件里实例化就可以使用。


推荐阅读
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • 本文介绍了PHP常量的定义和使用方法,包括常量的命名规则、大小写敏感性、全局范围和标量数据的限制。同时还提到了应尽量避免定义resource常量,并给出了使用define()函数定义常量的示例。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
author-avatar
呵呵傻乎乎宝宝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有