不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。考虑到商用安全性问题代码中也已经增加了SESSION的判断。
三个页面:
post.php 提交页
pic.php 生成验证码图片
check.php 验证页
post.php
<form name="form1" method="post" action="check.php" onsubmit="return ChkForm();">
<input type="text" name="t_code"><img id="pic" src="pic.php"><input type="submit" value="提交">
</form>
<script language="javascript">
function ChkForm()
{
if(form1.t_code.value=="")
{
alert("错误:请输入验证码!");
//重新生成验证码
document.all.pic.src = "pic.php";
return false;
}
}
</script>
pic.php
<?php
session_start();
//生成验证码图片
Header("Content-type: image/PNG");
srand((double)microtime()*1000000);
$im = imagecreate(62,20);
$black = ImageColorAllocate($im, 0,0,0);
$white =ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im,200,200,200);
imagefill($im,0,0,$gray); //改了这里的参数
while(($authnum=rand()%100000)<10000);
if(!session_is_registered("session_codenum"))
{
session_register("session_codenum");
}
$session_codenum = $authnum;
//将五位整数验证码绘入图片
imagestring($im, 5, 10, 3, $authnum, $black);
for($i=0;$i<100;$i++) //加入干扰象素
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
ImagePNG($im);
ImageDestroy($im);
?>
check.php
<?php
session_start();
if($_POST["t_code"] !="" and $_POST["t_code"] == $session_codenum)
{
echo "验证成功!";
}
else
{
echo "验证失败!";
}
session_unregister("session_codenum");
session_destroy();
?>
验证码似例图:
评论