应用Javascript+GD2函数制作无刷新验证码

来源:互联网 发布:c语言全套视频教程 编辑:程序博客网 时间:2024/04/29 17:59

(1) 在javascript脚本中完成两次随机数生成和传递操作。 

  1. 通过javascript脚本生成随机函数,并将其赋给表单中的隐藏域,用于验证码进行验证,同时将随机数以超链接参数的形式传递到ValidatorCode.php文件中。
  2. 在Javascript脚本中单独定义reCode()方法,重复执行上面的操作,用于随机数的二次无刷新生成。

(2)在ValidatorCode.php中应用GD2函数,根据超链接传递的随机数生成数字图像。

(3) 在页面中通过<img>标签输出生成的数字图像(即数字图像验证码)。

(4)在页面中通过超链接调用Javascript脚本中的reCode()方法,执行验证码的二次生成。

index.php:

<input type="hidden" name="defValidatorCode" value="" />        <script language="javascript">      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+"'>"); //将截取值传递到图像处理页中      form1.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;///将截取值传递到图像处理页中         form1.defValidatorCode.value=num;//将截取值赋给表单中的隐藏域       }    </script><a href="javascript:reCode()" class="a1">看不清</a>

ValidatorCode.php:

<?phpheader('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)));imagepng($im);//生成PNG图像imagedestroy();//销毁图像

本例中生成的是清晰的数字图像验证码,我们还可以在此基础上为验证码增加干扰背景,使其看上去模糊些。

for ($i = 0; $i < 200; $i ++) {//填充干扰背景    imagesetpixel($im, rand() % 70, rand() % 30, imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255)));}