thinkphp3.2写APP接口之图片验证码实现思路

来源:互联网 发布:windows访问samba 编辑:程序博客网 时间:2024/05/29 15:14

一、在写给APP图片验证码时有两种思路

1、用php原生代码写一个,这个有很多现成的代码,不再赘述;2、使用thinkphp3.2的图片验证码,这里主要讲的就是这种;

二、生成验证码

    public function verifyImg() {        //让APP端传递一串字符串用于校验使用        $sendVerifyName= I('get.verifyName');        //根据你定义的规则对str校验,这里忽略        //...        //生成缓存名,用于保存验证码        //根据你的规则生成,比如md5加盐处理        $sendVerifyName = md5($sendVerifyName . '12345');        //实例化验证码对象        $Verify = new \Think\Verify();        //================你的验证码参数start==================        $Verify->fontSize = 20;        $Verify->length   = 4;        $Verify->codeSet = '0123456789';        $Verify->imageW = 150;        $Verify->imageH = 50;        $Verify->expire = 600;        $Verify->fontttf = '5.ttf';        //================你的验证码参数end==================        //生成验证码        $Verify->entry();        //后续处理,用于验证,这里可以封装成函数操作        //最好不要改下面的第二个和第三个参数,不然就需要修改\Think\Verify()原文件        $key = substr(md5($Verify->seKey), 5, 8);        $str = substr(md5($Verify->seKey), 8, 10);        $key = md5($key . $str);        S($sendVerifyName, session($key), 180);    }

三、校验验证码

比如说在注册时验证

public function register(){        //一些参数和逻辑处理主要使用verifyName、validity这两个参数,其他参数及校验不需要        $requestData = array();        $requestData['tel'] = I('post.tel');        $requestData['password'] = I('post.password');        $requestData['confirmPassword'] = I('post.confirmPassword');        $requestData['verifyName'] = I('post.verifyName');        $requestData['validity'] = I('post.validity');        $requestData['sign'] = I('post.sign');        foreach($requestData as $k => $v){            if(mb_strlen($v, 'utf-8') == 0){                my_json_encode(10002, '参数不能为空');            }        }        if(!check_sign($requestData)){            my_json_encode(10003, '验签失败');        }        //根据规则得到验证码的缓存名        $sendVerifyName = md5($requestData['verifyName'] . '12345');        //=============生成加密后的验证码start==============        $Verify = new \Think\Verify();        $key = substr(md5($Verify->seKey), 5, 8);        $str = substr(md5($requestData['validity']), 8, 10);        //这个就是加密后的验证码,用它与S($sendVerifyName)比较即可        $key = md5($key . $str);        //=============生成加密后的验证码end==============        //后续处理,判断缓存是否存在,不存在即验证码过期,存在则比较        //...}
原创粉丝点击