php封裝的驗證碼類分享

2022-10-06 08:30:10 字數 2896 閱讀 7012

驗證碼是我們開發的時候經常用到的功能,所以在此本人包裝了乙個驗證碼類,應該可以作為php的類外掛程式用,在此分享給各位讀友。

實現的原理也是很簡單,就是利用畫布的幾個函式,再加上一些字串的獲取,東湊西湊就構成了,呵呵。

這裡大概寫一下思路吧,其實這個類已經注釋的非常清楚了,不過,個人還是在行文前囉嗦一下。

首先是關於一些函式的解釋,這裡的解釋純屬個人體會,有什麼錯誤的地方,還請讀者指正。

1、建立畫布函式:imagecreatetruecolor(w,h);

說明:用於建立乙個畫布。

w 畫布的寬

h 畫布的高

此函式的返回值資源類(gd)

2、為畫布建立一種顏色:imagecolorallocate(img,red,green,blue)

說明:img畫布資源

red,green,blue  是0~255的範圍

3、為畫布新增背景色

imagefill(img,x,y,color);

說明:在 image 影象的座標 x,y(影象左上角為 0, 0)

4、畫邊框

imagerectangle($img,x1,y1,x2,y2,color);

說明:其左上角座標為 x1, y1,右下角座標為 x2, y2。影象的左上角座標為 0, 0。

3、繪製內容(字元)

imagestring(img ,size,x,y,string,color);

說明:img畫布

size是字大小 1至5

x,y是起始點

string是所要畫的內容

color是顏色

4、告訴瀏覽器格式

header("content-type:image/png");可為image/gif等等

5、輸出(或儲存),也可以使用第2個引數實現儲存

imagepng(img【,filename】)

imagejpeg(img【,filename】)

imageg程式設計客棧if(img【,filename】)

6、新增干擾線,本質就是直線

imageline(img,x1,y1,x2,y2,color);

說明:img 畫布

x1,y1 起點

x2,y2 終點

color 顏色

7、imagettftext ( img,size, angle, x, y, color, fontfile,text )

說明:img 畫布

size 字型大小,預設程式設計客棧單位畫素

angle 角度

x,y 座標點

color 顏色

fontfile 字型檔案,必須是中文字型

text 內容

特別說明:這裡的color引數都是imagecolorallocate()函式建立的顏色

下面是思路:

這裡最先生成畫布,之後就是為畫布新增字元程式設計客棧串,直線,噪點,邊框,來生成驗證碼的,最後類返回的兩個公用介面是:可供外面呼叫的生成驗證碼的畫布和驗證碼的字串構成,為的是給外界輸出驗證碼畫布,以及儲存字串,作為驗證用

下面是**:

<?php namespace captcha;

/**驗證碼類

*verify方法生成驗證碼字串

*entry方法生成驗證碼

*特別提醒:這裡要先用entry生成驗證碼,再用verify生成驗證碼的字串,也就是必須先呼叫entry,然後才能夠呼叫verify生成驗證碼的字串,原因**已經說明問題了,因為驗證碼的字串是在entry方法呼叫captchaimage生成的,所以必須先呼叫它才行

*有的地方對中文的字型要求比較高,所以,有的地方不支援中文驗證碼

*/class captcha

//建立驗證碼

private function captchaimage()

$this->verifycode = $this->code($img,$this->config['charset'],$this->config['chinese']);

//存在則新增干擾線

if($this->config['lines'])

//存在則新增干擾點

if($this->config['dots'])

return $img;

} private function codelines($img)

} private function codedots($img)

} /*畫布邊框*/

private function tangle($img)

/*生成驗證碼,預設英文,$ch為true則為中文*/

private function code($img,$ch=false,$set='')

//每次繪製乙個字元

for($i=1;$i<=$this->config['length'];$i++)

}else

}//每次繪製乙個字元

for($i=1;$i<=$this->config['length'];$i++)

}return $str;

} //獲取驗證碼

public function verify()

//生成驗證碼

public function entry()

}$ob = new captcha;

$ob->entry();

最後,為了不誤人子弟,還是再強調一遍:

這裡必須先用entry生成驗證碼,再用verify生成驗證碼的字串,也就是必須先呼叫entry,然後才能夠呼叫verify生成驗證碼的字串,原因**已經說明問題了,因為驗證碼的字串是在entry方法的方法captchaimage中生成的,所以必須先呼叫它才行 有的地方對中文的字型要求比較高,所以,有的地方不支援中文驗證碼

本文標題: php封裝的驗證碼類分享

本文位址:

php封裝驗證碼類

關於類中用到的方法會在另乙個文章裡作說明,用ctrl f搜尋你想看的方法就行 建立的類名是code類,所以呼叫時new乙個物件,呼叫方法即可,如下。code new code 4,2,100,100 echo code outimage 類的屬性和方法 class code public funct...

php高階實戰 驗證碼封裝類

對於php驗證碼的封裝類的源 可表示如下 經過測試,可以執行 php高階實戰 驗證碼類 封裝類原則 1.該類對外公開的方法只有乙個,只要呼叫這個方法,就可以將驗證碼顯示到瀏覽器,其他的為這個類服務的方法設定為protected,供子類來繼承和重寫。2.有些變數在該類裡面會被反覆的使用到,我們將其儲存...

PHP實現的封裝驗證碼類詳解

本篇文章是對php實現的封裝驗證碼類進行了詳細的分析介紹,需要的朋友參考下 用php寫乙個驗證碼類,並進行封裝。類名 validationcode.class.php 如下 如下 class validationcode else 通過訪問該方法向瀏覽器中輸出影象 function showimag...