0

0

John细说PHP的验证码

php中文网

php中文网

发布时间:2016-08-29 08:36:49

|

1285人浏览过

|

来源于php中文网

原创

细说php中的验证码类创建

我这里自己写了一个验证码类,我来演示一下怎么使用,我是菜鸟一枚,大神请略过。我来讲解一下它的使用方法,总共需要两步即可。

第一步:

下载我制作好的验证码类。下载地址:http://files.cnblogs.com/files/xfjpeter/Verify.zip

第二步:

 1.创建一个字的验证码文件

立即学习PHP免费学习笔记(深入)”;

 1 php
 2 
 3 #引入验证码类文件
 4 require_once('Verify.class.php');
 5 
 6 #实例化验证码类
 7 #初始化的使用可以传四个参数,分别是:验证码图片的长、高,验证码的长度,验证码的类型(验证码的类型需要将bgRand属性设置为false)
 8 $code = new Verify(140, 40, 6, 6);
 9 
10 #设置验证码图片的长度
11 $code -> width = 200;
12 
13 #设置验证码图片的高度
14 $code -> height = 60;
15 
16 #是否随机背景,默认true(随机)
17 $code -> bgRand = false;
18 
19 #显示验证码
20 $code -> verify();

 生成的图片样式为如图

 

ERMEB域名PHP离线网络授权系统
ERMEB域名PHP离线网络授权系统

感谢您选择使用ERMEB域名授权离线网络验证系统(简称:ERMEB域名授权系统)是ERMEB团队开发,ERMEB域名授权系统是国内最稳定,最强大,最先进的域名授权管理平台解决方案之一,ERMEB域名授权系统采用PHP +Mysql的技术,ERMEB域名授权系统框架使用Thinkphp6/mysql数据库基于Markdown开发者文档开发而成,项目安装请参考ThinkPHP官方文档及下面的服务环境说

下载

