【问题标题】:Is it possible to generate duplicate UUIDs in the same millisecond?是否可以在同一毫秒内生成重复的 UUID?
【发布时间】:2013-06-24 20:17:06
【问题描述】:

是否可以一个接一个地创建两个重复的 UUID?我不熟悉 UUID 的生成方式,但我猜如果您在同一毫秒内从同一个 MAC 地址创建了两个单独的 UUID,那么它们将完全相同。这是真的吗?

我想我是在同时问两个问题。我很想知道使用哪些参数来生成随机 UUID。我猜它不仅仅是时间戳和 MAC 地址。

【问题讨论】:

    标签: uuid


    【解决方案1】:

    在 Python UUID 包中,它采用时间戳并为 UUIDv1 生成一个随机数 random.randrange(1<<14L),因此您将采用纳秒时间戳加上从 116384 的随机数,所以...我的猜测是可能,但可能性很小。

    如果您担心这是一个问题,您总是有 UUIDv3UUIDv4 和我的选择 UUIDv5

    【讨论】:

    • 肯定不能生成随机数,只能生成伪随机数?如果一个随机数是由另一个随机数生成的,那么生成那个的随机数是什么?
    • 我的回答意味着它需要纳秒时间戳并且还会生成一个随机数。复制具有相同 id 的两个 UUID 的唯一方法,如果它们是在完全相同的时间创建的,则意味着您必须在该纳秒内两次获得相同的随机数。
    • 哦,好吧,不知道它使用的是纳秒而不是毫秒。谢谢 - 但这仍然让我想知道如何计算随机数(不是 UUID)。当你说 and also generates a random number - 我只是好奇 that 是如何生成的。
    • 在 Python UUID 包中,uuid.uuid1 -> UUIDv1nodeclock_seq 作为参数。如果未给出clock_seq,它会生成一个随机数clock_seq = random.randrange(1<<14L),即1..16384,然后生成clock_seq_low = clock_seq & 0xffLclock_seq_hi_variant = (clock_seq >> 8L) & 0x3fL 以传递给UUID 生成器。 If 'clock_seq' is given, it is used as the sequence number; otherwise a random 14-bit sequence number is chosen.
    • 请注意,在使用uuid.uuid1 时,您通常只需调用uuid.uuid(),因为nodeclock_seq 是可选的。
    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多