php生成ピクチャ検証コード

6114 ワード

認証コードは主に暴力的な解読を防ぐために登録されています.以下はphpの画像検証コードの生成方式です.くだらないことは言わないで、直接コードをつけます.
/**
 *      
 */
function buildRandomString($type=3,$length=4){
    if ($type==1){
        //join()   implode()     ,          ,                 
        $chars=join( "",range(0,9));
    }elseif($type==2){    
        //range()                  
        //array_merge()                                  
        $chars=join("",array_merge(range("a","z"),range("A","Z")));
    }elseif($type==3){
        $chars=join("",array_merge(range("a","z"),range("A","Z"),range(0,9)));
        //       abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    }
    if($length>strlen($chars)){
        exit("       ");
    }    
    $chars=str_shuffle($chars);//str_shuffle()               
    return substr($chars,0,$length);//substr()            
}

/**
 *  GD        
 */
function verifyImage($type=1,$length=4,$pixel=5,$line=5,$sess_name = "verify"){
    session_start();

    //    
    $width=80;
    $height=28;
    //imagecreatetruecolor()         ,         x_size   y_size      
    $image=imagecreatetruecolor($width,$height);
    //imagecolorallocate()       ,       RGB       
    $white=imagecolorallocate($image,255,255,255);
    $black=imagecolorallocate($image,0,0,0);        
    //             ,       、       ,  
    imagefilledrectangle($image,1,1,$width-2,$height-2,$white);

    //     
    $chars=buildRandomString($type,$length);
    //       session ,    
    $_SESSION[$sess_name]=$chars;

    //        
    $fontfiles=array("SIMYOU.TTF");//                
    for($i=0;$i<$length;$i++){
        //mt_rand()         
        $size=mt_rand(14,18);//    
        $angle=mt_rand(-15,15);//    
        $x=5+$i*$size;
        $y=mt_rand(20,26);//x y      ,        
        $fontfile="./fonts/".$fontfiles[mt_rand(0,count($fontfiles)-1)];//  :         ,      
        $color=imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));//    
        $text=substr($chars,$i,1);//  
        //imagettftext()         
        imagettftext($image,$size,$angle,$x,$y,$color,$fontfile,$text);
    }
    
    if($pixel){//
        for($i=0;$i<50;$i++){
            //  
            imagesetpixel($image,mt_rand(0,$width-1),mt_rand(0,$height-1),$black);
        }
    }
    if($line){//
        for($i=1;$i<$line;$i++){
            $color=imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
            imageline($image,mt_rand(0,$width-1),mt_rand(0,$height-1),mt_rand(0,$width-1),mt_rand(0,$height-1),$color);
        }
    }
    header("content-type:image/gif");
    imagegif($image);//  gif     
    imagedestroy($image);//      
}