php生成动态验证码gif图片_php技巧

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

下面是php生成动态验证码需要用到的相关类和函数。

<?php
/**
*ImageCode 生成包含验证码的GIF图片的函数
*@param $string 字符串
*@param $width 宽度
*@param $height 高度
**/
function ImageCode($string='',$width=75,$height=25){
  $authstr=$string?$string:((time()%2==0)?mt_rand(1000,9999):mt_rand(10000,99999));
  $board_width=$width;
  $board_height=$height;
  // 生成一个32帧的GIF动画
  for($i=0;$i<32;$i++){
    ob_start();
    $image=imagecreate($board_width,$board_height);
    imagecolorallocate($image,0,0,0);
    // 设定文字颜色数组
    $colorList[]=ImageColorAllocate($image,15,73,210);
    $colorList[]=ImageColorAllocate($image,0,64,0);
    $colorList[]=ImageColorAllocate($image,0,0,64);
    $colorList[]=ImageColorAllocate($image,0,128,128);
    $colorList[]=ImageColorAllocate($image,27,52,47);
    $colorList[]=ImageColorAllocate($image,51,0,102);
    $colorList[]=ImageColorAllocate($image,0,0,145);
    $colorList[]=ImageColorAllocate($image,0,0,113);
    $colorList[]=ImageColorAllocate($image,0,51,51);
    $colorList[]=ImageColorAllocate($image,158,180,35);
    $colorList[]=ImageColorAllocate($image,59,59,59);
    $colorList[]=ImageColorAllocate($image,0,0,0);
    $colorList[]=ImageColorAllocate($image,1,128,180);
    $colorList[]=ImageColorAllocate($image,0,153,51);
    $colorList[]=ImageColorAllocate($image,60,131,1);
    $colorList[]=ImageColorAllocate($image,0,0,0);
    $fontcolor=ImageColorAllocate($image,0,0,0);
    $gray=ImageColorAllocate($image,245,245,245);
    $color=imagecolorallocate($image,255,255,255);
    $color2=imagecolorallocate($image,255,0,0);
    imagefill($image,0,0,$gray);
    $space=15;// 字符间距
    if($i>0){// 屏蔽第一帧
      $top=0;
      for($k=0;$k<strlen($authstr);$k++){
        $colorRandom=mt_rand(0,sizeof($colorList)-1);
        $float_top=rand(0,4);
        $float_left=rand(0,3);
        imagestring($image,6,$space*$k,$top+$float_top,substr($authstr,$k,1),$colorList[$colorRandom]);
      }
    }
    for($k=0;$k<20;$k++){
      $colorRandom=mt_rand(0,sizeof($colorList)-1);
      imagesetpixel($image,rand()%70,rand()%15,$colorList[$colorRandom]); 

    }
    // 添加干扰线
    for($k=0;$k<3;$k++){
      $colorRandom=mt_rand(0,sizeof($colorList)-1);
      $todrawline=1;
      if($todrawline){
        imageline($image,mt_rand(0,$board_width),mt_rand(0,$board_height),mt_rand(0,$board_width),mt_rand(0,$board_height),$colorList[$colorRandom]);
      }else{
        $w=mt_rand(0,$board_width);
        $h=mt_rand(0,$board_width);
        imagearc($image,$board_width-floor($w / 2),floor($h / 2),$w,$h, rand(90,180),rand(180,270),$colorList[$colorRandom]);
      }
    }
    imagegif($image);
    imagedestroy($image);
    $imagedata[]=ob_get_contents();
    ob_clean();
    ++$i;
  }
  $gif=new GIFEncoder($imagedata);
  Header('Content-type:image/gif');
  echo $gif->GetAnimation();
} 

/**
*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 $IMG=-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_dis<3)?$GIF_dis:3):2;
    $this->COL=($GIF_red>-1&&$GIF_grn>-1&&$GIF_blu>-1)?($GIF_red |($GIF_grn<<8)|($GIF_blu<<16)):-1; 

    for($i=0,$src_count=count($GIF_src);$i<$src_count;$i++){
      if(strToLower($GIF_mod)=="url"){
        $this->BUF[]=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*(2<<(ord($this->BUF[$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);$i<$count_buf;$i++){
      GIFEncoder::GIFAddFrames($i,$GIF_dly[$i]);
    }
    GIFEncoder::GIFAddFooter();
  }
  function GIFAddHeader(){
    $cmap=0;
    if(ord($this->BUF[0]{10})&0x80){
      $cmap=3*(2<<(ord($this->BUF [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 <<(ord($this->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=2<<(ord($this->BUF [0]{10})&0x07);
    $Locals_len=2<<(ord($this->BUF[$i]{10})&0x07);
    $Global_rgb=substr($this->BUF[0],13,3*(2<<(ord($this->BUF[0]{10})&0x07)));
    $Locals_rgb=substr($this->BUF[$i],13,3*(2<<(ord($this->BUF[$i]{10})&0x07)));
    $Locals_ext="!\xF9\x04".chr(($this->DIS<<2)+0).chr(($d>>0)&0xFF).chr(($d>>8)&0xFF)."\x0\x0";
    if($this->COL>-1&&ord($this->BUF[$i]{10})&0x80){
      for($j=0;$j<(2<<(ord($this->BUF[$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<<2)+1).chr(($d>>0)&0xFF).chr(($d>>8)&0xFF).chr($j)."\x0";
          break;
        }
      }
    }
    switch($Locals_tmp{0}){
      case "!":
        $Locals_img=substr($Locals_tmp,8,10);
        $Locals_tmp=substr($Locals_tmp,18,strlen($Locals_tmp)-18);
        break;
      case ",":
        $Locals_img=substr($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_img.$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_img.$Locals_rgb.$Locals_tmp);
        }
      }else{
        $byte=ord($Locals_img{9});
        $byte|=0x80;
        $byte&=0xF8;
        $byte|=(ord($this->BUF[$i]{10})&0x07);
        $Locals_img {9}=chr($byte);
        $this->GIF.=($Locals_ext.$Locals_img.$Locals_rgb.$Locals_tmp);
      }
    }else{
      $this->GIF.=($Locals_ext.$Locals_img.$Locals_tmp);
    }
    $this->IMG=1;
  }
  function GIFAddFooter(){
    $this->GIF.=";";
  }
  function GIFBlockCompare($GlobalBlock,$LocalBlock,$Len){
    for($i=0;$i<$Len;$i++){
      if($GlobalBlock{3*$i+0}!=$LocalBlock{3*$i+0}||$GlobalBlock{3*$i+1}!=$LocalBlock{3*$i+1}||$GlobalBlock{3*$i+2}!=$LocalBlock{3*$i+2}){
        return(0);
      }
    }
    return(1);
  }
  function GIFWord($int){
    return(chr($int&0xFF).chr(($int>>8)&0xFF));
  }
  function GetAnimation(){
    return($this->GIF);
  }
} 

php生成动态验证码用法示例:

/*调用示例*/
session_start();
$checkCode='';
$chars='abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPRSTUVWXYZ23456789';
for($i=0;$i<4;$i++){
  $checkCode.=substr($chars,mt_rand(0,strlen($chars)-1),1);
}
$_SESSION['code']=strtoupper($checkCode);// 记录session
ImageCode($checkCode,60);// 显示GIF动画 

