CNode

求一个能生成5位唯一邀请码的算法

问答
Qqinyang912发布于11 年前最后回复11 年前16 回复24175 浏览0 收藏

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

查看回复

回复 (16)

X
XadillaX#1·11 年前

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

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

R
rekey#2·11 年前

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

H
highsea#4·11 年前

来一个 无脑 的 0.0 : Snip20150827_164.png

L
leapon#5·11 年前
引用 i5ting@leapon 不考虑重复?

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

A
alsotang#6·11 年前

说下场景吧

Q
qinyang912#7·11 年前
引用 alsotang说下场景吧

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

A
alsotang#8·11 年前
R
russj#9·11 年前

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

A
abbshr#10·11 年前

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

K
klausgao#11·11 年前

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

L
leapon#12·11 年前

uuid 里截一下?

I
i5ting#13·11 年前
引用 leaponuuid 里截一下?

@leapon 不考虑重复?

X
XadillaX#14·11 年前
引用 alsotang@qinyang912 如果 base62 的方案可以接受的话,还是用 base36 吧。base62有大小写问题

@alsotang 反正差不多意思啦。

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

"1zdai9eu3cj2hf8wbp4go5yq7m6vrksnxlt"

K
klausgao#15·11 年前

https://github.com/dylang/shortid 找到了,就是这货

参与回复
登录后即可参与回复。登录