Laravel 生成指定位数的邀请码

更新日期: 2019-03-15 阅读次数: 7494 字数: 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;
}

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式

谈笑风生

fyh

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

大象腿

这种概率极低 :)