PHP生成图形验证码
效果:随机生成6位验证码,100个干扰的黑点,一条干扰线
代码:image.php(生成验证码)和check.php(验证验证码是否输入正确)
效果图详见代码下面的截图
image.php
<?php
session_start(); //启动session
header('Content-type: image/gif'); //输出头信息
$image_w=100; //验证码图形的宽
$image_h=25; //验证码图形的高
$number=range(0,9); //定义一个成员为数字的数组
$character=range("Z","A"); //定义一个成员为大写字母的数组
$result=array_merge($number,$character); //合并两个数组
$string=""; //初始化
$len=count($result); //新数组的长
for($i=0;$i<6;$i++)
{
$new_number[$i]=$result[rand(0,$len-1)]; //在$result数组中随机取出6个字符
$string=$string.$new_number[$i]; //生成验证码字符串
}
$_SESSION['string']=$string; //使用$_SESSION变量传值
$check_image=imagecreatetruecolor($image_w,$image_h); //创建图片对象
$white=imagecolorallocate($check_image, 255, 255, 255);
$black=imagecolorallocate($check_image, 0, 0, 0);
imagefill($check_image,0,0,$white);//设置背景颜色为白色
$line_color=imagecolorallocate($check_image, 255, 0, 0);//设直线的颜色
imageline($check_image, 0, 10, 100,20, $line_color);//画线
for($i=0;$i<100;$i++) //加入100个干扰的黑点
{
imagesetpixel($check_image, rand(0,$image_w), rand(0,$image_h),$black);
}
for($i=0;$i<count($new_number);$i++) //在背景图片中循环输出4位验证码
{
$x=mt_rand(1,7)+$image_w*$i/6; //设定字符所在位置X坐标
$y=mt_rand(1,$image_h/6); //设定字符所在位置Y坐标
//随机设定字符颜色
$color=imagecolorallocate($check_image,mt_rand(0,200),mt_rand(0,200),mt_rand(0,200));
//输入字符到图片中
imagestring($check_image,5,$x,$y,$new_number[$i],$color);
}
imagepng($check_image);
imagedestroy($check_image);
?>
check.php
<!DOCTYPE html>
<html>
<head>
<title>留言页面</title>
</head>
<body>
<form method="post" action="">
验证码:<input type="text" size="10" name="check">
<img src="image.php">
<input type="submit" name="ok" value="提交">
</form>
</body>
</html>
<?php
session_start(); //启动session
if(isset($_POST['ok']))
{
$checkstr=$_SESSION['string']; //使用$_SESSION变量获取image.php页面上的验证码
$str=$_POST['check']; //用户输入的字符串
if(strcasecmp($str,$checkstr)==0) //不区分大小写进行比较
echo "<script>alert('验证码输入正确!');</script>";
else
echo "<script>alert('输入错误!');</script>";
}
?>
效果图
生成验证码
正确输入验证码之后
错误输入验证码