您好,欢迎访问一九零五行业门户网

php生成gif动态验证码图片

发一个真正能运行的通过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;$i0){// 屏蔽第一帧
$top=0;
for($k=0;$ksource 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_grn<<8)|($gif_bluver,$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]{$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*(2gif.=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])-$locals_str-1;
$locals_tmp=substr($this->buf[$i],$locals_str,$locals_end);
$global_len=2>8)&0xff).\x0\x0;
if($this->col>-1&&ord($this->buf[$i]{10})&0x80){
for($j=0;$j> 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->dis0)&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>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动画
其它类似信息

推荐信息