zoukankan      html  css  js  c++  java
  • 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 ThinkVerify();
            $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 ThinkVerify();  
        return $verify->check($code, $id);  
    }

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

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

    验证码1:
    $Verify->entry(1);
    验证码1:
    $Verify->entry(2);
  • 相关阅读:
    LeetCode OJ String to Integer (atoi) 字符串转数字
    HDU 1005 Number Sequence(AC代码)
    HDU 1004 Let the Balloon Rise(AC代码)
    HDU 1003 Max Sum(AC代码)
    012 Integer to Roman 整数转换成罗马数字
    011 Container With Most Water 盛最多水的容器
    010 Regular Expression Matching 正则表达式匹配
    007 Reverse Integer 旋转整数
    006 ZigZag Conversion
    005 Longest Palindromic Substring 最长回文子串
  • 原文地址:https://www.cnblogs.com/rendd/p/6952090.html
Copyright © 2011-2022 走看看