程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php Captcha驗證碼類

php Captcha驗證碼類

編輯:PHP綜合
<?php  
/** Captcha 驗證碼類 
*   Date:   2011-02-19 
*   Author: fdipzone 
*/
      
class Captcha{  //class start  
      
    private $sname = '';  
      
    public function __construct($sname=''){ // $sname captcha session name  
        $this->sname = $sname==''? 'm_captcha' : $sname;  
    }  
      
      
    /** 生成驗證碼圖片 
    * @param  int   $length 驗證碼長度 
    * @param  Array $param  參數 
    * @return IMG 
    */
    public function create($length=4,$param=array()){  
        Header("Content-type: image/PNG");  
        $authnum = $this->random($length);   //生成驗證碼字符.  
          
        $width  = isset($param['width'])? $param['width'] : 13;     //文字寬度  
        $height = isset($param['height'])? $param['height'] : 18;   //文字高度  
        $pnum   = isset($param['pnum'])? $param['pnum'] : 100;      //干擾象素個數  
        $lnum   = isset($param['lnum'])? $param['lnum'] : 2;        //干擾線條數  
      
        $this->captcha_session($this->sname,$authnum);                //將隨機數寫入session  
      
        $pw = $width*$length+10;  
        $ph = $height+6;  
                      
        $im = imagecreate($pw,$ph);                     //imagecreate() 新建圖像,大小為 x_size 和 y_size 的空白圖像。  
        $black = ImageColorAllocate($im, 238,238,238);  //設置背景顏色  
          
        $values = array(  
                mt_rand(0,$pw),  mt_rand(0,$ph),  
                mt_rand(0,$pw),  mt_rand(0,$ph),  
                mt_rand(0,$pw),  mt_rand(0,$ph),  
                mt_rand(0,$pw),  mt_rand(0,$ph),  
                mt_rand(0,$pw),  mt_rand(0,$ph),  
                mt_rand(0,$pw),  mt_rand(0,$ph)  
        );  
        imagefilledpolygon($im, $values, 6, ImageColorAllocate($im, mt_rand(170,255),mt_rand(200,255),mt_rand(210,255)));   //設置干擾多邊形底圖  
          
        /* 文字 */
        for ($i = 0; $i < strlen($authnum); $i++){  
            $font = ImageColorAllocate($im, mt_rand(0,50),mt_rand(0,150),mt_rand(0,200));//設置文字顏色  
            $x  = $i/$length * $pw + rand(1, 6);    //設置隨機X坐標  
            $y  = rand(1, $ph/3);                   //設置隨機Y坐標  
            imagestring($im, mt_rand(4,6), $x, $y, substr($authnum,$i,1), $font);   
        }  
      
        /* 加入干擾象素 */
        for($i=0; $i<$pnum; $i++){  
            $dist = ImageColorAllocate($im, mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //設置雜點顏色  
            imagesetpixel($im, mt_rand(0,$pw) , mt_rand(0,$ph) , $dist);   
        }   
      
        /* 加入干擾線 */
        for($i=0; $i<$lnum; $i++){  
            $dist = ImageColorAllocate($im, mt_rand(50,255),mt_rand(150,255),mt_rand(200,255)); //設置線顏色  
            imageline($im,mt_rand(0,$pw),mt_rand(0,$ph),mt_rand(0,$pw),mt_rand(0,$ph),$dist);  
        }  
      
        ImagePNG($im);      //以 PNG 格式將圖像輸出到浏覽器或文件  
        ImageDestroy($im);  //銷毀一圖像  
    }  
      
      
    /** 檢查驗證碼 
    * @param String $captcha    驗證碼
	* 查看本欄目
		
							
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved