一个经典的PHP验证码类分享
这篇文章主要介绍了一个经典的PHP验证码类分享,本文不仅提供了类代码,还提供了使用例子及表单中使用的方法,需要的朋友可以参考下
我们通过PHP的GD库图像处理内容,设计一个验证码类Vcode。将该类声明在文件vcode.class.php中,并通过面向对象的特性将一些实现的细节封装在该类中。只要在创建对象时,为构造方法提供三个参数,包括创建验证码图片的宽度、高度及验证码字母个数,就可以成功创建一个验证码类的对象。该类的声明代码如下所示:
在上面的脚本中,虽然声明验证码类Vcode的代码比较多,但细节都被封装在类中,只要直接输出对象,就可以向客户端浏览器中输出幅图片,并可以在浏览器表单中使用。另外本类自动获取验证码图片中的字符串,促成在服务的$_SESSION["code"]中。在提交表单时,只有用户在表单中输入验证码图片上显示的文字,并和服务器中保留的验证码字符串完全相同时,表单才可以提交成功。(注意:验证码在服务器端在$_SESSION["code"]中,所以必须开启session会话才能使用该类,)
在下面的脚本code.php中,使用session_start()开启用户会话控制,然后包含验证码类Vcode所在文件vcode.class.php,创建该类对象并直接输出。就可以将随机生成的验证码图片发送出去,同时会自动将这个验证码字符串保存在服务器中一份。代码如下所示:
<?php class Vcode { private $width; //宽 private $height; //高 private $num; //数量 private $code; //验证码 private $img; //图像的资源 //构造方法, 三个参数 function __construct($width=80, $height=20, $num=4) { $this->width = $width; $this->height = $height; $this->num = $num; $this->code = $this->createcode(); //调用自己的方法 } //获取字符的验证码,, 用于保存在服务器中 function getcode() { return $this->code; } //输出图像 function outimg() { //创建背景 (颜色, 大小, 边框) $this->createback(); //画字 (大小, 字体颜色) $this->outstring(); //干扰元素(点, 线条) $this->setdisturbcolor(); //输出图像 $this->printimg(); } //创建背景 private function createback() { //创建资源 $this->img = imagecreatetruecolor($this->width, $this->height); //设置随机的背景颜色 $bgcolor = imagecolorallocate($this->img, rand(225, 255), rand(225, 255), rand(225, 255)); //设置背景填充 imagefill($this->img, 0, 0, $bgcolor); //画边框 $bordercolor = imagecolorallocate($this->img, 0, 0, 0); imagerectangle($this->img, 0, 0, $this->width-1, $this->height-1, $bordercolor); } //画字 private function outstring() { for($i=0; $i<$this->num; $i++) { $color= imagecolorallocate($this->img, rand(0, 128), rand(0, 128), rand(0, 128)); $fontsize=rand(3,5); //字体大小 $x = 3+($this->width/$this->num)*$i; //水平位置 $y = rand(0, imagefontheight($fontsize)-3); //画出每个字符 imagechar($this->img, $fontsize, $x, $y, $this->code{$i}, $color); } } //设置干扰元素 private function setdisturbcolor() { //加上点数 for($i=0; $i<100; $i++) { $color= imagecolorallocate($this->img, rand(0, 255), rand(0, 255), rand(0, 255)); imagesetpixel($this->img, rand(1, $this->width-2), rand(1, $this->height-2), $color); } //加线条 for($i=0; $i<10; $i++) { $color= imagecolorallocate($this->img, rand(0, 255), rand(0, 128), rand(0, 255)); imagearc($this->img,rand(-10, $this->width+10), rand(-10, $this->height+10), rand(30, 300), rand(30, 300), 55,44, $color); } } //输出图像 private function printimg() { if (imagetypes() & IMG_GIF) { header("Content-type: image/gif"); imagegif($this->img); } elseif (function_exists("imagejpeg")) { header("Content-type: image/jpeg"); imagegif($this->img); } elseif (imagetypes() & IMG_PNG) { header("Content-type: image/png"); imagegif($this->img); } else { die("No image support in this PHP server"); } } //生成验证码字符串 private function createcode() { $codes = "3456789abcdefghijkmnpqrstuvwxyABCDEFGHIJKLMNPQRSTUVWXY"; $code = ""; for($i=0; $i < $this->num; $i++) { $code .=$codes{rand(0, strlen($codes)-1)}; } return $code; } //用于自动销毁图像资源 function __destruct() { imagedestroy($this->img); } }
在下面的脚本code.php中,使用session_start()开启用户会话控制,然后包含验证码类Vcode所在文件vcode.class.php,创建该类对象并直接输出。就可以将随机生成的验证码图片发送出去,同时会自动将这个验证码字符串保存在服务器中一份。代码如下所示:
<?php //开启 session session_start(); include "vcode.class.php"; //构造方法 $vcode = new Vcode(80, 30, 4); //将验证码放到服务器自己的空间保存一份 $_SESSION['code'] = $vcode->getcode(); //将验证码图片输出 $vcode->outimg(); ?>
表单代码如下所示:
<?php session_start(); if(isset($_POST['dosubmit'])) { if(strtoupper($_SESSION['code']) == strtoupper($_POST['code']) ) { echo "输入成功!<br>"; }else{ echo "输入不对!<br>"; } } ?> <body> <form action="reg.php" method="post"> username: <input type="text"> <br> password: <input type="password"> <br> code: <input type="text" onkeyup="if(this.value!=this.value.toUpperCase()) this.value=this.value.toUpperCase()" size="6"> <img src="code.php" /> <br> <input type="submit" value="登 录"> <br> </form> </body>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题











PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。
