2017-04-11 11:25:30 6243次浏览 5条回答 2 悬赏 100 金钱

现在有个需求 就是用户注册后 要给他分配一个code,这个code是6位纯数字而且唯一,我写了如下方法getRefereeId(),发现出现了重复的情况,请问大家 有没有更好的方法??

public function getRefereeId(){
        $code = rand(100000, 999999);
        $userinfor = '******'; //这里是查询code是否已经存在
        if(!empty($userinfor)){
            $this->getRefereeId(); //存在  就再运行
        }
        return $code;
    }
补充于 2017-04-11 14:13

好像改成下面就不会出现重复了。。。。

public function getRefereeId(){
        $code = rand(100000, 999999);
        $userinfor = '******'; //这里是查询code是否已经存在
        if(!empty($userinfor)){
            return $this->getRefereeId(); //存在  就再运行
        }else{
            return $code;
        }   
    }
  • 回答于 2017-04-11 11:39 举报

    使用自增字段

    10 条回复
    回复于 2017-04-11 11:46 回复

    这个好像听过 不过id位数不一样,有一位的也有4位的,如何保证6位唯一

    回复于 2017-04-11 11:52 回复

    从100000开始不行?

    回复于 2017-04-11 11:52 回复

    直接起始id为100000就可以了

    回复于 2017-04-11 12:01 回复

    现在用户已经好几千了 ID是1开始的

    回复于 2017-04-11 12:45 回复

    你不是要分配code么,这code干嘛非要跟id一样。你自己分配出来的code不也是和id不一样吗?

    回复于 2017-04-11 12:50 回复

    哦哦 明白你的意思了 你是说自增字段是其他的字段 我一直以为是id呢

    回复于 2017-04-11 12:55 回复

    你当前需求就是新开一个code字段。已有用户存在,比起改造id字段,还是新加一个更实在。

    回复于 2017-04-11 13:03 回复

    好的 谢了

    回复于 2017-04-11 13:09 回复

    MySQL数据库表一张表好像只能一个字段是自增的,现在有了id,再建个code自增会报错的

    回复于 2017-04-11 13:18 回复

    数据库不自增,你可以自己写算法+1;或者可以拆到另一个表中,记录用户code。解决方法很多的。

  • 回答于 2017-04-11 11:53 举报

    使用自增字段,设置自增值从100000开始

    2 条回复
    回复于 2017-04-11 12:00 回复

    问题是现在用户已经好几千了 ID是1开始的

    回复于 2017-04-11 14:49 回复

    直接现在所有用户 id 加100000 就解决了。

  • 回答于 2017-04-12 17:46 举报

    赞成,楼上的。
    设置唯一字段,再在原来基础上的都加上10000 就可以了。

  • 回答于 2017-04-13 10:03 举报

    补充一点,用纯数字的话只能存储 999999-99999 个数据,不一定满足数据的增长,如果加密(以用户id加密,简单算md5,从第8位开始,取8位)成6位(数字+字母)组成,可以存储62^6, 自己可以权衡下

  • 回答于 2017-04-13 23:50 举报

    1、一次性生成999999长度的数组,数组的键为6位纯数字的字符串;
    2、新建一个code表,用来存上面生成的数组;
    3、把上面的数组批量插入表(入表成功后,表应该有999999条记录)
    4、用户注册后,从code表随机提取一条记录,取出后就删除该记录或标记为已经使用
    思路是预先生成随机code库

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
xyf90314
副总裁

xyf90314

注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
  • 粉丝21
  • 金钱5257
  • 威望40
  • 积分6607

热门问题