2.验证码类文件为

  1 php
  2 
  3 /**
  4  * 验证码类
  5  * @author John 
  6  */
  7 class Verify
  8 {
  9     private $width = 160;       //验证码的宽度
 10     private $height = 60;       //验证码的高度
 11     private $type = 1;          //验证码的类型
 12     private $length = 4;        //验证码的长度
 13     private $code;              //验证码
 14     private $img;               //图像的资源
 15     private $seKey = 'John';    //密钥
 16     private $bgRand = true;     //随机背景图片
 17     
 18     /**
 19      * 构造函数
 20      * @param type $width 验证码的宽度
 21      * @param type $height 验证码的高度
 22      * @param type $length 验证码的长度
 23      * @param type $type 验证码的类型
 24      */
 25     public function __construct($width = 160, $height = 40, $length = 4, $type = 1)
 26     {
 27         $this->width  = !empty($width)  ? $width  : $this->width;
 28         $this->height = !empty($height) ? $height : $this->height;
 29         $this->length = !empty($length) ? $length : $this->length;
 30         $this->type   = !empty($type)   ? $type   : $this->type;
 31     }
 32     
 33     /**
 34      * 设置属性值
 35      * @param type $name 属性名
 36      * @param type $value 属性值
 37      */
 38     public function __set($name, $value)
 39     {
 40         if (isset($name)) {
 41             $this->$name = $value;
 42         }
 43     }
 44     
 45     /**
 46      * 获取属性值
 47      * @param type $name 属性名
 48      * @return type 返回属性值
 49      */
 50     public function __get($name) {
 51         return $this->$name;
 52     }
 53     
 54     /**
 55      * 校验验证码
 56      * @param type $code 表单提供的验证码
 57      * @return boolean
 58      */
 59     public function check($code){
 60         if (!isset($_SESSION)) {session_start();}
 61         if ($this->encodeVerify(strtolower($code)) === $_SESSION['code']){
 62             return true;
 63         }else{
 64             return false;
 65         }
 66     }
 67     
 68     //输出验证码
 69     public function verify()
 70     {
 71         $this->code = $this->createVerify();
 72         //创建背景
 73         $this->createBackground();
 74         //文字显示
 75         $this->writeString();
 76         //画干扰线
 77         $this->paitLine();
 78         //输入图像
 79         $this->printImg();
 80     }
 81     
 82     /**
 83      * 创建背景图片
 84      */
 85     private function createBackground()
 86     {
 87         //从图片库创建一个图像, 判断是否随机
 88         if ($this->bgRand){
 89             $img = imagecreatefromjpeg('./verify/bgs/'.mt_rand(1,8).'.jpg');
 90         }else{
 91             $img = imagecreatefromjpeg('./verify/bgs/'.$this->type.'.jpg');
 92         }
 93         //创建一个图片
 94         $this->img = imagecreatetruecolor($this->width, $this->height);
 95         //把图片复制到创建的图像上
 96         imagecopyresampled($this->img, $img, 0, 0, 0, 0, $this->width, $this->height, imagesx($img), imagesy($img));
 97     }
 98     
 99     /**
100      * 在图片上写字
101      */
102     private function writeString()
103     {
104         $color = imagecolorallocatealpha($this->img, mt_rand(0,128), mt_rand(0,128), mt_rand(0,128), 0);
105         $fontType = './verify/ttfs/'.mt_rand(1,6).'.ttf';
106         $fontSize = mt_rand(15, 20);
107         for ($i = 0; $i < $this->length; $i++) {
108             $x = 3+($this->width/$this->length)*$i;
109             $y = mt_rand(($this->height/3)*2, ($this->height/3)*2);
110             //把验证码写在图片上
111             imagettftext($this->img, $fontSize, 0, $x, $y, $color, $fontType, $this->code[$i]);
112         }
113     }
114     
115     /**
116      * 画干扰线和字母
117      */
118     private function paitLine()
119     {
120         $px = $py = 0;
121         $codes = '2345678abcdefhijkmnpqrstuvwxyz';
122         for ($i = 0; $i < $this->width/4; $i++){
123             $num = mt_rand(0, strlen($codes)-1);
124124             $color = imagecolorallocatealpha($this->img, 255, 255, 255, 80);
125             //画字母
126             imagechar($this->img, 8, mt_rand(3, $this->width), mt_rand(3, $this->height), $codes{$num}, $color);
127         }
128     }
129     
130     /**
131      * 输入图像
132      */
133     private function printImg()
134     {
135         if(function_exists('imagegif')){
136             // 针对 GIF
137             header('Content-Type: image/gif');
138             imagegif($this->img);
139         }elseif(function_exists('imagejpeg')){
140             // 针对 JPEG
141             header('Content-Type: image/jpeg');
142             imagejpeg($this->img, NULL, 100);
143         }elseif(function_exists('imagepng')){
144             // 针对 PNG
145             header('Content-Type: image/png');
146             imagepng($this->img);
147         }elseif(function_exists('imagewbmp')){
148             // 针对 WBMP
149             header('Content-Type: image/vnd.wap.wbmp');
150             imagewbmp($this->img);
151         }
152     }
153     
154     /**
155      * 生成验证码
156      * @return string 返回生成的验证码
157      */
158     private function createVerify()
159     {
160         $codeSet = '2345678abcdefhijkmnpqrstuvwxyz';
161         $codes = '';
162         for ($i = 0; $i < $this->length; $i++) {
163             $codes .= $codeSet[mt_rand(0, strlen($codeSet)-1)];
164         }
165         //把验证码保存到session中
166         if (!isset($_SESSION)) {session_start();}
167         $_SESSION['code'] = $this->encodeVerify(strtolower($codes));
168 //        $_SESSION['code'] = $codes;
169         return $codes;
170     }
171     
172     /**
173      * 加密验证码
174      * @param type $string
175      * @return type
176      */
177     private function encodeVerify($string)
178     {
179         $key = substr(md5($this->seKey), 5, 8);
180         $str = substr(md5($string), 8, 10);
181         return md5($key . $str);
182     }
183     
184     /**
185      * 销毁图像
186      */
187     function __destruct()
188     {
189         if (isset($this->img)){
190             imagedestroy($this->img);
191         }
192     }
193 }

 以上两步即可生生你想要的验证。

另外说明,Verify.class.php中有一个验证验证码是否正确的方法,使用如下

将你从界面中获得的验证码传入code方法中即可

if ($code -> code(这是传入你页面中获取的验证码值)){
    #这是验证正确的操作
}else{
    #验证失败的操作
}

以上就是我创建整个验证码的心得,希望对点击进来看的人有帮助。

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
c语言项目php解释器源码分析探索
c语言项目php解释器源码分析探索

共7课时 | 0.4万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号