thinkphp3.2验证码怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp3.2验证码怎么写相关的知识,希望对你有一定的参考价值。

    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 验证码字符集合 3.2.1 新增

zhSet 验证码字符集合(中文) 3.2.1 新增

参数设置使用两种方式。

    实例化传入参数:

$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);

参考技术A public function verify()
  $Verify = new \\Think\\Verify();
  $Verify->fontSize = 40;
  $Verify->codeSet = '0123456789'; 
  $Verify->length   = 4;
  $Verify->useNoise = true;
  $Verify->entry();

纯数字的  手册上都有的

表单内
<img src=":U('Login/verify')" id="img" onclick="this.src=':U("Login/verify")?nocache='+Math.random()" width="130" height="40">

如何解决thinkphp5中验证码常见问题

    在项目目录下面生成captcha扩展 (需要安装composer来安装)

    composer require topthink/think-captcha

    2 安装完成之后会呈现如上的目录。captcha扩展安装完成之后,就可以进行下一步操作

    配置comfig.php文件:在comfig.php下面加个扩展

    //验证码

    'captcha'=> [

    //字符集合

    'codeset'=>'23456780qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM',

    //字体大小

    'fontSize' => 18,

    //是否花混淆曲线

    'useCurve' => true,

    //图片高度

    'imageH' => 40,

    //图片宽度

    'imageW' => 130,

    //位数

    'length' => 4,

    //验证成功后是否重置

    'reset' => true,

    ],

    3.刷新验证码功能  src路径在这里可以用框架自带的也可以直接访问img方法

    <img id="captcha_img" src=":captcha_src()" alt="验证码" onclick="refreshVerify()"><a

    href="javascript:refreshVerify()">点击刷新</a>

    在js《script》标签部分加上刷新事件

    function refreshVerify()

    var ts = Date.parse(new Date() )/1000;

    console.log(ts);

    $('#captcha_img').attr('src','/captcha?id='+ts);

    4.在控制器里用TP验证自带的方法

    在你的登录的控制器里面加入

    4.1在头部引入 use think\\captcha\\Captcha;

    //该方法引入img图像  宽高可以再img用css直接控制!

    public function img()

    $captcha = new Captcha();

    return $captcha->entry();

    // 检测输入的验证码是否正确,$code为用户输入的验证码字符串,$id多个验证码标识

    function check_verify($code, $id = '')

    $captcha = new Captcha();

    return $captcha->check($code, $id);

    这个方法下面的验证要用到

    在你的form验证码值发送的方法里加入 post提交 GET提交就把post改成get  表单验证码name是code

    $request=request();

    if ($request->isPost())

    if($request->post('code'))

    if($this->check_verify($request->post('code')))

    $message= '验证成功';

    else

    $message= '验证错误';

    else

    $message= '没有输入验证码';

    照以上做没有任何问题


参考技术A 可以在腾讯智慧安全页面申请使用腾讯御点
然后使用这个软件上面的修复漏洞功能
直接对电脑的漏洞进行检测和修复就可以了

以上是关于thinkphp3.2验证码怎么写的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp3.2的Validate怎么写啊

thinkphp 验证码怎么输出

ThinkPHP3.2 点击看不清刷新验证码

php--------ThinkPHP3.2验证码使用

thinkphp3.2 验证码的生成和校验,以及遇到的一些问题

Thinkphp3.2.3验证码无法显示解决方法