没有GD库也可以用图形验证码(限数字加字母)

服务器由于重新编辑了PHP,漏掉了GD2的安装,图形验证码全部失效,只好搞过另一个图形验证码程序。
下面只提供生成图片的代码:
 
<? php
/*
* Filename:    ck.php
* Author:    flashlm
* Update:    07-06-18
*/
session_start ();
$auth_num = "" ;
srand (( double ) microtime () * 1000000 );
$auth_num_k = md5 ( rand ( 0 , 9999 ));
$auth_num = substr ( $auth_num_k , 10 , 4 );
session_register ( ' auth_num ' ); 
// 判断是否安装了GD2,如果装了
if ( function_exists ( ' imagecreate ' &&   function_exists ( ' imagecolorallocate ' &&   function_exists ( ' imagepng ' &&
function_exists ( ' imagesetpixel ' &&   function_exists ( ' imageString ' &&   function_exists ( ' imagedestroy ' &&   function_exists ( ' imagefilledrectangle ' &&   function_exists ( ' imagerectangle ' )){
    
Header ( " Content-type:image/PNG " );
    
$im = imagecreate( 63 , 20 );
    
$black = ImageColorAllocate( $im , 255 , 255 , 255 );
    
$white = ImageColorAllocate( $im , 255 , 255 , 255 );
    
$gray = ImageColorAllocate( $im , 20 , 20 , 20 );
    
// ImageFill($im,63,20,$black);//这行不知道为什么在我公司的服务器上出错误,换个空间ok
    imagestring( $im , 5 , 10 , 3 , $auth_num , $gray );
    
for ( $i = 0 ; $i < 200 ; $i ++ )
    {
    
$randcolor = ImageColorallocate( $im , rand ( 0 , 255 ) , rand ( 0 , 255 ) , rand ( 0 , 255 ));
    imagesetpixel(
$im , rand () % 70 , rand () % 30 , $randcolor );
    }
    ImagePNG(
$im );
    ImageDestroy(
$im );
}
else { // 如果没有安装GD2
    //禁止缓存

     header ( " Pragma:no-cache " );
    
header ( " Cache-control:no-cache " );
    
header ( " ContentType: Image/BMP " );

    
$Color [ 0 =   chr ( 0 ) . chr ( 0 ) . chr ( 0 );
    
$Color [ 1 =   chr ( 255 ) . chr ( 255 ) . chr ( 255 );
    
// 0-9,a-z字符的数据
      $_Num [ 0 =   " 1110000111110111101111011110111101001011110100101111010010111101001011110111101111011110111110000111 " ;
     
$_Num [ 1 =   " 1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111 " ;
     
$_Num [ 2 =   " 1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011 " ;
     
$_Num [ 3 =   " 1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111 " ;
     
$_Num [ 4 =   " 1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011 " ;
     
$_Num [ 5 =   " 1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111 " ;
     
$_Num [ 6 =   " 1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111 " ;
     
$_Num [ 7 =   " 1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111 " ;
     
$_Num [ 8 =   " 1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111 " ;
     
$_Num [ 9 =   " 1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111 " ;
     
$_Num [ 10 =   " 1111011111111101111111101011111110101111111010111111101011111100000111110111011111011101111000100011 " ;
     
$_Num [ 11 =   " 1000000111110111101111011110111101110111110000111111011101111101111011110111101111011110111000000111 " ;
     
$_Num [ 12 =   " 1110000011110111101110111110111011111111101111111110111111111011111111101111101111011101111110001111 " ;
     
$_Num [ 13 =   " 1000001111110111011111011110111101111011110111101111011110111101111011110111101111011101111000001111 " ;
     
$_Num [ 14 =   " 1000000111110111101111011011111101101111110000111111011011111101101111110111111111011110111000000111 " ;
     
$_Num [ 15 =   " 1000000111110111101111011011111101101111110000111111011011111101101111110111111111011111111000111111 " ;
     
$_Num [ 16 =   " 1110000111110111011110111101111011111111101111111110111111111011100011101111011111011101111110001111 " ;
     
$_Num [ 17 =   " 1000100011110111011111011101111101110111110000011111011101111101110111110111011111011101111000100011 " ;
     
$_Num [ 18 =   " 1100000111111101111111110111111111011111111101111111110111111111011111111101111111110111111100000111 " ;
     
$_Num [ 19 =   " 1110000011111110111111111011111111101111111110111111111011111111101111111110111110111011111000011111 " ;
     
$_Num [ 20 =   " 1000100011110111011111011011111101011111110001111111010111111101101111110110111111011101111000100011 " ;
     
$_Num [ 21 =   " 1000111111110111111111011111111101111111110111111111011111111101111111110111111111011110111000000011 " ;
     
$_Num [ 22 =   " 1000100011110010011111001001111100100111110101011111010101111101010111110101011111010101111001010011 " ;
     
$_Num [ 23 =   " 1000100011110011011111001101111101010111110101011111010101111101100111110110011111011001111000110111 " ;
     
$_Num [ 24 =   " 1110001111110111011110111110111011111011101111101110111110111011111011101111101111011101111110001111 " ;
     
$_Num [ 25 =   " 1000000111110111101111011110111101111011110000011111011111111101111111110111111111011111111000111111 " ;
     
$_Num [ 26 =   " 1110001111110111011110111110111011111011101111101110111110111011111011101001101111011001111110001011 " ;
     
$_Num [ 27 =   " 1000001111110111011111011101111101110111110000111111010111111101101111110110111111011101111000110011 " ;
     
$_Num [ 28 =   " 1110000011110111101111011110111101111111111001111111111001111111111011110111101111011110111100000111 " ;
     
$_Num [ 29 =   " 1000000011101101101111110111111111011111111101111111110111111111011111111101111111110111111110001111 " ;
     
$_Num [ 30 =   " 1000100011110111011111011101111101110111110111011111011101111101110111110111011111011101111110001111 " ;
     
$_Num [ 31 =   " 1000100011110111011111011101111101110111111010111111101011111110101111111010111111110111111111011111 " ;
     
$_Num [ 32 =   " 1001010011110101011111010101111101010111110101011111001001111110101111111010111111101011111110101111 " ;
     
$_Num [ 33 =   " 1000100011110111011111101011111110101111111101111111110111111110101111111010111111011101111000100011 " ;
     
$_Num [ 34 =   " 1000100011110111011111011101111110101111111010111111110111111111011111111101111111110111111110001111 " ;
     
$_Num [ 35 =   " 1100000011110111011111111101111111101111111110111111110111111111011111111011111111101110111100000011 " ;
  
// 输出图像文件头
     echo   chr ( 66 ) . chr ( 77 ) . chr ( 230 ) . chr ( 4 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 54 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 40 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 40 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 10 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 1 ) . chr ( 0 );
    
// 输出图像信息头
     echo   chr ( 24 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 176 ) . chr ( 4 ) . chr ( 0 ) . chr ( 0 ) . chr ( 18 ) . chr ( 11 ) . chr ( 0 ) . chr ( 0 ) . chr ( 18 ) . chr ( 11 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 ) . chr ( 0 );

    
for  ( $i = 9 ; $i >= 0 ; $i -- ){                             // 历经所有行
         for  ( $j = 0 ; $j <= 3 ; $j ++ ){                         // 历经所有字
             for  ( $k = 1 ; $k <= 10 ; $k ++ ){                     // 历经所有像素
                 if ( mt_rand ( 0 , 7 ) < 1 ){
                    
echo   $Color [ mt_rand ( 0 , 1 )];     // 随机生成杂点
                } else {
                    
$flm = get_int( $auth_num [ $j ]); // 取得0-35的对应数字(转化)
                     echo   $Color [ substr ( $_Num [ $flm ] ,   $i   *   10   +   $k ,   1 )];
                }
            }
        }
    }
    
}
$auth_num = md5 ( $auth_num );

/*
 *取得0-35的对应数字(转化)
 *
 
*/
function  get_int( $temp ){
    
$num = explode ( " , " , " 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z " );
    
for ( $i = 0 ; $i < 36 ; $i ++ ){
        
if ( strcmp ( $num [ $i ] , $temp ) == 0 ){
            
return   $i ;
        }
    }
    
return   0 ;
}
?>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值