- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章php封装的验证码类分享由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
验证码是我们开发的时候经常用到的功能,所以在此本人包装了一个验证码类,应该可以作为php的类插件用,在此分享给各位读友.
实现的原理也是很简单,就是利用画布的几个函数,再加上一些字符串的获取,东凑西凑就构成了,呵呵.
这里大概写一下思路吧,其实这个类已经注释的非常清楚了,不过,个人还是在行文前啰嗦一下.
首先是关于一些函数的解释,这里的解释纯属个人体会,有什么错误的地方,还请读者指正.
1、创建画布函数:imagecreatetruecolor(w,h),
说明:用于创建一个画布.
w 画布的宽 。
h 画布的高 。
此函数的返回值资源类(gd) 。
2、为画布创建一种颜色:imagecolorallocate(img,red,green,blue) 。
说明:
img画布资源 。
red,green,blue 是0~255的范围 。
3、为画布添加背景色 。
imagefill(img,x,y,color),
说明:
在 image 图像的坐标 x,y(图像左上角为 0, 0) 。
4、画边框 。
imagerectangle($img,x1,y1,x2,y2,color),
说明:
其左上角坐标为 x1, y1,右下角坐标为 x2, y2。图像的左上角坐标为 0, 0.
3、绘制内容(字符) 。
imagestring(img ,size,x,y,string,color),
说明:
img画布 。
size是字大小 1至5 。
x,y是起始点 。
string是所要画的内容 。
color是颜色 。
4、告诉浏览器图片格式 。
header("Content-type:image/png");可为image/gif等等 。
5、输出(或保存),也可以使用第2个参数实现保存 。
imagepng(img【,filename】) 。
imagejpeg(img【,filename】) 。
imagegif(img【,filename】) 。
6、添加干扰线,本质就是直线 。
imageline(img,x1,y1,x2,y2,color),
说明:
img 画布 。
x1,y1 起点 。
x2,y2 终点 。
color 颜色 。
7、imagettftext ( img,size, angle, x, y, color, fontfile,text ) 。
说明:
img 画布 。
size 字体大小,缺省单位像素 。
angle 角度 。
x,y 坐标点 。
color 颜色 。
fontfile 字体文件,必须是中文字体 。
text 内容 。
特别说明:这里的color参数都是imagecolorallocate()函数创建的颜色 。
下面是思路:
这里最先生成画布,之后就是为画布添加字符串,直线,噪点,边框,来生成验证码的,最后类返回的两个公用接口是:可供外面调用的生成验证码的画布和验证码的字符串构成,为的是给外界输出验证码画布,以及存储字符串,作为验证用 。
下面是代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
<?php
namespace
captcha;
/*
*验证码类
*verify方法生成验证码字符串
*entry方法生成验证码
*特别提醒:这里要先用entry生成验证码,再用verify生成验证码的字符串,也就是必须先调用entry,然后才能够调用verify生成验证码的字符串,原因代码已经说明问题了,因为验证码的字符串是在entry方法调用captchaImage生成的,所以必须先调用它才行
*有的地方对中文的字体要求比较高,所以,有的地方不支持中文验证码
*/
class
Captcha{
//配置参数
private
$config
=
array
();
//验证码
private
$verifyCode
=
''
;
//获取配置文件的配置信息,给类传参数就行,例如new Captcha($config);$config是你的配置文件信息
public
function
__construct(
$config
=
array
(
'width'
=>100,
'height'
=>40,
'length'
=>4,
'size'
=>7,
'lines'
=>0,
'dots'
=>0,
'font'
=>
'simfang.ttf'
,
'rectangle'
=>
array
(255,55,122),
'charset'
=>true,
'chinese'
=>
'来到新机场主航站楼建设在婚姻关系存续期间所负债务她在收到要求她偿还前夫在婚姻关系存续期间所欠债务的法院传票后要精益求精善始善终'
)){
$this
->config =
$config
;
}
//创建验证码
private
function
captchaImage(){
//画布
$img
= imagecreatetruecolor(
$this
->config[
'width'
],
$this
->config[
'height'
]);
//填充画布颜色
imagefill(
$img
,0,0,imagecolorallocate(
$img
,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)));
//需要边框则画边框
if
(
$this
->config[
'rectangle'
] &&
is_array
(
$this
->config[
'rectangle'
]) &&
count
(
$this
->config[
'rectangle'
]) == 3){
$this
->tangle(
$img
);
}
$this
->verifyCode =
$this
->code(
$img
,
$this
->config[
'charset'
],
$this
->config[
'chinese'
]);
//存在则添加干扰线
if
(
$this
->config[
'lines'
]){
$this
->codeLines(
$img
);
}
//存在则添加干扰点
if
(
$this
->config[
'dots'
]){
$this
->codeDots(
$img
);
}
return
$img
;
}
private
function
codeLines(
$img
){
//绘制干扰线
for
(
$i
=0;
$i
<
$this
->config[
'lines'
];
$i
++){
imageline(
$img
,mt_rand(0,
$this
->config[
'width'
] / 10),mt_rand(0,
$this
->config[
'height'
]),mt_rand(
$this
->config[
'width'
] * 7/ 10,
$this
->config[
'width'
] * 9/ 10),mt_rand(0,
$this
->config[
'height'
]),imagecolorallocate(
$img
,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)));
}
}
private
function
codeDots(
$img
){
//添加噪点
for
(
$i
=0;
$i
<
$this
->config[
'dots'
];
$i
++){
//噪点颜色
$color
= imagecolorallocate(
$img
,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180));
imagestring(
$img
,mt_rand(1,3),mt_rand(0,170),mt_rand(0,30),
'*'
,
$color
);
}
}
/*画布边框*/
private
function
tangle(
$img
){
imagerectangle(
$img
,0,0,
$this
->config[
'width'
]-1,
$this
->config[
'height'
]-1,imagecolorallocate(
$img
,
$this
->config[
'rectangle'
][0],
$this
->config[
'rectangle'
][1],
$this
->config[
'rectangle'
][2]));
}
/*生成验证码,默认英文,$ch为true则为中文*/
private
function
code(
$img
,
$ch
=false,
$set
=
''
){
$str
=
""
;
//计算间隔
$span
=
ceil
(
$this
->config[
'width'
]/(
$this
->config[
'length'
]+1));
if
(
$ch
&& !
empty
(
$set
)){
//随机产生字符
$set
=
$this
->config[
'chinese'
];
for
(
$i
=0;
$i
<
$this
->config[
'length'
];
$i
++){
$end
=
strlen
(
$set
)/3;
$pos
= mt_rand(0,
$end
-1);
$str
.=
substr
(
$set
,
$pos
*3,3);
}
//每次绘制一个字符
for
(
$i
=1;
$i
<=
$this
->config[
'length'
];
$i
++){
imagettftext(
$img
,16,mt_rand(-30,60),
$i
*
$span
,
$this
->config[
'height'
]*3/5,imagecolorallocate(
$img
,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180)),
$this
->config[
'font'
],
substr
(
$str
,(
$i
-1)*3,3));
}
}
else
{
//随机生成字母或者数字
for
(
$i
=0;
$i
<
$this
->config[
'length'
];
$i
++){
switch
(mt_rand(0,2)){
case
0:
$str
.=
chr
(mt_rand(65,90));
break
;
case
1:
$str
.=
chr
(mt_rand(97,122));
break
;
case
2:
$str
.=
chr
(mt_rand(48,57));
}
}
//每次绘制一个字符
for
(
$i
=1;
$i
<=
$this
->config[
'length'
];
$i
++){
imagestring(
$img
,
$this
->config[
'size'
],
$i
*
$span
,0,
$str
[
$i
-1],imagecolorallocate(
$img
,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180)));
}
}
return
$str
;
}
//获取验证码
public
function
verify(){
return
$this
->verifyCode;
}
//生成验证码
public
function
entry(){
header(
"content-type:image/png"
);
imagepng(
$this
->captchaImage());
}
}
$ob
=
new
Captcha;
$ob
->entry();
|
最后,为了不误人子弟,还是再强调一遍: 这里必须先用entry生成验证码,再用verify生成验证码的字符串,也就是必须先调用entry,然后才能够调用verify生成验证码的字符串,原因代码已经说明问题了,因为验证码的字符串是在entry方法的方法captchaImage中生成的,所以必须先调用它才行 有的地方对中文的字体要求比较高,所以,有的地方不支持中文验证码 。
最后此篇关于php封装的验证码类分享的文章就讲到这里了,如果你想了解更多关于php封装的验证码类分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
直接上代码,可以写在公共文件common和继承的基础类中,方便调用 ?
1、php服务端环境搭建 1.php 服务端环境 安装套件 xampp(apach+mysql+php解释器) f:\mydoc文件(重要)\dl_学习\download重要资源\apache
如下所示: Eclipse快捷键 Ctrl+1 快速修复 Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
第一步:conn.PHP文件,用于连接数据库并定义接口格式,代码如下: php" id="highlighter_808731">
本篇文章整理了几道Linux下C语言的经典面试题,相信对大家更好的理解Linux下的C语言会有很大的帮助,欢迎大家探讨指正。 1、如果在Linux下使用GCC编译器执行下列程序,输出结果是什么?
安装完最新的Boost库 官方说明中有一句话: Finally, $ ./b2 install will leave Boost binaries in the lib/ subdirecto
为了梳理前面学习的《spring整合mybatis(maven+mysql)一》与《spring整合mybatis(maven+mysql)二》中的内容,准备做一个完整的示例完成一个简单的图书管理功
网站内容质量仅仅是页面综合得分里面的一项.不管算法如何改变调整,搜索引擎都不会丢弃网站页面的综合得分。 一般情况下我们把页面的综合得分为8个点: 1、标题的设置 (标题的设置要有独特性)
最近事情很忙,一个新项目赶着出来,但是很多功能都要重新做,一直在编写代码、debug。今天因为一个新程序要使用fragment来做,虽然以前也使用过fragment,不过没有仔细研究,今天顺道写篇文
Android资源命名规范 最近几个月,大量涉及android资源的相关工作。对于复杂的应用而言,资源命名的规范很有必要。除了开发人员之外,UI设计人员(或者切图相关人员)也需要对资源使用的位置非常
以前一直使用Hibernate,基本上没用过Mybatis,工作中需要做映射关系,简单的了解下Mybatis的映射。 两者相差不多都支持一对一,一对多,多对多,本章简单介绍一对一的使用以及注意点。
如下所示: ? 1
如果想在自定义的View上面显示Button 等View组件需要完成如下任务 1.在自定义View的类中覆盖父类的构造(注意是2个参数的) 复制代码 代码如下: publ
实现功能:实现表格tr拖动,并保存因为拖动改变的等级. jsp代码 ?
代码:测试类 java" id="highlighter_819000"> ?
红黑树是一种二叉平衡查找树,每个结点上有一个存储位来表示结点的颜色,可以是red或black。 红黑树具有以下性质: (1) 每个结点是红色或是黑色 (2) 根结点是黑色的 (3) 如果一个
废话不多说,直接上代码 ? 1
码代码时,有时候需要根据比较大小分别赋值: ? 1
实际项目开发中,我们经常会用一些版本控制器来托管自己的代码,今天就来总结下Git的相关用法,废话不多说,直接开写。 目的:通过Git管理github托管项目代码 1、下载安装Git 1、下载
直接上代码: 复制代码 代码如下: //验证码类 class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABC
我是一名优秀的程序员,十分优秀!