我们在做登录的时候,为了防止机器不停的刷和提交,有了登录验证码,相信大家都不陌生,验证码一般有数字和字母加干扰点和干扰线,或者图片验证码,或者汉字验证码。汉字验证码必须要有中文字体,否则不成功。图片验证码一般是事先定义好的图片,给出名称和值,进行验证。下面我们来写一个最常见的字母加数字验证码。
效果图如下:
该验证码技术运用了PHP的CD技术,详细请看:http://www.php.net/manual/zh/book.image.php
后台图片代码如下:
<?php
session_start(); //启动session
$image = imagecreatetruecolor(100,30);//创建一个宽100,高度30的图片
$bgcolor=imagecolorallocate($image,255,255,255);//图片背景是白色
imagefill($image,0,0,$bgcolor);//图片填充白色
//随机数,下面的例子是只是数字的验证码
/**
for($i=0;$i<4;$i++){
$fontsize=6;
$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
$fontcontent=rand(0,9);
$x=($i*100/4)+ rand(5,10);
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
**/
//随机数据,下面的例子是随机数据,包括字母和数字
$captch_code='';
for($i=0;$i<4;$i++){
$fontsize=6;
$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
$data='asdfdfglfg74erf21854hgfhgfhkg4ljkghjtrtywiqpoqpwepdfgvnjytyut12313345645667686797800';
$fontcontent=substr($data,rand(0,strlen($data)),1);
$captch_code.=$fontcontent;
$x=($i*100/4)+ rand(5,10);
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
$_SESSION['authcode']=$captch_code;
//随机点,生成干扰点
for($i=0;$i<200;$i++){
$pointcolor=imagecolorallocate($image,rand(50,120),rand(50,120),rand(50,120));
imagesetpixel($image,rand(1,99),rand(1,99),$pointcolor);
}
//随机线,生成干扰线
for($i=0;$i<3;$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);
}
header("content-type:image/png");
imagepng($image);
imagedestory($image);
?>
前台代码如下:
<?php
if(isset($_REQUEST['autocode'])){
session_start();
if(strtolower($_POST['autocode']) == $_SESSION['authcode']){
echo '正确';
}else{
echo'错误';
}
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta chartset="utf-8">
</head>
<body>
<form method="post" action="form.php">
<p>验证码图片:<img border="1" src="captcha.php?r="<?php echo rand();?> width="100" height="30" /></p>
<p>输入内容:<input type="text" name="autocode" value="" /></p>
<p><input type="submit" value="提交" style="padding:6px 20px;"/></p>
</form>
</body>
</html>
验证图片点击更换:
<p>验证码图片:<img border="1" id="capthcha_img" onclick="this.src='captcha.php?r='+Math.random()" src="captcha.php?r="<?php echo rand();?> width="100" height="30" /> <a href="javascript:void(0)" onclick="document.getElementById('capthcha_img').src='captcha.php?r='+Math.random()">换一个</a></p>