求一个能生成5位唯一邀请码的算法
发布于 9 年前 作者 qinyang912 22601 次浏览 最后一次编辑是 8 年前 来自 问答

大大们,能不能支个招呢?

16 回复

uuid 里截一下?

@leapon 不考虑重复?

存数据库咯,重复了再生成一个咯。

或者打乱的 Base62,然后一直加一咯。

搞一堆36进制的池子,然后随机从池子里取。

来一个 无脑 的 0.0 : Snip20150827_164.png

@i5ting 是欠考虑。那就取个基数,每次递增吧

说下场景吧

@alsotang 类似于uber的分享码,每个用户注册都会生成一个。用 @xadillax 的第二个方案,把用户的唯一id映射到打乱的base62

@qinyang912 如果 base62 的方案可以接受的话,还是用 base36 吧。base62有大小写问题

用部分时间戳数字倒排,然后一个计数器 精确到一定时间段,比如每小时不多于一万人注册,产生的数字就没有问题

@alsotang 反正差不多意思啦。

如果想再乱序点的话,加长一点,后面几位留作当前时间戳。并且 Base36 的字典可以完全打乱,类似于:

"1zdai9eu3cj2hf8wbp4go5yq7m6vrksnxlt"

不限长度的话UUID最好. 非要限制5位的话大概要36^5个占位槽, 可以分段生成, 拿一个队列保存, 用一个取一个,用完放回去, 如果是单线程模型这么做很简单.

前几天刚看到github上有个库,是能够用于游戏的,号称能日生成百万不重复

回到顶部