1. 程式人生 > >Thinkphp 專題/驗證碼

Thinkphp 專題/驗證碼

驗證碼

Think\Verify類可以支援驗證碼的生成和驗證功能。

生成驗證碼

下面是最簡單的方式生成驗證碼:

$Verify = new \Think\Verify();
$Verify->entry();

上面的程式碼會生成預設的驗證碼圖片並輸出,顯示如下:

verify

生成的驗證碼資訊會儲存到session中,包含的資料有:

array('verify_code'=>'當前驗證碼的值','verify_time'=>'驗證碼生成的時間戳')

如果你需要在一個頁面中生成多個驗證碼的話,entry方法需要傳入可標識的資訊,例如: 驗證碼1:

// 驗證碼1
$Verify = new \Think\Verify();
$Verify->entry(1);

驗證碼2:

// 驗證碼2
$Verify = new \Think\Verify();
$Verify->entry(2);

驗證碼引數

可以對生成的驗證碼設定相關的引數,以達到不同的顯示效果。 這些引數包括:

引數 描述
expire 驗證碼的有效期(秒)
useImgBg 是否使用背景圖片 預設為false
fontSize 驗證碼字型大小(畫素) 預設為25
useCurve 是否使用混淆曲線 預設為true
useNoise 是否新增雜點 預設為true
imageW 驗證碼寬度 設定為0為自動計算
imageH 驗證碼高度 設定為0為自動計算
length 驗證碼位數
fontttf 指定驗證碼字型 預設為隨機獲取
useZh 是否使用中文驗證碼
bg 驗證碼背景顏色 rgb陣列設定,例如 array(243, 251, 254)
seKey 驗證碼的加密金鑰
codeSet 驗證碼字元集合
zhSet 驗證碼字元集合(中文)

引數設定使用兩種方式。

例項化傳入引數:

$config =    array(
    'fontSize'    =>    30,    // 驗證碼字型大小
    'length'      =>    3,     // 驗證碼位數
    'useNoise'    =>    false, // 關閉驗證碼雜點
);
$Verify =     new \Think\Verify($config);
$Verify->entry();

或者採用動態設定的方式,如:

$Verify =     new \Think\Verify();
$Verify->fontSize = 30;
$Verify->length   = 3;
$Verify->useNoise = false;
$Verify->entry();

生成的驗證碼如圖所示:

localhost

驗證碼字型

預設情況下,驗證碼的字型是隨機使用 ThinkPHP/Library/Think/Verify/ttfs/目錄下面的字型檔案,我們可以指定驗證碼的字型,例如:

$Verify =     new \Think\Verify();
// 驗證碼字型使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf
$Verify->fontttf = '5.ttf'; 
$Verify->entry();

背景圖片

支援驗證碼背景圖片功能,可以如下設定:

$Verify =     new \Think\Verify();
// 開啟驗證碼背景圖片功能 隨機使用 ThinkPHP/Library/Think/Verify/bgs 目錄下面的圖片
$Verify->useImgBg = true; 
$Verify->entry();

效果如圖所示:

localhost(2)

中文驗證碼

如果要使用中文驗證碼,可以設定:

$Verify =     new \Think\Verify();
// 驗證碼字型使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf
$Verify->useZh = true; 
$Verify->entry();

顯示效果如圖:

logo

如果無法正常顯示,請確認你的 ThinkPHP/Library/Think/Verify/zhttfs/ 目錄下面存在中文字型檔案。

指定驗證碼字元

3.2.1版本以上,我們可以指定驗證碼的字元,通過重新設定codeSet引數即可,例如:

$Verify =     new \Think\Verify();
// 設定驗證碼字元為純數字
$Verify->codeSet = '0123456789'; 
$Verify->entry();

如果是中文驗證碼,可以使用zhSet引數設定,例如:

$Verify =     new \Think\Verify();
$Verify->useZh = true;
// 設定驗證碼字元
$Verify->zhSet = '們以我到他會作時要動國產的一是工就年階義發成部民可出能方進在了不和有大這'; 
$Verify->entry();

驗證碼檢測

可以用Think\Verify類的check方法檢測驗證碼的輸入是否正確,例如,下面是封裝的一個驗證碼檢測的函式:

// 檢測輸入的驗證碼是否正確,$code為使用者輸入的驗證碼字串
function check_verify($code, $id = ''){
    $verify = new \Think\Verify();
    return $verify->check($code, $id);
}