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
|
<?php
/**
* 驗證碼類
* @author staven
*
*/
class
ValidateCode{
private
$width
;
//驗證碼圖片的寬度
private
$height
;
//驗證碼圖片的高度
private
$checkCode
;
//驗證碼字符
private
$codeNum
;
//驗證碼字符個數
private
$font
;
//字體
private
$fontSize
;
//字體大小
private
$fontColor
;
//字體顏色
private
$image
;
//驗證碼句柄
private
$charset
;
//驗證字符隨機因子
//構造器方法初始化
function
__construct(
$width
=100,
$height
=20,
$codeNum
=4,
$fontSize
= 12){
$this
->width =
$width
;
$this
->height =
$height
;
$this
->codeNum =
$codeNum
;
$this
->fontSize =
$fontSize
;
$this
->font = dirname(
__FILE__
) .
'/font/elephant.ttf'
;
$this
->charset =
'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789'
;
//提供隨機因子
$this
->checkCode =
$this
->createCheckCode();
}
/* 用於輸出驗證碼圖片,而且將驗證碼信息寫入session */
function
__toString(){
/* 加到session中, 存儲下標爲code */
$_SESSION
[
"code"
] =
strtoupper
(
$this
->checkCode);
$this
->outImage();
return
''
;
}
/* 生成隨機驗證碼字符 */
private
function
createCheckCode(){
for
(
$i
=0;
$i
<
$this
->codeNum;
$i
++){
$this
->checkCode .=
$this
->charset{mt_rand(0,
strlen
(
$this
->charset)-1)};
}
return
$this
->checkCode;
}
/* 輸出驗證碼 */
private
function
outImage(){
$this
->getCreateImage();
$this
->createLine();
$this
->outputText();
$this
->outputImage();
}
/* 生成驗證碼背景圖片 */
private
function
getCreateImage(){
$this
->image = imagecreatetruecolor(
$this
->width,
$this
->height);
$color
= imagecolorallocate(
$this
->image, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
imagefilledrectangle(
$this
->image,0,
$this
->height,
$this
->width,0,
$color
);
}
/* 向句柄圖片中寫入文字信息 */
private
function
outputText(){
$_x
=
$this
->width /
$this
->codeNum;
for
(
$i
=0;
$i
<
$this
->codeNum;
$i
++) {
$this
->fontcolor = imagecolorallocate(
$this
->image,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imagettftext(
$this
->image,
$this
->fontSize,mt_rand(-30,30),
$_x
*
$i
+mt_rand(1,5),
$this
->height / 1.4,
$this
->fontColor,
$this
->font,
$this
->checkCode[
$i
]);
}
}
/* 建立雪花圖案 */
private
function
createLine() {
for
(
$i
=0;
$i
<6;
$i
++) {
$color
= imagecolorallocate(
$this
->image,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imageline(
$this
->image,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
->image,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring(
$this
->image,mt_rand(1,5),mt_rand(0,
$this
->width),mt_rand(0,
$this
->height),
'*'
,
$color
);
}
}
/* 生成驗證碼圖片 */
private
function
outputImage(){
header(
'Content-type:image/png'
);
imagepng(
$this
->image);
}
/* 銷燬句柄,釋放資源 */
function
__destruct() {
imagedestroy(
$this
->image);
}
}
|
imageCode.phpphp
1
2
3
4
|
<?php
session_start();
//開啓SESSION
require_once
'ValidateCode.class.php'
;
echo
new
ValidateCode();
|
image.phphtml
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
|
<!DOCTYPE html>
<html>
<head>
<meta charset=
"gbk"
>
<title>驗證碼</title>
</head>
<body>
<img src=
"imagecode.php"
alt=
"看不清楚,換一張"
style=
"cursor: pointer;"
onclick=
"this.src='imagecode.php?'+new Date().getTime();"
/>
<form method=
"POST"
action=
"image.php"
>
<input type=
"text"
size=
"4"
name=
"code"
/>
<input type=
"submit"
name=
"submit"
value=
"提交"
>
</form>
</body>
</html>
<?php
/** 用於 */
session_start();
//開啓SESSION
if
(isset(
$_POST
[
'submit'
])){
//判斷用戶提交後執行
/* 判斷用戶在表單中輸入的字符串和驗證碼圖片中的字符串是否相同 */
if
(
strtoupper
(trim(
$_POST
[
"code"
])) ==
$_SESSION
[
'code'
]){
//若是驗證碼輸出成功
echo
'驗證碼輸入成功<br>'
;
//輸出成功的提示信息
}
else
{
//若是驗證碼輸入失敗
echo
'<font color="red">驗證碼輸入錯誤!!</font><br>'
;
//輸出失敗的輸入信息
}
}
?>
|