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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式