使用php生成数字、字母组合验证码(一)
2018-06-22 05:19:07来源:未知 阅读 ()
项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略。实现方法多种多样,下面就来讲解下如何用php生成简单的文字+数字组合的验证码:
所用语言php,gd库
原理解释:
a>实质上是在服务器端随机生成验证码,将其存储在$_SESSION中。
b>然后将验证码写在图片上,将图片发送至客户端,用户输入图片的上的验证码,递交给服务器。
c>服务端再与$_SESSION中存储的信息比对,一致则通过,否则不通过。
分为两步:
1)第一步服务器端生成验证码
2)客户端使用验证码
第一步:在服务器端如何生成验证码:<code.php>
<?php session_start();
//1>session_start()必须置于最顶部,2>多服务器,要考虑集中管理session信息 //phpinfo();//打印出php的信息
//1.生成一张底图(width:100;height:30) $image=imagecreatetruecolor(100,30); $bgcolor=imagecolorallocate($image,255,255,255);//画笔着色 imagefill($image,0,0,$bgcolor);//将底图的着色 //随机生成四个数字 /* for($i=0;$i<4;$i++){ $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120)); $fontcontent=rand(0,9);//验证码的内容 $fontsize=6;//字体大小 $x=($i*100/4)+rand(5,10);//x轴 $y=rand(5,10);//Y轴 imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);//使用imagestring()将文字写在画布上 } */ $captch_code=""; for($i=0;$i<4;$i++){ $fontsize=6; $fontcolor=imagecolorallocate($image,rand(20,100),rand(30,100),rand(10,200)); $str="abcdefghkmnpwsert1234567890";//给出一个字符串,用于生成随机验证码 $fontcontent=substr($str,rand(0,strlen($str)),1);//每次截取一个字符 $captch_code.=$fontcontent;//拼接 $x=($i*100/4)+rand(5,10); $y=rand(5,10); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); } $_SESSION['authcode']=$captch_code;//保存在session中 //添加干扰点 for($i=0;$i<100;$i++){ $pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200)); imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor); } //添加干扰线 for($i=0;$i<3;$i++){ $linecolor=imagecolorallocate($image,rand(80,200),rand(80,200),rand(80,200)); imageline($image,rand(5,95),rand(5,25),rand(5,95),rand(5,25),$linecolor); }
ob_clean();//清空缓存 header("content-type:".'image/png');//输出图片的头文件固定格式(可以是image/jpg、image/png、) imagepng($image);//向浏览器输出一张图片 imagedestroy($image);//销毁内存中的底图 //session_start
第二步:将生成的验证码图片返回给客户端<form.php>
<?php header("Content-type:text/html;charset=utf-8");//避免出现乱码的情况 if(isset($_REQUEST['authcode'])){ session_start();//使用$_SESSION之前必须使用session_start() if(strtolower($_REQUEST['authcode'])==$_SESSION["authcode"]){//$_SESSION['authcode']是服务器端存储的验证码,$_REQUEST['authcode']获取客户端输入的信息 echo "<font color='#000cc'>输入正确</font>"; } else{ echo "<font color='#0000cc'>输入错误</font>"; } exit(); } ?>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>验证码正确</title> </head> </html> <body> <form action="./form.php"> <p>验证码图片:
//点击验证码图片本身进行验证码的切换(需求一) //生成随机数字,便于访问服务端,如果地址是相同的则浏览器不会刷新访问 <img id="captCode" src="./code.php?=<?php echo rand();?>" width="100px;height:100px;" alt="" onclick="this.src='code.php?+ Math.random()'"> //点击‘点击切换’,切换验证码(需求二) <img id="captCode" src="./code.php?=--><?php //echo rand();?><!--" width="100px;height:100px;" alt=""> <a href="javascript:void(0)" onclick="document.getElementById('captCode').src='code.php?=<?php echo rand();?>'">点击切换?</a> </p> <p>请输入验证码的内容: <input type="text" name="authcode" value=""/> </p> <P> <input type="submit" value="提交" style="padding:6px 20px;"/> </P> </form> </body>
几点异常:
1): 如果出现乱码的情况:header("Content-type:text/html;charset=utf-8");//避免出现乱码的情况
2):如果验证码图片不能显示在前端:那可能是缓存的问题:
事实截图:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:用ajax对数据进行删除和查看
下一篇:http常见的状态码
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- PHP三元运算符的结合性介绍 2020-03-28
- PHP静态延迟绑定和普通静态效率的对比 2020-03-28
- 基于php流程控制语句和循环控制语句 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash