【问题标题】:Generating random number as user identifier生成随机数作为用户标识符
【发布时间】:2016-06-27 05:26:10
【问题描述】:

我一直在查看 Aadhar (an Indian equivalent to Social Security Number) 的唯一 ID (UID) 生成

它们生成一个 11 位随机数。我还在开发一个应用程序,我需要向用户提供唯一 ID,该 ID 在整个生命周期内都是唯一有效的(预计用户数量为 40-600 亿)。

在网上查找类似方案时,我发现最简单的方法是随机生成每个数字并连接。所以我的问题是:

  • 随机生成每个数字的正确方法是生成此类 ID
  • 是否有任何成熟的技术可以解决同样的问题?
  • 在设计这样的方案时需要注意哪些事项?我问这个,因为我觉得随机数生成方案是否不能确保唯一性。假设可能在给定的时间范围内),那么每一代都需要验证。即使在这种情况下,我相信该方案应该能够进行调整,以确保第二个生成的数字是唯一的或来自不同的分布。

【问题讨论】:

    标签: database random uniqueidentifier


    【解决方案1】:

    我将简单地将 1000 亿个数字存储在数据库表中,从 000 000 000 001 到 999 999 999 999。删除 000...001 或 666 等极端数字。然后在另一列中生成一个随机数(这将是排序顺序)。如果您需要一个新号码,您可以在交易中使用它,这样您就可以确保一个号码只发给一个人。

    我不会即时生成号码...您应该始终检查号码是否已经存在。最后,生成现有数字的机会很高。所以生成过程总是会越来越长。

    【讨论】:

    • 谢谢。我想这需要我在缓存中维护一个副本,并确保在应用程序关闭/崩溃或有多个服务器的情况下将更改写回?
    【解决方案2】:

    不要重新发明自行车。看看UUID 取决于您要使用的语言,应该有一些实现。

    【讨论】:

    • 但是 UUID 并不是作为 ID 提供给用户的好数字。他们可能需要记住它,在表格中提及它等。这使得 UUID 很麻烦。
    • 您没有说用户应该记住 ID。 uuid 允许您轻松地为每条新记录分配新 id,而无需查看数据库或任何存储。如果您需要用户操作的东西,那么我建议使用以 32 为基数的序列号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多