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

本文介绍了一种在服务器未安装GD2库的情况下生成图形验证码的方法。通过判断GD库的存在与否来选择不同的生成方式,当GD2存在时使用PNG格式输出,不存在时则采用位图格式,并详细展示了相应的PHP代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务器由于重新编辑了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;
}
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值