为了防止恶意程序破译密码,为了保护用户密码安全,验证码广泛应用于用户登录等。
一般验证码的实现分为4步:
1、进入登录页面时后台生成一张带有数字或其他标识的图片,图片必须有干扰像素,以使其他机器无法识别,并将此图片显示在登录页面上,数字存入session。
2、用户输入图片上的验证码,点击登录按钮,也可以点击看不清,重新1步骤。
3、判断用户输入的验证码是否与session中的验证码一致。
4、如果一致登录成功,不一致返回重新登录。
以php代码为例:
前端:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无题目文档</title>
<script language="javascript">
function refresh_code()
{
form1.imgcode.src="verifycode.php?a="+Math.random();
}
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="checkcode.php">
<label for="code">验证码:</label>
<input type="text" name="code" id="textfield" />
<img id="imgcode" src="VerifyCode.php" alt="验证码" />
<a href="javascript:refresh_code()">看不清?换一个</a>
<input type="submit" name="button" id="button" value="提交" />
</form>
</body>
</html>
后端:
verifycode.php文件代码如下
<?php
/*
验证码 Powered By KASON test http://www.hzhuti.com/nokia/c6/ */
session_start();
$num=4;//验证码个数
$width=80;//验证码宽度
$height=20;//验证码高度
$code="" "";
for($i=0;$i<$num;$i++)//生成验证码
{
switch(rand(0,2))
{
case 0:$code[$i]=chr(rand(48,57));break;//数字
case 1:$code[$i]=chr(rand(65,90));break;//大写字母
case 2:$code[$i]=chr(rand(97,122));break;//小写字母
}
}
$_SESSION["VerifyCode"]=$code;
$image=imagecreate($width,$height);
imagecolorallocate($image,255,255,255);
for($i=0;$i<80;$i++)//生成干扰像素
{
$dis_color=imagecolorallocate($image,rand(0,2555),rand(0,255),rand(0,255));
imagesetpixel($image,rand(1,$width),rand(1,$height),$dis_color);
}
for($i=0;$i<$num;$i++)//打印字符到图像
{
$char_color=imagecolorallocate($image,rand(0,2555),rand(0,255),rand(0,255));
imagechar($image,60,($width/$num)*$i,rand(0,5),$code[$i],$char_color);
}
header("Content-type:image/png");
imagepng($image);//输出图像到浏览器
imagedestroy($image);//开释资料
?>
验证:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
ini_set(""display_errors"", ""Off"");
session_start();
if((strtoupper($_POST["code"])) == strtoupper(($_SESSION["VerifyCode"]))){
print("验证码正确,");
}else{
print("验证码错误,");
}
echo "提交的验证码:".strtoupper($_POST["code"]).",正确的验证码:".strtoupper($_SESSION["VerifyCode"]);
?>