我们设计了一个代码类VCODE通过PHP的GD库图像
处理的内容,这类
文件中的vcode.class.php宣布,和一些实现细节都封装在类中通过面向对象的特征。只要我们
创建对象,我们提供了用于构建
方法的三个
参数,包括创建验证码宽度和高度,以及验证码字母的数量,我们可以创建成功的验证码类的一个对象,这个类的声明代码如下:
< PHP
类VcoDE {
私有$宽度;
私人$高度;
私有$
私有$代码;验证代码
私人为IMG; / /图像资源
三种参数的构造方法
功能__construct($宽度= 80美元= 20美元,高度,num = 4){
$ >宽度=宽度;
$ =高度=高度;
$;
美元->代码=(美元-> createcode); / /调用你自己的方法
}
获取
服务器中存储的字符代码,用于
功能获得按键的ASCII码(){
返回$ >代码;
}
输出图像
功能outimg(){
创建
背景(颜色、大小、边框)
美元-> createback();
设置(大小,
字体颜色)
美元-> outstring();
干扰元素(点、线)
美元-> setdisturbcolor();
输出图像
美元-> printimg();
}
创建背景
私有
函数createback(){
创建资源
美元-> img =新建一个真彩色图像(美元->美元->宽度、高度);
设置随机的背景色
背景颜色= imagecolorallocate美元(美元-> IMG,兰德(225, 255)、(225, 255)、兰特兰特(225, 255));
设置背景填充
imagefill(美元-> IMG,0, 0,$ bgcolor);
绘制框
美元($这imagecolorallocate BorderColor = -> IMG,0, 0, 0);
Imagerectangle(美元-> IMG,0, 0美元-> width-1,美元-> height-1,$ 4 No);
}
私有函数outstring(){
对(我= 0美元美元美元;微粒;i++){
颜色= imagecolorallocate美元(美元-> IMG,兰德(0, 128),伦德(0, 128),伦德(0, 128));
$字体=兰特(3,5); / /字体大小
$ x = 3 +(此宽度为$ $)。
Y元=兰特(0,取得字体高度($字体)- 3);
绘制每个字符
imagechar(美元-> IMG,字体美元,$ X,Y元,美元->代码{我},合色);
}
}
干扰元素集
私有函数setdisturbcolor(){
添加点
($ i = 0;$ i < 100;$ + +){
颜色= imagecolorallocate美元(美元-> IMG,兰德(0, 255),伦德(0, 255),伦德(0, 255));
imagesetpixel(美元-> IMG,兰特(1美元->宽度2),伦德(1,美元->身高-2),为彩色);
}
/ +行
($ i = 0;$ i < 10;$ + +){
颜色= imagecolorallocate美元(美元-> IMG,兰德(0, 255),伦德(0, 128),伦德(0, 255));
imagearc(美元-> IMG,伦德(10,美元->宽度+ 10),伦德(10,美元->高度+ 10),伦德(30, 300),伦德(30, 300),美元55,44,颜色);
}
}
输出图像
私有函数printimg(){
如果(imagetypes img_gif()){
页眉(内容
类型:图像);
imagegif(美元-> IMG);
} elseif(function_exists(imagejpeg )){
页眉(内容类型:图像);
imagegif(美元-> IMG);
} elseif(imagetypes img_png()){
页眉(内容类型:图像);
imagegif(美元-> IMG);
{人}
在这个php服务器中没有图像
支持;
}
}
生成的验证代码字符串
私有函数createcode(){
$码=3456789abcdefghijkmnpqrstuvwxyabcdefghijklmnpqrstuvwxy ;
= $代码;
对于($ i = 0;$ i数字;$ + +){
美元美元的代码。=代码{兰特(0,strlen($码)- 1)};
}
返回$代码;
}
用于图像资源的自动销毁
功能__destruct(){
销毁一图像(美元-> IMG);
}
}
上面的
脚本,虽然VcoDE代码较多,细节都封装在类。只要对象是直接输出,可以输出
图片到客户端
浏览器,可以在浏览器的形式。此外,这类自动获取字符串中的验证码图片,这有利于在服务的_session美元{代码}当表单被提交。,只有
用户输入显示在窗体中的验证码图片的文字是完全一样的保留在服务器代码字符串,所以形式可以提交成功。(注:验证码是在服务器端_session美元{代码},所以会话的会话必须打开使用这个类,)
在下面的脚本code.php,使用session_start()打开用户会话的
控制,又包括VCODE的vcode.class.php,创建类对象,直接输出,随机生成验证码图片可以发送出去,而验证码字符串自动
保存在服务器的一部分。代码如下所示:
< PHP
打开会话
session_start();
包括VCODE。类。PHP ;
构建方法
为VcoDE =新VCODE(80, 30, 4);
服务器上的验证代码/保存您自己的
空间的副本
_session美元{ 'code} = $ VCODE ->获得按键的ASCII码();
代码图像输出
为VcoDE -> outimg();
>
窗体代码如下所示:
< PHP
session_start();
如果(isset($ _post { 'dosubmit ' })){
如果(strtoupper($ _session { 'code ' })= strtoupper($ _post { 'code ' })){
输入成功!;
其他{ }
不
正确的输入;
}
}
>
用户名:
密码:
代码:
php经典验证类
下载代码:
php验证码类