Laravel 生成指定位数的邀请码

发布时间: 2019-03-15 12:29:40 作者: 大象笔记

需求场景

为注册会员生成独有的邀请码,每个会员一个,不能重复。为了方便传播,邀请码的位数暂定为 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;
}
我是一名山东烟台的开发者,联系作者