背景:
邀请是一种常见的裂变方式,这里生成全局唯一的6位邀请码。
思路:
由 0-9 加上24个大写字母(去掉容易混淆的IO)组成的6位邀请码最多可以6^34种组合, 大概在15亿。
- 对34重复取余,将余数作为字符数组的下标追加到邀请码的最后
- 超过6位去除多余的部分, 不足6位用字符数组的某一位补充
class InvitationCodeService
CODE_SIZE = 6
# num一般为member_user_id
def self.generate num
str = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"
res = ""
while num > 0
tmp = num % 34
num = num / 34
res << str[tmp]
end
if res.size > CODE_SIZE
res[0..5]
elsif res.size == CODE_SIZE
res
else
str[0] * (CODE_SIZE - res.size) << res
end
end
end