项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略。实现方法多种多样,下面就来讲解下如何用PHP生成简单的文字+数字组合的验证码:
所用语言PHP,gd库
原理解释:
a>实质上是在服务器端随机生成验证码,将其存储在$_SESSION中。
b>然后将验证码写在图片上,将图片发送至客户端,用户输入图片的上的验证码,递交给服务器。
c>服务端再与$_SESSION中存储的信息比对,一致则通过,否则不通过。
分为两步:
1)第一步服务器端生成验证码
2)客户端使用验证码
第一步:在服务器端如何生成验证码:
PHP;gutter:true;">session_start()必须置于最顶部,2>多服务器,要考虑集中管理session信息 //PHPinfo();//打印出PHP的信息 //1.生成一张底图(width:100;height:30) $image=imagecreatetruecolor(100,30); $bgcolor=imagecolorallocate($image,255,255);//画笔着色 imagefill($image,$bgcolor);//将底图的着色//随机生成四个数字
/
for($i=0;$i<4;$i++){
$fontcolor=imagecolorallocate($image,rand(0,120),120));
$fontcontent=rand(0,9);//验证码的内容
$fontsize=6;//字体大小
$x=($i100/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,rand(10,200));
$str="abcdefghkmnpwsert1234567890";//给出一个字符串,用于生成随机验证码
$fontcontent=substr($str,strlen($str)),1);//每次截取一个字符
$captch_code.=$fontcontent;//拼接
$x=($i100/4)+rand(5,10);
$y=rand(5,10);
imagestring($image,$fontcolor);
}
$_SESSION['authcode']=$captch_code;//保存在session中
//添加干扰点
for($i=0;$i<100;$i++){
$pointcolor=imagecolorallocate($image,rand(50,200),200));
imagesetpixel($image,30),$pointcolor);
}
//添加干扰线
for($i=0;$i<3;$i++){
$linecolor=imagecolorallocate($image,rand(80,200));
imageline($image,rand(5,95),25),$linecolor);
}ob_clean();//清空缓存
header("content-type:".'image/png');//输出图片的头文件固定格式(可以是image/jpg、image/png、)
imagepng($image);//向浏览器输出一张图片
imagedestroy($image);//销毁内存中的底图//session_start
PHP;gutter:true;">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 "输入正确"; } else{ echo "输入错误"; } exit(); } ?>
PHP;gutter:true;"> <Meta charset="utf-8">验证码正确
几点异常:
1): 如果出现乱码的情况:header("Content-type:text/html;charset=utf-8");//避免出现乱码的情况
事实截图:
原文链接:https://www.f2er.com/php/403022.html