Laravel 生成指定位数的邀请码

更新日期: 2019-03-15 阅读次数: 3572 字数: 173 分类: Laravel

需求场景

为注册会员生成独有的邀请码,每个会员一个,不能重复。为了方便传播,邀请码的位数暂定为 5 位,由数字和大写字母组成。

为了防止邀请码重复冲突,我在会员表的邀请码字段上加了个唯一索引。

但是,邀请码是在微信支付成功的回调逻辑里触发的,5位的邀请码,还是存在冲突的可能,可以加了个不断重试的机制。

实现代码

/**
 * 生成邀请码
 */
public function gen_invite_code() {
    $chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $res = "";

    while (true) {
        for ($i = 0; $i < 5; $i++) {
            $res .= $chars[mt_rand(0, strlen($chars)-1)];
        }
        $user = User::where('invite_code', $res)->first();
        if (!$user) {
            break;
        }
    }

    return $res;
}

谈笑风生

fyh

这个每次循环都要User::where()从数据库判断是否存在,性能很差的吧

大象腿

这种概率极低 :)

爱评论不评论

近期节日

2020年09月22日 世界无车日
2020年09月22日 秋分
2020年09月23日 国际聋人节
2020年09月27日 世界旅游日
2020年10月01日 国庆节
2020年10月01日 中秋节
2020年10月04日 世界动物日
2020年10月08日 寒露
2020年10月09日 世界邮政日
2020年10月10日 辛亥革命纪念日
2020年10月13日 中国少年先锋队诞辰日
2020年10月14日 世界标准日
查看更多节日