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

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

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

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

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

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