找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1026|回复: 0
打印 上一主题 下一主题

php生成动态验证码gif图片

[复制链接]

2536

主题

2536

帖子

7532

积分

论坛元老

Rank: 8Rank: 8

积分
7532
跳转到指定楼层
楼主
发表于 2018-2-14 05:42:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            这是一个通过php生成的动态验证码图片的示例,重点是可以运行哦!下面先发下效果图:

下面是php生成动态验证码需要用到的相关类和函数。
0){// 屏蔽第一帧
      $top=0;
      for($k=0;$kGetAnimation();
}


/**
*GIFEncoder类
**/
Class GIFEncoder{
  var $GIF="GIF89a";       /* GIF header 6 bytes    */  
  var $VER="GIFEncoder V2.06";   /* Encoder version      */  
  var $BUF=Array();
  var $LOP=0;
  var $DIS=2;
  var $COL=-1;
  var $-1;
  var $ERR=Array(
    'ERR00'=>"Does not supported function for only one image!",
    'ERR01'=>"Source is not a GIF image!",
    'ERR02'=>"Unintelligible flag ",
    'ERR03'=>"Could not make animation from animated GIF source",
  );
  function GIFEncoder($GIF_src,$GIF_dly=100,$GIF_lop=0,$GIF_dis=0, $GIF_red=0,$GIF_grn=0,$GIF_blu=0,$GIF_mod='bin'){
    if(!is_array($GIF_src)&&!is_array($GIF_tim)){
      printf("%s: %s",$this->VER,$this->ERR['ERR00']);
      exit(0);
    }  
    $this->LOP=($GIF_lop>-1)?$GIF_lop:0;
    $this->DIS=($GIF_dis>-1)?(($GIF_disCOL=($GIF_red>-1&&$GIF_grn>-1&&$GIF_blu>-1)?($GIF_red |($GIF_grnBUF[]=fread(fopen($GIF_src [$i],"rb"),filesize($GIF_src [$i]));
      }elseif(strToLower($GIF_mod)=="bin"){
        $this->BUF [ ]=$GIF_src [ $i ];
      }else{
        printf("%s: %s(%s)!",$this->VER,$this->ERR [ 'ERR02' ],$GIF_mod);
        exit(0);
      }  
      if(substr($this->BUF[$i],0,6)!="GIF87a"&&substr($this->BUF [$i],0,6)!="GIF89a"){
        printf("%s: %d %s",$this->VER,$i,$this->ERR ['ERR01']);
        exit(0);
      }  
      for($j=(13+3*(2BUF[$i]{10})&0x07))),$k=TRUE;$k;$j++){
        switch($this->BUF [$i]{$j}){
          case "!":  
            if((substr($this->BUF[$i],($j+3),8))=="NETSCAPE"){
                printf("%s: %s(%s source)!",$this->VER,$this->ERR ['ERR03'],($i+1));
                exit(0);
            }  
            break;
          case ";":  
            $k=FALSE;
          break;
        }  
      }  
    }  
    GIFEncoder::GIFAddHeader();
    for($i=0,$count_buf=count($this->BUF);$iBUF[0]{10})&0x80){
      $cmap=3*(2BUF [0]{10})&0x07));
      $this->GIF.=substr($this->BUF [0],6,7);
      $this->GIF.=substr($this->BUF [0],13,$cmap);
      $this->GIF.="!\377\13NETSCAPE2.0\3\1".GIFEncoder::GIFWord($this->LOP)."\0";
    }  
  }  
  function GIFAddFrames($i,$d){
    $Locals_str=13+3*(2 BUF[$i]{10})&0x07));
    $Locals_end=strlen($this->BUF[$i])-$Locals_str-1;
    $Locals_tmp=substr($this->BUF[$i],$Locals_str,$Locals_end);
    $Global_len=2BUF [0]{10})&0x07);
    $Locals_len=2BUF[$i]{10})&0x07);
    $Global_rgb=substr($this->BUF[0],13,3*(2BUF[0]{10})&0x07)));
    $Locals_rgb=substr($this->BUF[$i],13,3*(2BUF[$i]{10})&0x07)));
    $Locals_ext="!\xF9\x04".chr(($this->DIS>0)&0xFF).chr(($d>>8)&0xFF)."\x0\x0";
    if($this->COL>-1&&ord($this->BUF[$i]{10})&0x80){
      for($j=0;$jBUF[$i]{10})&0x07));$j++){
        if(ord($Locals_rgb{3*$j+0})==($this->COL>> 0)&0xFF&&ord($Locals_rgb{3*$j+1})==($this->COL>> 8)&0xFF&&ord($Locals_rgb{3*$j+2})==($this->COL>>16)&0xFF){
          $Locals_ext="!\xF9\x04".chr(($this->DIS>0)&0xFF).chr(($d>>8)&0xFF).chr($j)."\x0";
          break;
        }  
      }  
    }  
    switch($Locals_tmp{0}){
      case "!":  
        $Locals_($Locals_tmp,8,10);
        $Locals_tmp=substr($Locals_tmp,18,strlen($Locals_tmp)-18);
        break;
      case ",":  
        $Locals_($Locals_tmp,0,10);
        $Locals_tmp=substr($Locals_tmp,10,strlen($Locals_tmp)-10);
        break;
    }  
    if(ord($this->BUF[$i]{10})&0x80&&$this->IMG>-1){
      if($Global_len==$Locals_len){
        if(GIFEncoder::GIFBlockCompare($Global_rgb,$Locals_rgb,$Global_len)){
          $this->GIF.=($Locals_ext.$Locals_$Locals_tmp);
        }else{
          $byte=ord($Locals_img{9});
          $byte|=0x80;
          $byte&=0xF8;
          $byte|=(ord($this->BUF [0]{10})&0x07);
          $Locals_img{9}=chr($byte);
          $this->GIF.=($Locals_ext.$Locals_$Locals_rgb.$Locals_tmp);
        }  
      }else{
        $byte=ord($Locals_img{9});
        $byte|=0x80;
        $byte&=0xF8;
        $byte|=(ord($this->BUF[$i]{10})&0x07);
        $Locals_{9}=chr($byte);
        $this->GIF.=($Locals_ext.$Locals_$Locals_rgb.$Locals_tmp);
      }  
    }else{
      $this->GIF.=($Locals_ext.$Locals_$Locals_tmp);
    }  
    $this->;
  }  
  function GIFAddFooter(){
    $this->GIF.=";";
  }  
  function GIFBlockCompare($GlobalBlock,$LocalBlock,$Len){
    for($i=0;$i>8)&0xFF));
  }  
  function GetAnimation(){
    return($this->GIF);
  }  
}
php生成动态验证码用法示例:

/*调用示例*/
session_start();
$checkCode='';
$chars='abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPRSTUVWXYZ23456789';
for($i=0;$i
以上就是php如何生成动态验证码的实现方法,希望对大家的学习有所帮助。
            
            
您可能感兴趣的文章:
  • PHP生成图片验证码、点击切换实例
  • PHP使用GIFEncoder类生成的GIF动态图片验证码
  • php生成图片验证码
  • php生成数字字母的验证码图片
  • php生成图片验证码的实例讲解
  • php生成图片验证码-附五种验证码
  • PHP实现GIF图片验证码
  • PHP 绘制网站登录首页图片验证码
  • php生成图片验证码的方法
  • PHP生成图片验证码功能示例
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端