ThinkPHP 实现验证码渲染、校验、点击刷新

一、在控制器中写方法,生成验证码,代码如下:

复制代码
/**
    * 验证码生成
    * 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 新增
    **/
    public function verify_c(){
        $Verify = new \Think\Verify();
        $Verify->fontSize = 18;
        $Verify->length   = 4;
        $Verify->useNoise = false;
        $Verify->codeSet = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';
        $Verify->imageW = 130;
        $Verify->imageH = 50;
        //$Verify->expire = 600;
        $Verify->entry();
    }
复制代码

  可以根据自己的需求配置参数

 

二、在页面渲染,生成的验证码就是一张图片,静态页面代码如下:

<p>
    <input type="text" name="verify" class="captcha-text" placeholder="请输入验证码">
    <i class="yanzheng"><img alt="验证码" id="captcha-container" src="{:ROOT}index.php?m=Admin&c=Verify&a=verify_c" title="点击刷新"></i>
</p>

  img的src就是生成验证码的地址

三、点击验证码图片刷新,生成新的验证码,就是通过js修改img的src属性,后面加一个参数random。js代码如下:

复制代码
<script>
    /*验证码图片点击刷新*/
    var captcha_img = $('#captcha-container'); 
    var verifyimg = captcha_img.attr("src");
    captcha_img.attr('title', '点击刷新');
    captcha_img.click(function(){  
        if( verifyimg.indexOf('?')>0){
            $(this).attr("src", verifyimg+'&random='+Math.random());  
        }else{  
            $(this).attr("src", verifyimg.replace(/\?.*$/,'')+'?'+Math.random());  
        }  
    });
</script>
复制代码

四、验证码校验,表单提交后获取到用户输入的验证码,

// 检查验证码  
$verify = I('post.verify');
if(!check_verify($verify)){
    $this->error("验证码错误",$this->site_url,9);
}

然后将check_verify()函数放到公共的php中,方便整个项目用,代码如下:

//验证码检查
function check_verify($code, $id = ""){  
    $verify = new \Think\Verify();  
    return $verify->check($code, $id);  
}

$id是生成验证码的id如果只有一个验证码就不需要了。

补充:生成多个验证码时,需要给每个验证码设置id,即调用$Verify->entry()时,在括号中传入id值。

验证码1:
$Verify->entry(1);
验证码1:
$Verify->entry(2);
posted @   菜乌  阅读(802)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示