具体情况就是想根据 mysql 的自增 id(从 1 开始或者其他数字开始自增都可以接受),生成一定位数的唯一数字当作我一个应用分配给用户的号码.
现在的需求是 6 位数,不随机. 之前我的做法是直接把所有 6 位数打乱放在一个地方(比如 redis 的队列),然后用到的时候取
想问下有没有直接一些的算法 不需要预生成,直接能根据 id 算出来
1
bdbai 2016-11-03 20:04:41 +08:00 via Android
用 GUID 吧
|
2
0915240 2016-11-03 20:33:26 +08:00 via Android
只是 6 位自增?不限制的话 snowflake 吧
|
3
fuxkcsdn 2016-11-03 21:33:45 +08:00
redis
set unique:id 99999 incr unique:id |
6
ericls 2016-11-03 23:07:19 +08:00 via iPhone
hashids 不过位数不固定
|
7
billlee 2016-11-03 23:44:29 +08:00
你是希望 ID 看起来是无序,用来做用户 ID 或订单 ID 之类的,但自己实际上能保证分配的 ID 不重复吗?
其实你需要的是块加密算法,当然并不会有现成的这么短的块加密算法,你可以自己用替换、置换、线性变换自己组一套出来(大误 |
8
Insomnia 2016-11-04 04:09:17 +08:00
|
9
leopku 2016-11-04 09:16:59 +08:00
k-ordered id 生成算法 (snowflake) +1
|