使用php生成数字、字母组合验证码

前端之家收集整理的这篇文章主要介绍了使用php生成数字、字母组合验证码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略。实现方法多种多样,下面就来讲解下如何用PHP生成简单的文字+数字组合的验证码: 

所用语言PHP,gd库

原理解释:

a>实质上是在服务器端随机生成验证码,将其存储在$_SESSION中。

b>然后将验证码写在图片上,将图片发送至客户端,用户输入图片的上的验证码,递交给服务器。

c>服务端再与$_SESSION中存储的信息比对,一致则通过,否则不通过。

 

 

分为两步:

1)第一步服务器端生成验证码

2)客户端使用验证码

第一步:在服务器端如何生成验证码:

Highlighter">
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=($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,rand(10,200));
$str="abcdefghkmnpwsert1234567890";//给出一个字符串,用于生成随机验证码
$fontcontent=substr($str,strlen($str)),1);//每次截取一个字符
$captch_code.=$fontcontent;//拼接
$x=($i
100/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

  第二步:将生成的验证码图片返回给客户端

Highlighter">
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();
}
?>

  

Highlighter">
PHP;gutter:true;">

    
        <Meta charset="utf-8">
        验证码正确
    


    
PHP">

验证码图片
//点击验证码图片本身进行验证码的切换(需求一) //生成随机数字,便于访问服务端,如果地址是相同的则浏览器不会刷新访问         PHP?=" width="100px;height:100px;" alt="" onclick="this.src='code.PHP?+ Math.random()'"> //点击‘点击切换’,切换验证码(需求二)

请输入验证码的内容

  

几点异常:

1): 如果出现乱码的情况:header("Content-type:text/html;charset=utf-8");//避免出现乱码的情况

2):如果验证码图片不能显示在前端:那可能是缓存的问题:

事实截图:

  原文链接:https://www.f2er.com/php/403022.html

猜你在找的PHP相关文章