【问题标题】:UUID in java to make int [duplicate]java中的UUID使int [重复]
【发布时间】:2018-09-29 20:58:51
【问题描述】:

我需要为包含 6 位数字的学生票制作 ID。例如,000004 或 123456,它必须是唯一的,所以不要重复。我想使用 UUID 制作它,有点我不明白如何制作限制。

【问题讨论】:

  • 在列表中生成所有百万数字。如果您希望它们以随机顺序排列,请随机播放。然后从列表中取出前 N 项。
  • 为什么需要UUID,顺便说一下大于6位,可以从100000开始依次生成。
  • 看到这个问题,UUID 不适合你想要的。 uuid 的唯一性部分取决于它的长度。 stackoverflow.com/questions/292965/what-is-a-uuid

标签: java uuid


【解决方案1】:

随机数,1 到 999,999

查看问题,How to generate random integers within a specific range in Java?

int min = 1 ;
int max = 999_999 ;
int randomNum = ThreadLocalRandom.current().nextInt( min , max + 1 );

在这么小的一百万范围内,您会经常发生碰撞(重复)。

为避免重复,您必须收集所有使用过的号码,并在每次尝试生成标识符时搜索该集合。您必须以线程安全的方式执行此操作。

推荐用于您的目的。

不实用

随机的六位数字不足以在任何重要的上下文中用作标识符。这就是为什么员工徽章和类似用例的数字按序列(000001、000002 等)完成的原因之一。

UUID

如果您想要一个真正通用的唯一标识符,请使用Universally Unique Identifier

作为一个 128 位的值,你的值范围比你的百万大得多。 UUID 的Version 1 type 消除了任何实际发生冲突的可能性。这就是它被发明和标准化的原因。

对于少数情况,例如您的百万学生,即使是大部分随机的版本 4 也足够了。这是UUID.randomUUID生成的版本。

【讨论】:

    猜你喜欢
    • 2018-06-14
    • 2018-08-15
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2020-11-08
    • 2021-04-16
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多