首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

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

  •  
  •   Immortal · 2016-11-03 20:01:21 +08:00 · 1504 次点击
    这是一个创建于 684 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    11 回复  |  直到 2016-11-05 15:40:48 +08:00
        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
        4
    Immortal   2016-11-03 23:00:54 +08:00
    @0915240 这个今天找资料的时候也查到了 谢谢
        5
    Immortal   2016-11-03 23:01:18 +08:00
    @fuxkcsdn 想自增然后无序的 之前是打乱后全部放到 redis
        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
    刚看到的一篇文章,希望对你有用。

    http://huoding.com/2016/11/03/552
        9
    leopku   2016-11-04 09:16:59 +08:00
    k-ordered id 生成算法 (snowflake) +1
        10
    Immortal   2016-11-05 15:40:20 +08:00
    @billlee 主要需求的确是你说的这样 看起来是个无序 但是是唯一的 ID 作为用户的 ID
        11
    Immortal   2016-11-05 15:40:48 +08:00
    @ericls
    @leopku
    @Insomnia
    谢谢各位 你们说的我都会一个个查下资料
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1760 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 21ms · UTC 16:03 · PVG 00:03 · LAX 09:03 · JFK 12:03
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1