欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

生成一万个不重复的六位验证码并写入数据库

程序员文章站 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);
	}

搞定!!!