莱芜网站建设莱芜,定制网站和模板建站哪个更好,烟台网站建设加企汇互联专业,辽宁网站建设价位转载链接#xff1a;http://www.helloweba.com/view-blog-191.html 验证码在WEB应用中非常重要#xff0c;通常用来防止用户恶意提交表单#xff0c;如恶意注册和登录、论坛恶意灌水等。本文将通过实例讲解使用PHP生成各种常见的验证码包括数字验证码、数字字母验证码、中文…转载链接http://www.helloweba.com/view-blog-191.html 验证码在WEB应用中非常重要通常用来防止用户恶意提交表单如恶意注册和登录、论坛恶意灌水等。本文将通过实例讲解使用PHP生成各种常见的验证码包括数字验证码、数字字母验证码、中文验证码、算术验证码等等以及其Ajax验证过程。 查看演示DEMO下载源码 PHP生成验证码图片 PHP生成验证码的原理使用PHP的GD库生成一张带验证码的图片并将验证码保存在Session中。PHP生成验证码的大致流程有 1、产生一张png的图片 2、为图片设置背景色 3、设置字体颜色和样式 4、产生4位数的随机的验证码 5、把产生的每个字符调整旋转角度和位置画到png图片上 6、加入噪点和干扰线防止注册机器分析原图片来恶意破解验证码 7、输出图片 8、释放图片所占内存。 应某位同学的要求下面我们以 helloweba.com的文章评论所用的验证码为例讲解验证码的生成过程直接上代码。 session_start();
getCode(4,60,20);function getCode($num,$w,$h) {$code ;for ($i 0; $i $num; $i) {$code . rand(0, 9);}//4位验证码也可以用rand(1000,9999)直接生成//将生成的验证码写入session备验证时用$_SESSION[helloweba_num] $code;//创建图片定义颜色值header(Content-type: image/PNG);$im imagecreate($w, $h);$black imagecolorallocate($im, 0, 0, 0);$gray imagecolorallocate($im, 200, 200, 200);$bgcolor imagecolorallocate($im, 255, 255, 255);//填充背景imagefill($im, 0, 0, $gray);//画边框imagerectangle($im, 0, 0, $w-1, $h-1, $black);//随机绘制两条虚线起干扰作用$style array ($black,$black,$black,$black,$black,$gray,$gray,$gray,$gray,$gray);imagesetstyle($im, $style);$y1 rand(0, $h);$y2 rand(0, $h);$y3 rand(0, $h);$y4 rand(0, $h);imageline($im, 0, $y1, $w, $y3, IMG_COLOR_STYLED);imageline($im, 0, $y2, $w, $y4, IMG_COLOR_STYLED);//在画布上随机生成大量黑点起干扰作用;for ($i 0; $i 80; $i) {imagesetpixel($im, rand(0, $w), rand(0, $h), $black);}//将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成$strx rand(3, 8);for ($i 0; $i $num; $i) {$strpos rand(1, 6);imagestring($im, 5, $strx, $strpos, substr($code, $i, 1), $black);$strx rand(8, 12);}imagepng($im);//输出图片imagedestroy($im);//释放图片所占内存
} 代码中,自定义函数getCode()诠释了验证码的生成过程。运用PHP GD库自带的图像处理函数能轻松生成各种想要的图片效果。 imagecreate()创建一个新图像 imagecolorallocate()为图像分配颜色 imagefill()填充图像 imagerectangle()画一个矩形边框 imagesetstyle()设置画线风格 imageline()画一条线段 imagesetpixel()画点像素 imagepng()以PNG格式将图像输出到浏览器或文件 imagedestroy()释放图片所占内存 将上述代码保存为code_num.php以便调用。 Ajax刷新和验证 验证码生成后我们要在实际的项目中应用通常我们使用ajax可以实现点击验证码时刷新生成新的验证码有时生成的验证码肉眼很难识别即“看不清换一张”。填写验证码后还需要验证所填验证码是否正确验证的过程是要后台程序来完成但是我们也可以通过ajax来实现无刷新验证。 我们建立一个前端页面index.html载入jquery同时在body中加入验证码表单元素 p验证码input typetext classinput idcode_num namecode_num maxlength4 /
img srccode_num.php idgetcode_num title看不清点击换一张 alignabsmiddle/p
pinput typebutton classbtn idchk_num value提交 //phtml代码中img srccode_num.php即调用了生成的验证码当点击验证码时刷新生成新的验证码$(function(){//数字验证$(#getcode_num).click(function(){$(this).attr(src,code_num.php? Math.random());});...
}); 刷新验证码其实就是重新请求了验证码生成程序这里要注意的是调用code_num.php时要带上随机参数防止缓存。接下来填写好验证码之后点“提交”按钮通过$.post()前端向后台chk_code.php发送ajax请求。 $(function(){...$(#chk_num).click(function(){var code_num $(#code_num).val();$.post(chk_code.php?actnum,{code:code_num},function(msg){if(msg1){alert(验证码正确);}else{alert(验证码错误);}});});
}); 后台chk_code.php验证 session_start();$code trim($_POST[code]);
if($code$_SESSION[helloweba_num]){echo 1;
} 后台根据提交的验证码与保存在session中的验证码比对完成验证。 对于其他几种验证的生成和使用其原理一样开发者可以根据需要产生多种样式的随机验证码本文演示demo中提供了数字验证码、数字字母验证码、中文验证码、仿google验证码算术验证码等点击这里看演示demo。限于篇幅其他几种验证码的生成代码略过敬请谅解。