网络编程 
首页 > 网络编程 > 浏览文章

全面解析PHP验证码的实现原理 附php验证码小案例

(编辑:jimmy 日期: 2025/4/10 浏览:3 次 )

拓展

我们需要开启gd拓展,可以使用下面的代码来查看是否开启gd拓展。

<"Hello World!!!!";

echo phpinfo();
"color: #800000">imagecreatetruecolor

默认生成黑色背景

<"color: #800000">imagecolorallocate

创建一个填充色,并用imagefill(image,x,y,color)方法来附着。

<"color: #800000">imagepng

在使用这个方法之前,一定要先设置头信息,否则不会正常的显示图片 

imagedestory(image)

适时的释放资源会减轻对服务器请求的压力。 

简易数字验证码

imagecolorallocate

生成颜色信息,方便待会的赋予处理。

$fontcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));

imagestring

把内容信息写到图片的相应位置上。

imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);

增加识别干扰

//增加点

// 生成一些干扰的点,这里是200个
for($i=0;$i<200;$i++){
  $pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
  imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);
}

// 增加线

// 生成一些干扰线 这里是5个
for($i=0;$i<5;$i++){
  // 设置为浅色的线,防止喧宾夺主
  $linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
  imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);

}

 数字字母混合验证码

<"color: #800000">注意: 开启session一定要在开始的地方 

验证的原理

验证的过程就是客户端输入的验证码和存在于session域中的验证码进行对比。即:

if(isset($_REQUEST['checkcode'])){
    session_start();
    if($_REQUEST['checkcode']==$_SESSION['checkcode']){
      echo "<font color='green'>Success!</font>"; 
    }else{
      echo "<font color='red'>Failed!</font>";  
    }
    exit();
  }

优化验证

但是简单的这样验证有一点不好的地方,那就是字母的大小写容易出错。所以我们要做一下转换,将用户输入的数值全部变成小写的。

if(strtolower($_REQUEST['checkcode'])==$_SESSION['checkcode']){···}

小案例

生成验证码

<"color: #800000">表单验证

<"Content-Type:text/html;charset=utf8");
    if(isset($_REQUEST['checkcode'])){
      session_start();
      if(strtolower($_REQUEST['checkcode'])==$_SESSION['checkcode']){
        echo "<font color='green'>Success!</font>"; 
      }else{
        echo "<font color='red'>Failed!</font>";  
      }
      exit();
    }
"utf-8" />
  <title>验证验证码信息</title>
  <script>
    function change(){
      document.getElementById("image_checkcode").src='./store.php"./form.php" method="post">
<p>验证码图片:</p><img id="image_checkcode" src="/UploadFiles/2021-04-02/store.php">

总结

最后,来个总结吧。
 •使用php制作验证码需要gd拓展的支持。
 •使用imagecreatetruecolor方法生成背景色,并用imagefill填充一个由imagecolorallocate产生的颜色。
 •使用imagestring来实现验证码和背景图的结合
 •使用imagesetpixel来添加干扰点
 •使用imageline来添加干扰线
 •使用session之前要在开头开启session_start()方法
 •使用JavaScript来动态的修改验证码的src,来满足用户“换一张”的需求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
下一篇:针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。