代码如下所示:
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
|
//验证码类
class validatecode {
private $charset = 'abcdefghkmnprstuvwxyzabcdefghkmnprstuvwxyz23456789' ; //随机因子
private $code ; //验证码
private $codelen = 4; //验证码长度
private $width = 130; //宽度
private $height = 50; //高度
private $img ; //图形资源句柄
private $font ; //指定的字体
private $fontsize = 20; //指定字体大小
private $fontcolor ; //指定字体颜色
//构造方法初始化
public function __construct() {
$this ->font = dirname( __file__ ). '/font/elephant.ttf' ; //注意字体路径要写对,否则显示不了图片
}
//生成随机码
private function createcode() {
$_len = strlen ( $this ->charset)-1;
for ( $i =0; $i < $this ->codelen; $i ++) {
$this ->code .= $this ->charset[mt_rand(0, $_len )];
}
}
//生成背景
private function createbg() {
$this ->img = imagecreatetruecolor( $this ->width, $this ->height);
$color = imagecolorallocate( $this ->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
imagefilledrectangle( $this ->img,0, $this ->height, $this ->width,0, $color );
}
//生成文字
private function createfont() {
$_x = $this ->width / $this ->codelen;
for ( $i =0; $i < $this ->codelen; $i ++) {
$this ->fontcolor = imagecolorallocate( $this ->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imagettftext( $this ->img, $this ->fontsize,mt_rand(-30,30), $_x * $i +mt_rand(1,5), $this ->height / 1.4, $this ->fontcolor, $this ->font, $this ->code[ $i ]);
}
}
//生成线条、雪花
private function createline() {
//线条
for ( $i =0; $i <6; $i ++) {
$color = imagecolorallocate( $this ->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imageline( $this ->img,mt_rand(0, $this ->width),mt_rand(0, $this ->height),mt_rand(0, $this ->width),mt_rand(0, $this ->height), $color );
}
//雪花
for ( $i =0; $i <100; $i ++) {
$color = imagecolorallocate( $this ->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring( $this ->img,mt_rand(1,5),mt_rand(0, $this ->width),mt_rand(0, $this ->height), '*' , $color );
}
}
//输出
private function output() {
header( 'content-type:image/png' );
imagepng( $this ->img);
imagedestroy( $this ->img);
}
//对外生成
public function doimg() {
$this ->createbg();
$this ->createcode();
$this ->createline();
$this ->createfont();
$this ->output();
}
//获取验证码
public function getcode() {
return strtolower ( $this ->code);
}
}
|
使用方法:
1、先把验证码类保存为一个名为 validatecode.class.php 的文件;
2、新建一个名为 captcha.php 的文件进行调用该类;
captcha.php
3、引用到页面中,代码如下:
4、一个完整的验证页面,代码如下:
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
|
<?php
session_start();
//在页首先要开启session,
//error_reporting(2047);
session_destroy();
//将session去掉,以每次都能取新的session值;
//用seesion 效果不错,也很方便
?>
<html>
<head>
<title>session 图片验证实例</title>
<style type= "text/css" >
#login p{
margin-top: 15px;
line-height: 20px;
font-size: 14px;
font-weight: bold;
}
#login img{
cursor:pointer;
}
form{
margin-left:20px;
}
</style>
</head>
<body>
<form id= "login" action= "" method= "post" >
<p>此例为session验证实例</p>
<p>
<span>验证码:</span>
<input type= "text" name= "validate" value= "" size=10>
<img title= "点击刷新" src= "./captcha.php" align= "absbottom" onclick= "this.src='captcha.php?'+math.random();" ></img>
</p>
<p>
<input type= "submit" >
</p>
</form>
<?php
//打印上一个session;
//echo "上一个session:<b>".$_session["authnum_session"]."</b><br>";
$validate = "" ;
if (isset( $_post [ "validate" ])){
$validate = $_post [ "validate" ];
echo "您刚才输入的是:" . $_post [ "validate" ]. "<br>状态:" ;
if ( $validate != $_session [ "authnum_session" ]){
//判断session值与用户输入的验证码是否一致;
echo "<font color=red>输入有误</font>" ;
} else {
echo "<font color=green>通过验证</font>" ;
}
}
?>
|
总结
以上所述是小编给大家介绍的php验证码类文件及调用方式代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/jly144000/p/7487225.html