PHP生成图形验证码
效果:随机生成6位验证码,100个干扰的黑点,一条干扰线
代码:image.php(生成验证码)和check.php(验证验证码是否输入正确)
效果图详见代码下面的截图
image.php
<?phpsession_start(); //启动sessionheader('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>
<?phpsession_start(); //启动sessionif(isset($_POST['ok'])){$checkstr=$_SESSION['string']; //使用$_SESSION变量获取image.php页面上的验证码$str=$_POST['check']; //用户输入的字符串if(strcasecmp($str,$checkstr)==0) //不区分大小写进行比较echo "<script>alert('验证码输入正确!');</script>";elseecho "<script>alert('输入错误!');</script>";}
?>
效果图
生成验证码
正确输入验证码之后
错误输入验证码