一、简单的纯数字验证码
新建一个captcha.php:
编写静态HTMl页面,用于呈现验证码:index.html
确认验证码
从index.html可以看到,提交的表单是到form.php的,所以还要有一个判断的form.php代码,这里没有做详细的验证,只做了为空判断
alert("验证码正确!");document.location="index.html"';
}
else
{
echo '';
}
exit();
}
?>
效果如下:
二、字母加数字验证码
只需要改动captcha.php中红色加粗的代码即可,其他的都不需要改动
//设置需要随机取的值,去掉容易出错的0和O、I和1
$data = 'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789';
//取出值,字符串截取方法 strlen获取字符串长度
$fontContent = substr($data, rand(0,strlen($data)),1);
//.=连续定义变量
$captcha_code .=$fontContent;
//设置坐标
$x = ($i*100/4)+rand(5,10);
$y = rand(5,10);
imagestring($image, $fontSize, $x, $y, $fontContent, $fontColor);
}
//存进session
$_SESSION['authcode'] = $captcha_code;
//增加干扰元素,设置雪花点
for ($i=0; $i<200; $i++) {
//设置点的颜色,50-200颜色比数字浅,不干扰阅读
$pointColor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200));
//画一个单一像素 imagesetpixel
imagesetpixel($image, rand(1,99), rand(1,29), $pointColor);
}
//增加干扰元素,设置横线
for ($i=0; $i<4; $i++) {
//设置线的颜色
$lineColor = imagecolorallocate($image, rand(80,220), rand(80,220), rand(80,220));
//设置线,两点一线
imageline($image, rand(1,99), rand(1,29), rand(1,99), rand(1,29), $lineColor);
}
//设置头部 ,image/png
header('Content-Type: image/png');
//imagepng() 建立png图形函数
imagepng($image);
//imagedestroy() 结束图形函数 销毁$image
imagedestroy($image);
?>
效果如下:
以上两个就已经满足了大部分的验证码需求了。这两个都是最基础的,没有封装成函数。读者可以自行把它封装为一个函数