重要:
编写本文代码之前必须确定PHP服务器已开启GD库,否则会报错或无法正常工作;
输出验证码代码:
<?php
//开启session支持
session_start();
// 生成验证码的底图
$image = imagecreatetruecolor(150, 50);
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgcolor);
// 输出随机数字0-9字母A-Za-z字符
$captch_code = "";
for ($i=0; $i<4; $i++){
$fontsize = 10;
$fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));
$data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$fontcontent = substr($data, rand(0, strlen($data)), 1);
$captch_code .= $fontcontent;
$x = ($i*150/4) + rand(5, 10);
$y = rand(10, 25);
imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
// 保存验证码
$_SESSION['authcode'] = $captch_code;
// 输出干扰点
for ($i=0; $i<500; $i++){
$color = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
imagesetpixel($image, rand(1, 149), rand(1, 49), $color);
}
// 输出干扰线
for ($i=0; $i<4; $i++){
$color = imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));
imageline($image, rand(1, 149), rand(1, 49), rand(1, 149), rand(1, 49), $color);
}
// 显示图片
header("content-type: image/png");
imagepng($image);
// 关闭资源
imagedestroy($image);
?>
校验验证码:
只需要获取用户传递的验证码字符跟session中存储的字符串相对比即可(实际运用中,如果有字母的话则需要将用户所填写的字母和服务器的字母转换成同一大写或小写,因为我们无法知道用户是输入大写还是小写)