核心类

<?php

namespace app\lib;

class InviteCode
{
    const KEY = 'abcdefghjkmnpqrstuvwxyz123456789';
    const NUM = 32;

    //传递用户id生成唯一邀请码
    public static function enCode(int $user_id)
    {
        $code = ''; // 邀请码
        while ($user_id > 0) { // 转进制
            $mod = $user_id % self::NUM; // 求模

            $user_id = ($user_id - $mod) / self::NUM;
            $code = self::KEY[$mod] . $code;
        }
        $code = str_pad($code, 4, '0', STR_PAD_LEFT); // 不足用0补充
        return $code;
    }


    //邀请码获取用户id
    public static function deCode($code)
    {
        if (strrpos($code, '0') !== false)
            $code = substr($code, strrpos($code, '0') + 1);
        $len = strlen($code);
        $code = strrev($code);
        $user_id = 0;
        for ($i = 0; $i < $len; $i++)
            $user_id += strpos(self::KEY, $code[$i]) * pow(self::NUM, $i);
        return $user_id;
    }

}

测试结果

20w 数据是没有重复的,并且邀请码解 用户id 也是正确的

注意事项

1.KEY不能出现数字0
2.KEY不能有重复的字符串
3.KEY长度不限制,但是最好别太短
4.KEY别加 i o l 这些字母,因为容易混淆用户

点赞(0)

评论列表 共有 0 评论

暂无评论

微信服务号

微信客服

淘宝店铺

support@elephdev.com

发表
评论
Go
顶部