随机生成6位会员号

 /*
    * 根据请求生成会员号
    * 利用microtime()截取后六位生成会员号Number,时间戳后六位不会重复,
    * 如果存在则重新生成在查询,直到唯一为止,并写入user表与number表
    * */
   function createSingleNumber()
   {
       $token   =   I('token');
       $this->auth($token);
       try{
           $user_id = get_user_id(USER_ACCOUNT); //获取用户user_id
           $userData    =   D('User')->where(['id'=>$user_id])->find();
           if(!empty($userData['number']))
               throw new \Exception('你的爱豆号为'.$userData['number'],1);

           //否则继续进行生成与验证
           $randNumber  = microtime();
           $userNumber  =   rand(11,99).substr($randNumber,-4);
           $check   =   $this->unique($userNumber);//计算是几连号,return 2 为2连号


           if($check >= 3)
               //检查是否3位相连,如果是,则生成任意随机数代替
               $userNumber  =   mt_rand(111111,999999);

           $doubleCheck  =  D('User')->where(['number'=>$userNumber])->find();
           if(!empty($doubleCheck))
               //再次生成爱豆号,直到不重复
               throw new \Exception('再次请求生成',2018);
           exit(json_encode(['code'=>200,'data'=>$userNumber,'message'=>'ok']));
       }catch(\Exception $e){
           $result['code'] = $e->getCode();
           $result['message'] = $e->getMessage();
           exit(json_encode($result));
       }

   }


    function unique($num){
       //使用正则检测连号数量
        preg_match_all("/(\d)\\1+/",$num,$match);
        rsort($match[0],SORT_NUMERIC);
        return strlen($match[0][0])?:1;
    }
复制代码

你可能感兴趣的:(随机生成6位会员号)