生成一万个不重复的六位验证码并写入数据库
程序员文章站
2022-06-02 13:43:22
...
背景
今天遇到一个接口,第三方网站需要我们提供一个授权接口,用户输入验证码后才能进行免费业务活动。为了不让用户重复分享验证码,需要在本地库里生成一万个验证码,进入第三方网站参与活动需要提供验证码(这个验证码会在用户关注公众号后自动回复给用户)
分析
本来想用户微信授权登录,但是第三方网站提出用这种验证码的格式;数据库就简单要三个字段:id自增,code六位数字,state默认为0,分配给用户后自动更新为1,用户验证后更新为2(主要是分配后的不再重复分配,验证过的不能再用)
生成验证码并写入数据库
public function random(){
//建一个10000到999999的数组
$numbers = range (100000,999999);
//shuffle 将数组顺序随即打乱
shuffle ($numbers);
//array_slice 取该数组中的某一段
$num=6000;
//取数组的前$NUM个做为新数组
$result = array_slice($numbers,0,$num);
return $result;
}
public function daoru(){
$ran = $this->random();
//循环导入验证码到数据库
foreach($ran as $k=>$v){
$data['code'] = $v;
M("random")->data($data)->add();
}
echo "导入成功";
}
分配后验证接口
public function api(){
$sec = I("post.sec",0,'intval');
$tok = I("post.tok",0,'intval');
if(intval($sec) == 654){
$num = M("Random")->where(array('code'=>$tok,'state'=>1))->count();
if($num == 1){
//修改状态为2
M("Random")->where('code='.$tok)->setInc('state',1);
$da['code'] = 1;
$da['msg'] = "授权成功";
}else{
$da['code'] = 0;
$da['msg'] = "授权失败";
}
}else{
$da['code'] = 0;
$da['msg'] = "无权访问";
}
echo json_encode($da);
}
搞定!!!
下一篇: Merge
推荐阅读