由js生成验证符数字并进行验证,生成图片由PHP完成,更简单一些
html:
<!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>GD2函数生成图形验证码</title>
<link href="css/style.css" type="text/css" rel="stylesheet" />
</head>
<script>
</script>
<body>
验证码: <input type="text" id="validatorCode" size="10" />
<input type="hidden" id="defValidatorCode" value="" />
<script language="javascript">
var defValidatorCode;
var validatorCode;
//function onload(){
validatorCode=document.getElementById('validatorCode');
defValidatorCode=document.getElementById('defValidatorCode');
//}
var num1=Math.round(Math.random()*10000000); //生成随机数
var num=num1.toString().substr(0,4); //截取随机数的前4个字符
document.write("<img name=codeimg src='ValidatorCode.php?code="+num+"'>"); //将截取值传递到图像处理页中
defValidatorCode.value=num; //将截取值赋给表单中的隐藏域
function reCode(){ //定义方法,重新生成验证码
var num1=Math.round(Math.random()*10000000); //生成随机数
var num=num1.toString().substr(0,4); //截取随机数
document.codeimg.src="ValidatorCode.php?code="+num; ///将截取值传递到图像处理页中
defValidatorCode.value=num; //将截取值赋给表单中的隐藏域
}
function check(){
// if (form.validatorCode.value==''){
if (validatorCode.value==''){
alert('请输入验证码!');
validatorCode.focus();
//return false;
return;
}
if (validatorCode.value!=defValidatorCode.value) {
alert('验证码输入有误!');
validatorCode.focus();
//return false;
return;
}
alert('验证码正确!');
}
</script>
<a href="javascript:reCode()" class="a1">看不清</a>
<br><br>
<input type='button' name='btn' value='验证' οnclick="check()"></input>
</body>
</html>
ValidatorCode.php:
<?php
header('content-type:image/png'); //定义标题png格式图像,前面无输出
$im = imagecreate(65, 25); //定义画布,图像大小
imagefill($im, 0, 0, imagecolorallocate($im, 200, 200, 200)); //区域填充
$validatorCode = $_GET['code']; //获取提交的值
imagestring($im, rand(3, 5), 10, 3, substr($validatorCode, 0, 1), imagecolorallocate($im, 0, rand(0, 255), rand(0, 255)));
imagestring($im, rand(3, 5), 25, 6, substr($validatorCode, 1, 1), imagecolorallocate($im, rand(0, 255), 0, rand(0, 255)));
imagestring($im, rand(3, 5), 36, 9, substr($validatorCode, 2, 1), imagecolorallocate($im, rand(0, 255), rand(0, 255), 0));
imagestring($im, rand(3, 5), 48, 12, substr($validatorCode, 3, 1), imagecolorallocate($im, 0, rand(0, 255), rand(0, 255)));
for ($i = 0; $i < 200; $i ++) { //填充干扰背景
imagesetpixel($im, rand() % 70, rand() % 30, imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255)));
}
imagepng($im); //生成PNG图像
imagedestroy(); //销毁图像