以上就是php如何生成动态验证码的实现方法,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php生成验证码
动态生成验证码、js动态生成验证码、html 生成动态验证码、java生成动态验证码、gif动态二维码生成器,以便于您获取更多的相关知识。

时间: 2024-12-22 15:48:29

php生成动态验证码gif图片_php技巧的相关文章

PHP 动态随机生成验证码类代码_php技巧

下面是效果图,这个效果图是没有开启干扰码的效果图 下面是类代码 复制代码 代码如下: <?php /************************************************ //FILE:ImageCode //DONE:生成动态验证码类 //DATE"2010-3-31 //Author:www.5dkx.com 5D开心博客 *********************************************************************

Struts2实现生成动态验证码并验证实例代码_java

 一.基本流程: 产生一个验证码页面(很小)→嵌入到表单中→点击可以刷新页面→表单提交时验证. 二.方法: 1.定义TestAction,实现画图方法 package com.zhuguang.action; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Map; import javax.se

php生成数字字母的验证码图片_php技巧

php生成数字字母的验证码图片 <?php header ('Content-Type: image/png'); $image=imagecreatetruecolor(100, 30); $color=imagecolorallocate($image, 255, 255, 255); imagefill($image, 20, 20, $color); //只含有数字 // for($i=0;$i<4;$i++){ // $font=6; // $x=rand(5,10)+$i*100/

PHP生成可点击刷新的验证码简单示例_php技巧

本文实例讲述了PHP生成可点击刷新的验证码.分享给大家供大家参考,具体如下: html文件: <html> <head> <title>验证码</title> </head> <script type="text/javascript"> function yanzheng(){ var im=document.getElementsByTagName("img"); im[0].src=&qu

使用GD库生成带阴影文字的图片_php技巧

最近使用GD库来进行微信公共账号的图片生成,研究了一下GD库文字阴影效果的生成同时也发现了GD库的强大. GD库,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等. GD库的安装什么的网上都有,现在很多虚拟空间也都支持,这里就不再赘述.下面通过我实际应用代码的实例和相关的注释为大家介绍一下GD库的使用方法. 原图: 生成效果图: 代码如

JavaScript动态生成二维码图片_javascript技巧

1.html代码 <div id="qrcode" style="width:200px; height:200px;position: fixed;bottom: 40%; right: 20%;"></div> 2.引入外部js文件 <script src="QRCode.js"></script> 3.方法调用 var qrcode = new QRCode(document.getEleme

如何使用PHP对网站验证码进行破解_php技巧

验证码的功能一般是防止使用程序恶意注册.暴力破解或批量发帖而设置的.所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能.学习验证码的破解/识别技术,不仅可以知道验证码的原理,而且可以让你知道怎样才能防止验证码被破解. 最常见的验证码主要有以下几种: 1.四位数字,随机的一数字字符串,最原始的验证码,验证作用几乎为零. 2.随机数字图片验证码.图片上的字符比较中规中矩,有的

PHP GD库相关图像生成和处理函数小结_php技巧

本文总结了PHP GD库相关图像生成和处理函数.分享给大家供大家参考,具体如下: 这几天在学习图像验证码部分,参考了许多例子,都是用GD库来生成和绘制图像的,所以打算把GD库封装成类来使用,顺便也学习和练习一下PHP面向对象部分. 首先分析一下GD库所提供的函数,依据功能作了划分:(这只是常用的基础级函数,更高级的函数稍后再作研究) 1. create // 图像生成 A.绘制图像 imageCreate // 基于调色板(256色)的图像(gif/*) imageCreateTrueColor

PHP5中GD库生成图形验证码(有汉字)_php实例

利用PHP5中GD库生成图形验证码   类似于下面这样 1.利用GD库函数生成图片,并在图片上写指定字符 imagecreatetruecolor 新建一个真彩色图像 imagecolorallocate 为一幅图像分配颜色(调色板) imagestring 绘制字符 imageline 绘制线条 imagesetpixel 打像素点 2.输出图片 imagejpeg($img); PHP实现过程,代码中注释详细,这里不做过多解释 verify.php 复制代码 代码如下: <?php //1.