宝哥软件园

PHP生成各种随机验证码方法总结[附演示源代码]

编辑:宝哥软件园 来源:互联网 时间:2021-09-04

总结了PHP生成各种随机验证码的方法。分享给大家参考,如下:

验证码在WEB应用中非常重要,通常用于防止用户恶意提交表单,如恶意注册登录、恶意论坛灌水等。本文将通过实例讲解PHP生成的各种常见验证码,包括数字验证码、字母数字验证码、中文验证码、算术验证码等。以及它们的Ajax验证过程。

单击此处下载示例源代码。

PHP生成验证码图片

PHP生成验证码的原理:使用PHP的GD库生成一张带有验证码的图片,将验证码保存在Session中。PHP生成验证码的一般过程如下:

1.生成png图片;

2.设置图片的背景颜色;

3.设置字体颜色和样式;

4.生成一个4位的随机验证码;

5.在png图片上画出每个字符调整后的旋转角度和位置;

6.添加噪音和干扰线,防止注册机器分析原图恶意破解验证码;

7.输出图片;

8.释放图片占用的内存。

示例代码:

session _ start();getCode(4,60,20);函数getCode($num,$w,$ h){ $ code=' ';for($ I=0;$ i $ num$i ) { $code。=rand(0,9);}//4位验证码也可以由兰德(1000,9999)直接生成。//将生成的验证码写入session,使用$ _ session[' helloweb a _ num ']=$ code进行验证;//创建图片并定义颜色值标题(' content-type : image/png ');$im=imagecreate($w,$ h);$black=imagecolorallocate($im,0,0,0);$gray=imagecolorallocate($im,200,200,200);$ BG color=imagecolor allocate($ im,255,255,255);//填充背景imagefill($im,0,0,$ gray);//绘制边框图像矩形($ im,0,0,$ w-1,$ h-1,$ black);//随机画两条虚线干扰$ style=array ($ black,$ black,$ black,$ gray,$ gray,$ gray,$ gray);imagesetstyle($im,$ style);$y1=兰特(0,$ h);$y2=兰特(0,$ h);$y3=兰特(0,$ h);$y4=兰特(0,$ h);imageline($im,0,$y1,$w,$y3,IMG _ COLOR _ style);imageline($im,0,$y2,$w,$y4,IMG _ COLOR _ style);//画布上随机产生大量黑点进行干扰;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);} image png($ im);//输出图像image destroy($ im);//释放图片占用的内存},自定义函数getCode()解释验证码的生成过程。使用PHP GD库的图像处理功能,可以轻松生成各种想要的图像效果。

Imagecreate():创建新图像

Imagecolorallocate():为图像分配颜色

Imagefill():填充图像

Imagerectangle():绘制矩形(边框)

Imagesetstyle():设置线条绘制样式

Imageline():绘制线段

Imagesetpixel():绘制一些像素

ImagePNG():以PNG格式向浏览器或文件输出图像

Imagedestroy():释放图片占用的内存

将上面的代码保存为code_num.php以便调用。

Ajax刷新和验证

验证码生成后,我们需要在实际项目中应用。通常我们在点击验证码的时候可以使用ajax刷新生成一个新的验证码(有时候生成的验证码肉眼很难识别),也就是“看不清楚就换一个”。填写验证码后,需要验证验证码是否正确。验证过程由后台程序完成,但我们也可以通过ajax实现无刷新验证。

我们创建一个前端页面index.html,加载jQuery,并向正文中添加验证码表单元素:

p验证码:输入类型=' text ' class=' input ' id=' code _ num ' name=' code _ num ' max length=' 4 '/img src=' http : code _ num . PHP ' id=' getcode _ num ' title='不清楚。单击以更改' align=' ABS middle '/ppinputtype=' button ' class=' BTN ' id=' chk _ num ' value=' submit '/phtml代码,img src="code _ num.php "调用生成的验证码,当您单击验证码时,刷新并生成新的验证码:

$(function(){ //数字验证$ ('# getcode _ num ')。单击(function () {$ (this))。attr ('src ',' code _ num.php '?math . random());});});刷新验证码意味着重新请求验证码生成器。这里需要注意的是,在调用code_num.php时,应该采用随机参数来防止缓存。然后,填写验证码后,点击“提交”按钮,通过$,将ajax请求发送到后台chk_code.php。post()。

$(function(){ 0.$('#chk_num ')。单击(function(){ var code _ num=$(' # code _ num '))。val();$.post('chk_code.php?Act=num ',{code:code _ num},function (msg) {if (msg==1) {alert('验证码正确!');}else{ alert('错误的验证码!');} });});});后台chk_code.php验证:

session _ start();$ code=trim($ _ POST[' code ']);if($ code==$ _ SESSION[' helloweba _ num ']){ echo ' 1 ';}后台将提交的验证码与会话中存储的验证码进行比较,完成验证。

对于其他验证的生成和使用,原则是相同的。开发人员可以根据自己的需要生成各种样式的随机验证码。本次演示提供了数字验证码、字母数字验证码、中文验证码、类谷歌验证码、算术验证码等。

更多对PHP相关内容感兴趣的读者可以查看本网站的话题:《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php常见数据库操作技巧汇总》、0103010。

希望本文对PHP编程有所帮助。

更多资讯
游戏推荐
更多+