php驗證碼類

<?php
/**
 * 
 * @author Administrator
 *
 */
class ValidateCode{
	
	private $width;
	private $height;
	private $codeNum;
	private $img_resouce;
	private $disturbColorNum;
	private $checkCode;
	
	function __construct($width=80,$height=20,$codeNum=4) {
		$this->width=$width;
		$this->height=$height;
		$this->codeNum=$codeNum;
		$this->checkCode=$this->CreateCheckCode();
		$number=floor($width*$height/25);
		if ($number>240-$codeNum) {
			$this->disturbColorNum=240-$codeNum;
		}else{
			$this->disturbColorNum=$number;
		}
	}
	
	public function showImage($fontpath='') {
		//建立圖像背景
		$this->Img_resouce();
		//var_dump($img_resouce);
		//設置干擾元素
		$this->setDistructcolor();
		//向圖像中隨機畫出文本
		$this->outputtext($fontpath);
		//輸出圖像
		$this->outputimage();
	}
	/**
	 * 
	 *獲取隨機建立的驗證碼 
	 */
	public function getCheckCode(){
		
	}
	private function Img_resouce(){
		//建立一個真彩圖像
		$this->img_resouce=imagecreatetruecolor($this->width,$this->height);
		//隨機設置圖像背景
		$backcolor=imagecolorallocate($this->img_resouce,rand(225,255),rand(225,255),rand(225,255));
		//填充顏色
		imagefill($this->img_resouce, 0, 0, $backcolor);
		//設置邊框背景
		$border=imagecolorallocate($this->img_resouce, 0,0,0);
		//畫一個矩形
		imagerectangle($this->img_resouce,0,0,$this->width-1,$this->height-1,$border);
	}
	private function setDistructcolor(){
		//繪畫干擾點
		for ($i = 0; $i <$this->disturbColorNum; $i++) {
			
		   imagesetpixel($this->img_resouce, rand(1, $this->width-2), rand(1, $this->height-2), rand(0,255));
		}
		
		//繪畫干擾線
		for ($j = 0; $j <3; $j++) {
			$linecolor=imagecolorallocate($this->img_resouce,rand(0,255),rand(0,255),rand(0,255));
			imagearc($this->img_resouce, rand(0,$this->width), rand(0,$this->height),
			 rand(10, 225), rand(20, 150),
			 55, 44, $linecolor);
		}
	}
	private function CreateCheckCode(){
		$code='23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ';
	    $string='';
	    for ($i = 0; $i < $this->codeNum; $i++) {
	    	
	    	$char=$code{rand(0, strlen($code)-1)};
	    	$string.=$char;
	    }
	    return $string;
	}
	private function outputtext($fontpath=''){
		for ($i = 0; $i < $this->codeNum; $i++) {
			$fontcolor=imagecolorallocate($this->img_resouce, rand(0,128), rand(0, 128), rand(0, 128));
			if ($fontpath=='') {
				
	             $fontsize=rand(3, 5);
			     $x=floor($this->width/$this->codeNum)*$i+3;
			     $y=rand(0, $this->height-20);
			     imagechar($this->img_resouce, $fontsize, $x, $y, $this->checkCode{$i}, $fontcolor);
		}else{
			     $fontsize=rand(12, 16);
			     $x=floor(($this->width-8)/$this->codeNum)*$i+8;
			     $y=rand($fontsize, $this->height-15);
			     imagettftext($this->img_resouce,$fontsize,rand(-45,45),$x,$y,$fontcolor,fontpath,$this->checkCode{$i});
		     }
		}
	}
	private function outputimage() {
		
		if (imagetypes() & IMG_GIF) {
			header("Content-type: image/gif");
			imagegif($this->img_resouce);
		}else if(imagetypes() & IMG_JPEG) {
			header("Content-type: image/jpeg");
			imagejpeg($this->img_resouce);
		}else if(imagetypes() & IMG_PNG) {
			header("Content-type: image/png");
			imagepng($this->img_resouce);
		}else {
			echo "PHP不支持的類型";
		}
		
		
	}
	private function __destruct(){
		
		imagedestroy($this->img_resouce);
	}
}
?>
相關文章
相關標籤/搜索