首頁 >php框架 >ThinkPHP >詳解ThinkPHP框架之驗證碼

詳解ThinkPHP框架之驗證碼

藏色散人
藏色散人轉載
2020-10-28 15:35:364253瀏覽

下面由ThinkPHP教學欄位來介紹ThinkPHP框架之驗證碼給大家 ,希望對需要的朋友有幫助!

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

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

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

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

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

array('verify_code'=>'当前验证码的值','verify_time'=>'验证码生成的时间戳')

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

驗證碼參數

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

##zhSet驗證碼字元集合(中文) 3.2.1 新增
參數 描述
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 新增

預設參數配置:

參數設定使用兩種方式。

實例化傳入參數:

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

驗證碼字體

預設情況下,驗證碼的字體是隨機使用 

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);//参数是生成验证码的标示,适用于同一个页面有多个验证码的时候,生成验证码的标示必须与检测验证码的标示相同,否则验证码不正确    }?>
請求Login方法:

以上是詳解ThinkPHP框架之驗證碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除