问个生成唯一 id 的算法问题

2016-11-03 20:01:21 +08:00
 Immortal

具体情况就是想根据 mysql 的自增 id(从 1 开始或者其他数字开始自增都可以接受),生成一定位数的唯一数字当作我一个应用分配给用户的号码.
现在的需求是 6 位数,不随机. 之前我的做法是直接把所有 6 位数打乱放在一个地方(比如 redis 的队列),然后用到的时候取
想问下有没有直接一些的算法 不需要预生成,直接能根据 id 算出来

2335 次点击
所在节点    问与答
11 条回复
bdbai
2016-11-03 20:04:41 +08:00
用 GUID 吧
0915240
2016-11-03 20:33:26 +08:00
只是 6 位自增?不限制的话 snowflake 吧
fuxkcsdn
2016-11-03 21:33:45 +08:00
redis
set unique:id 99999
incr unique:id
Immortal
2016-11-03 23:00:54 +08:00
@0915240 这个今天找资料的时候也查到了 谢谢
Immortal
2016-11-03 23:01:18 +08:00
@fuxkcsdn 想自增然后无序的 之前是打乱后全部放到 redis
ericls
2016-11-03 23:07:19 +08:00
hashids 不过位数不固定
billlee
2016-11-03 23:44:29 +08:00
你是希望 ID 看起来是无序,用来做用户 ID 或订单 ID 之类的,但自己实际上能保证分配的 ID 不重复吗?
其实你需要的是块加密算法,当然并不会有现成的这么短的块加密算法,你可以自己用替换、置换、线性变换自己组一套出来(大误
Insomnia
2016-11-04 04:09:17 +08:00
刚看到的一篇文章,希望对你有用。

http://huoding.com/2016/11/03/552
leopku
2016-11-04 09:16:59 +08:00
k-ordered id 生成算法 (snowflake) +1
Immortal
2016-11-05 15:40:20 +08:00
@billlee 主要需求的确是你说的这样 看起来是个无序 但是是唯一的 ID 作为用户的 ID
Immortal
2016-11-05 15:40:48 +08:00
@ericls
@leopku
@Insomnia
谢谢各位 你们说的我都会一个个查下资料

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/317839

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX