在同一毫秒内生成重复的UUID是否可能?

4

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

我想我在一个问题中问了两个问题。我非常想知道用于生成随机UUID的参数是什么。我猜测它不仅仅是时间戳和MAC地址。

1个回答

1
在Python UUID包中,对于UUIDv1,它会获取时间戳并生成一个随机数random.randrange(1<<14L),因此您将获取纳秒级时间戳以及从116384的随机数,所以...我猜这是可能的,但极不可能发生。
如果您担心这是个问题,您总是可以选择使用UUIDv3UUIDv4和我的选择UUIDv5

2
当然你不能生成一个真正的随机数,只能生成伪随机数。如果一个随机数是由另一个随机数生成的,那么又是什么生成了那个随机数呢? - Mike Baxter
2
我的回答意味着它获取纳秒时间戳并生成一个随机数。如果两个UUID具有相同的ID,则唯一重复的方式是它们在完全相同的时间创建,这意味着您必须在那个纳秒内两次获得相同的随机数。 - bnlucas
哦,好的,我不知道它使用纳秒而不是毫秒。谢谢 - 但这仍然让我想知道随机数(而不是UUID)是如何计算的。当你说“还生成一个随机数”时 - 我只是好奇那个怎么生成的。 - Mike Baxter
1
在Python的UUID包中,uuid.uuid1 -> UUIDv1接受nodeclock_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生成器。如果提供了'clock_seq',则它将用作序列号;否则将选择一个随机的14位序列号。 - bnlucas
请注意,在使用 uuid.uuid1 时,通常只需调用 uuid.uuid(),因为 nodeclock_seq 是可选的。 - bnlucas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接