TP框架中Think\Verify類能夠支持驗證碼的生成和驗證功能。具體文件:ThinkPHP/Library/Think/Verify.class.phpjavascript
下面是最簡單的方式生成驗證碼:php
$Verify = new \Think\Verify();
$Verify->entry();
上面的代碼會生成默認的驗證碼圖片並輸出,顯示以下:css
生成的驗證碼信息會保存到session中,包含的數據有:html
array('verify_code'=>'當前驗證碼的值','verify_time'=>'驗證碼生成的時間戳')
若是你須要在一個頁面中生成多個驗證碼的話,entry方法須要傳入可標識的信息。java
能夠對生成的驗證碼設置相關的參數,以達到不一樣的顯示效果。這些參數包括:jquery
參數 | 描述 |
---|---|
expire | 驗證碼的有效期(秒) |
useImgBg | 是否使用背景圖片 默認爲false |
fontSize | 驗證碼字體大小(像素) 默認爲25 |
useCurve | 是否使用混淆曲線 默認爲true |
useNoise | 是否添加雜點 默認爲true |
imageW | 驗證碼寬度 設置爲0爲自動計算 |
imageH | 驗證碼高度 設置爲0爲自動計算 |
length | 驗證碼位數 |
fontttf | 指定驗證碼字體 默認爲隨機獲取 |
useZh | 是否使用中文驗證碼 |
bg | 驗證碼背景顏色 rgb數組設置,例如 array(243, 251, 254) |
seKey | 驗證碼的加密密鑰 |
codeSet | 驗證碼字符集合 3.2.1 新增 |
zhSet | 驗證碼字符集合(中文) 3.2.1 新增 |
默認參數配置:數組
參數設置使用兩種方式。session
實例化傳入參數:框架
或者採用動態設置的方式,如:函數
默認狀況下,驗證碼的字體是隨機使用 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();
若是要使用中文驗證碼,能夠設置:
$Verify = new \Think\Verify();
// 驗證碼字體使用 ThinkPHP/Library/Think/Verify/zhttfs/simhei.ttf
$Verify->useZh = true;
$Verify->entry();
顯示效果如圖:
若是沒法正常顯示,請確認你的 ThinkPHP/Library/Think/Verify/zhttfs/ 目錄下面存在中文字體文件。
若ThinkPHP/Library/Think/Verify/zhttfs/裏面沒有中文字體文件,能夠下載或者從C:\Windows\Fonts\裏面找到中文字體文件複製過來,注意字體文件擴展名爲.ttf。
能夠用Think\Verify類的check
方法檢測驗證碼的輸入是否正確,例如,下面是封裝的一個驗證碼檢測的函數:
// 檢測輸入的驗證碼是否正確,$code爲用戶輸入的驗證碼字符串
function check_verify($code, $id = ''){
$verify = new \Think\Verify();
return $verify->check($code, $id);
}
練習:以登陸爲例:
控制器方法:
<?php namespace Home\Controller; use Think\Controller; class LoginController extends Controller { function Login() { if(empty($_POST)) { $this->display(); } else { $code = $_POST["yzm"]; $verify = new \Think\Verify(); if($verify->check($code,2)) //code是用戶輸入的值 ,2是驗證碼檢測標示,必須與生成的驗證碼標示相同才能驗證 { if($_POST["uid"]!="" && $_POST["pwd"]!="") { $model = D("Users"); $uid = $_POST["uid"]; $pwd = $_POST["pwd"]; $attr = $model->field("Pwd")->find($uid); //var_dump($attr); if($pwd==$attr["pwd"]) { session("uid",$uid); // 跳轉頁面以前將$uid存入session $this->success("登陸成功!","Main"); } else { $this->error("登陸失敗!"); } } else { $this->error("用戶名或者密碼不能爲空!"); } } else { $this->error("驗證碼不正確!"); } } } //生成驗證碼的操做方法 function yzm() { $config = array( 'fontSize' => 30, // 驗證碼字體大小 'length' => 4, // 驗證碼位數 'useCurve' => true, // 是否畫混淆曲線 'useNoise' => true, // 關閉驗證碼雜點 'expire' => 60, // 驗證碼有效期(秒) 'useImgBg' => false, // 使用背景圖片 'useZh' => true, // 使用中文驗證碼 'imageW' => 240, // 驗證碼寬度 'imageH' => 60, // 驗證碼高度 'fontttf' => 'simhei.ttf', // 驗證碼字體 ); $Verify = new \Think\Verify($config); $Verify->entry(2);//參數是生成驗證碼的標示,適用於同一個頁面有多個驗證碼的時候,生成驗證碼的標示必須與檢測驗證碼的標示相同,不然驗證碼不正確 }
模板頁面:
<load href="__PUBLIC__/Js/jquery-1.11.2.min.js" /> <style type="text/css"> #sx{ color:#33F; text-decoration:underline; cursor:pointer;} </style> </head> <body> <h1>登陸頁面</h1> <form action="__ACTION__" method="post"> <div>用戶名:<input type="text" name="uid" /></div><br /> <div>密碼: <input type="password" name="pwd" /></div><br /> <div>驗證碼:<input type="text" name="yzm" /></div><br /> <!--src指向方法 --> <div><img src="__CONTROLLER__/yzm" id="yzm" alt="驗證碼" /><span id="sx">看不清楚,換一張</span></div> <input type="submit" value="登陸" /> </form> </body> </html> <script type="text/javascript"> $(document).ready(function(e) { $("#sx").click(function(){ $("#yzm").attr("src","__CONTROLLER__/yzm");//更新src屬性 }) }); </script>
請求Login方法: