php实现验证码(字母+数字)
效果:

主要使用到 GD 库绘制验证码
主要路线:
需要用到:宽,高,字母,数字,字母数字混合,背景,背景颜色,迷惑点,迷惑线。
拟定方法:
function verify($width = 120,$height = 70,$num = 5)
1、准备画布
$image = imagecreatetruecolor($width,$height);
2、准备颜色
额外制定几个个方法(verify方法之外,便于背景颜色与字体颜色的调用);
(浅色方法)
function lightcolor($image)
{
return imagecolorallocate($image,mt_rand(130,255),mt_rand(130,255),mt_rand(130,255));
}
(深色方法)
function deepcolor($image)
{
return imagecolorallocate($image,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));
}
3、开始画
$string = '';
$str = '123456789abcdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ';
$string = substr(str_shuffle($str),0,5) // str_shuffle() 方法,用于打乱字符串。
//给背景颜色填充浅色
imagefilledrectangle($image,0,0,$width,$height,lightcolor($image));
//字母数字
for($i = 0; $i < $num; $i++){
//$x用于分隔,num为5,平均分为5份
$x = floor( $width/$num) * $i;
//$y避免字跑出去
$y = mt_rand(10,$height - 20);
imagechar($image,5,$x,$y,$string[$i],deepColor($image));
}
//迷惑线,迷惑点
for($i = 0; $i < $num ; $i++){
imagearc($image,mt_rand(10,$width),mt_rand(10,$height),mt_rand(10,$width),mt_rand(10,$height),mt_rand(0,10),mt_rand(0,270),deepcolor($image));
}
for($i = 0; $i < 50; $i++){
imagesetpixel($image,mt_rand(0,$width),mt_rand(0,$height),deepColor($image));
}
4、输出到浏览器
//指定输出类型
header('Content-type:image\png');
imagepng($image);
5、销毁资源
imagedestroy($image);
//验证用
return $string;
