Immortal
V2EX  ›  问与答

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

  •  
  •   Immortal · Nov 3, 2016 · 3072 views
    This topic created in 3651 days ago, the information mentioned may be changed or developed.

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

    11 replies  •  2016-11-05 15:40:48 +08:00
    bdbai
    bdbai
    Nov 3, 2016 via Android
    1
    用 GUID 吧
    0915240
    0915240
    Nov 3, 2016 via Android
    2
    只是 6 位自增?不限制的话 snowflake 吧
    fuxkcsdn
    fuxkcsdn
    Nov 3, 2016
    3
    redis
    set unique:id 99999
    incr unique:id
    Immortal
    Immortal
    OP
    Nov 3, 2016
    4
    @0915240 这个今天找资料的时候也查到了 谢谢
    Immortal
    Immortal
    OP
    Nov 3, 2016
    5
    @fuxkcsdn 想自增然后无序的 之前是打乱后全部放到 redis
    ericls
    ericls
    Nov 3, 2016 via iPhone
    6
    hashids 不过位数不固定
    billlee
    billlee
    Nov 3, 2016
    7
    你是希望 ID 看起来是无序,用来做用户 ID 或订单 ID 之类的,但自己实际上能保证分配的 ID 不重复吗?
    其实你需要的是块加密算法,当然并不会有现成的这么短的块加密算法,你可以自己用替换、置换、线性变换自己组一套出来(大误
    Insomnia
    Insomnia
    Nov 4, 2016
    8
    刚看到的一篇文章,希望对你有用。

    http://huoding.com/2016/11/03/552
    leopku
    leopku
    Nov 4, 2016
    9
    k-ordered id 生成算法 (snowflake) +1
    Immortal
    Immortal
    OP
    Nov 5, 2016
    10
    @billlee 主要需求的确是你说的这样 看起来是个无序 但是是唯一的 ID 作为用户的 ID
    Immortal
    Immortal
    OP
    Nov 5, 2016
    11
    @ericls
    @leopku
    @Insomnia
    谢谢各位 你们说的我都会一个个查下资料
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4357 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 03:56 · PVG 11:56 · LAX 19:56 · JFK 22:56
    ♥ Do have faith in what you're doing.