服务器由于重新编辑了PHP,漏掉了GD2的安装,图形验证码全部失效,只好搞过另一个图形验证码程序。
下面只提供生成图片的代码:
<?
php
/*
* Filename: ck.php
* Author: flashlm
* Update: 07-06-18
*/
session_start
();
$auth_num
=
""
;
srand
((
double
)
microtime
()
*
1000000
);
$auth_num_k
=
md5
(
rand
(
0
,
9999
));
$auth_num
=
substr
(
$auth_num_k
,
10
,
4
);
session_register
(
'
auth_num
'
);
//
判断是否安装了GD2,如果装了
if
(
function_exists
(
'
imagecreate
'
)
&&
function_exists
(
'
imagecolorallocate
'
)
&&
function_exists
(
'
imagepng
'
)
&&
function_exists
(
'
imagesetpixel
'
)
&&
function_exists
(
'
imageString
'
)
&&
function_exists
(
'
imagedestroy
'
)
&&
function_exists
(
'
imagefilledrectangle
'
)
&&
function_exists
(
'
imagerectangle
'
)){
Header
(
"
Content-type:image/PNG
"
);
$im
=
imagecreate(
63
,
20
);
$black
=
ImageColorAllocate(
$im
,
255
,
255
,
255
);
$white
=
ImageColorAllocate(
$im
,
255
,
255
,
255
);
$gray
=
ImageColorAllocate(
$im
,
20
,
20
,
20
);
//
ImageFill($im,63,20,$black);//这行不知道为什么在我公司的服务器上出错误,换个空间ok
imagestring(
$im
,
5
,
10
,
3
,
$auth_num
,
$gray
);
for
(
$i
=
0
;
$i
<
200
;
$i
++
)
{
$randcolor
=
ImageColorallocate(
$im
,
rand
(
0
,
255
)
,
rand
(
0
,
255
)
,
rand
(
0
,
255
));
imagesetpixel(
$im
,
rand
()
%
70
,
rand
()
%
30
,
$randcolor
);
}
ImagePNG(
$im
);
ImageDestroy(
$im
);
}
else
{
//
如果没有安装GD2
//禁止缓存
header
(
"
Pragma:no-cache
"
);
header
(
"
Cache-control:no-cache
"
);
header
(
"
ContentType: Image/BMP
"
);

$Color
[
0
]
=
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
);
$Color
[
1
]
=
chr
(
255
)
.
chr
(
255
)
.
chr
(
255
);
//
0-9,a-z字符的数据
$_Num
[
0
]
=
"
1110000111110111101111011110111101001011110100101111010010111101001011110111101111011110111110000111
"
;
$_Num
[
1
]
=
"
1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111
"
;
$_Num
[
2
]
=
"
1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011
"
;
$_Num
[
3
]
=
"
1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111
"
;
$_Num
[
4
]
=
"
1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011
"
;
$_Num
[
5
]
=
"
1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111
"
;
$_Num
[
6
]
=
"
1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111
"
;
$_Num
[
7
]
=
"
1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111
"
;
$_Num
[
8
]
=
"
1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111
"
;
$_Num
[
9
]
=
"
1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111
"
;
$_Num
[
10
]
=
"
1111011111111101111111101011111110101111111010111111101011111100000111110111011111011101111000100011
"
;
$_Num
[
11
]
=
"
1000000111110111101111011110111101110111110000111111011101111101111011110111101111011110111000000111
"
;
$_Num
[
12
]
=
"
1110000011110111101110111110111011111111101111111110111111111011111111101111101111011101111110001111
"
;
$_Num
[
13
]
=
"
1000001111110111011111011110111101111011110111101111011110111101111011110111101111011101111000001111
"
;
$_Num
[
14
]
=
"
1000000111110111101111011011111101101111110000111111011011111101101111110111111111011110111000000111
"
;
$_Num
[
15
]
=
"
1000000111110111101111011011111101101111110000111111011011111101101111110111111111011111111000111111
"
;
$_Num
[
16
]
=
"
1110000111110111011110111101111011111111101111111110111111111011100011101111011111011101111110001111
"
;
$_Num
[
17
]
=
"
1000100011110111011111011101111101110111110000011111011101111101110111110111011111011101111000100011
"
;
$_Num
[
18
]
=
"
1100000111111101111111110111111111011111111101111111110111111111011111111101111111110111111100000111
"
;
$_Num
[
19
]
=
"
1110000011111110111111111011111111101111111110111111111011111111101111111110111110111011111000011111
"
;
$_Num
[
20
]
=
"
1000100011110111011111011011111101011111110001111111010111111101101111110110111111011101111000100011
"
;
$_Num
[
21
]
=
"
1000111111110111111111011111111101111111110111111111011111111101111111110111111111011110111000000011
"
;
$_Num
[
22
]
=
"
1000100011110010011111001001111100100111110101011111010101111101010111110101011111010101111001010011
"
;
$_Num
[
23
]
=
"
1000100011110011011111001101111101010111110101011111010101111101100111110110011111011001111000110111
"
;
$_Num
[
24
]
=
"
1110001111110111011110111110111011111011101111101110111110111011111011101111101111011101111110001111
"
;
$_Num
[
25
]
=
"
1000000111110111101111011110111101111011110000011111011111111101111111110111111111011111111000111111
"
;
$_Num
[
26
]
=
"
1110001111110111011110111110111011111011101111101110111110111011111011101001101111011001111110001011
"
;
$_Num
[
27
]
=
"
1000001111110111011111011101111101110111110000111111010111111101101111110110111111011101111000110011
"
;
$_Num
[
28
]
=
"
1110000011110111101111011110111101111111111001111111111001111111111011110111101111011110111100000111
"
;
$_Num
[
29
]
=
"
1000000011101101101111110111111111011111111101111111110111111111011111111101111111110111111110001111
"
;
$_Num
[
30
]
=
"
1000100011110111011111011101111101110111110111011111011101111101110111110111011111011101111110001111
"
;
$_Num
[
31
]
=
"
1000100011110111011111011101111101110111111010111111101011111110101111111010111111110111111111011111
"
;
$_Num
[
32
]
=
"
1001010011110101011111010101111101010111110101011111001001111110101111111010111111101011111110101111
"
;
$_Num
[
33
]
=
"
1000100011110111011111101011111110101111111101111111110111111110101111111010111111011101111000100011
"
;
$_Num
[
34
]
=
"
1000100011110111011111011101111110101111111010111111110111111111011111111101111111110111111110001111
"
;
$_Num
[
35
]
=
"
1100000011110111011111111101111111101111111110111111110111111111011111111011111111101110111100000011
"
;
//
输出图像文件头
echo
chr
(
66
)
.
chr
(
77
)
.
chr
(
230
)
.
chr
(
4
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
54
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
40
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
40
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
10
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
1
)
.
chr
(
0
);
//
输出图像信息头
echo
chr
(
24
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
176
)
.
chr
(
4
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
18
)
.
chr
(
11
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
18
)
.
chr
(
11
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
);

for
(
$i
=
9
;
$i
>=
0
;
$i
--
){
//
历经所有行
for
(
$j
=
0
;
$j
<=
3
;
$j
++
){
//
历经所有字
for
(
$k
=
1
;
$k
<=
10
;
$k
++
){
//
历经所有像素
if
(
mt_rand
(
0
,
7
)
<
1
){
echo
$Color
[
mt_rand
(
0
,
1
)];
//
随机生成杂点
}
else
{
$flm
=
get_int(
$auth_num
[
$j
]);
//
取得0-35的对应数字(转化)
echo
$Color
[
substr
(
$_Num
[
$flm
]
,
$i
*
10
+
$k
,
1
)];
}
}
}
}
}
$auth_num
=
md5
(
$auth_num
);

/*
*取得0-35的对应数字(转化)
*
*/
function
get_int(
$temp
){
$num
=
explode
(
"
,
"
,
"
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
"
);
for
(
$i
=
0
;
$i
<
36
;
$i
++
){
if
(
strcmp
(
$num
[
$i
]
,
$temp
)
==
0
){
return
$i
;
}
}
return
0
;
}
?>
下面只提供生成图片的代码:












































































































