PHP验证码

php实现验证码功能

1一个长方形的底图
2验证码的内容(数字,数字+英文,中文)
3各色的干扰点
4长短颜色不一的干扰线段

验证码图是长方形的100*30的大小

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
<?php
//创建验证码画布
$img_w = 100; //验证码的宽度
$img_h = 30; //验证码的高度
$img = imagecreatetruecolor($img_w, $img_h); //创建画布
$bg_color = imagecolorallocate($img,0xcc,0xcc,0xcc); //为画布分配颜色
imagefill($img,0,0,$bg_color);

$count = 4; //验证码位数
$charset = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; //随机因子
$charset_len = strlen($charset)-1; //计算随机因子长度(作为取出时的索引)
$code = ''; //保存生成的验证码
for($i=0; $i<$count; ++$i) {
//通过索引取出字符,mt_rand()用于获取指定范围内的随机数
$code .= $charset[mt_rand(0,$charset_len)];
}

//在画布中绘制验证码文本
$fontSize = 16; //文字大小
$fontStyle = realpath('./SourceCodePro-Bold.ttf'); //字体样式
//生成指定长度的验证码
for($i=0; $i<$count; ++$i){
//随机生成字体颜色
$fontColor = imagecolorallocate($img,mt_rand(0,100),mt_rand(0,50),mt_rand(0,255));
imagettftext (
$img, //画布资源
$fontSize, //文字大小
mt_rand(0,20) - mt_rand(0,25), //随机设置文字倾斜角度
$fontSize*$i+20,mt_rand($img_h/2,$img_h), //随机设置文字坐标,并自动计算间距
$fontColor, //文字颜色
$fontStyle, //文字字体
$code[$i] //文字内容
);
}

//为验证码图片生成彩色噪点
for($i=0; $i<300; ++$i){
//随机生成颜色
$color = imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
//随机绘制干扰点
imagesetpixel($img,mt_rand(0,$img_w),mt_rand(0,$img_h),$color);

}
$color = imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagerectangle($img, mt_rand(0,$img_h), mt_rand(0,$img_h), mt_rand(0,$img_h), mt_rand(0,$img_h), $color);
imageellipse($img, mt_rand(0,$img_h), mt_rand(0,$img_h), 20, 20, $color);
//绘制干扰线
for($i=0; $i<3; ++$i){
//随机生成干扰线颜色
$color = imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
//随机绘制干扰线
imageline($img,mt_rand(0,$img_w),0,mt_rand(0,$img_h*5),$img_h,$color);
}
//将生成的文本保存到Session中
session_start();
$_SESSION['captcha'] = $code;
$fontfile =realpath('SourceCodePro-Bold.ttf');
//imagettftext($img, 16, 0, 20, 30, $red, $fontfile, $code);
//imagerectangle($canvas, 50, 50, 150, 150, $pink);
header('Content-Type: image/gif');
imagegif($img);

​ 源码里没有html代码