我在Django中有一个使用uuid的模型:
uuid = models.CharField(max_length=100, default=uuid.uuid1)
问题是,当我一个接一个地生成2个对象时,我得到了这个:
933e35c4-df1c-11e6-8a53-ace01055799e
然后:
933e35c5-df1c-11e6-8a53-ace01055799e
据我所知,每个uuid是随机生成的,但碰撞的概率非常低,当我得到几乎相同的这两个uuid时,它们是如何精确生成的? (它只在第一个区块的最后一个数字上有所不同),这有多大可能?有更安全的方法吗?
问题是,我有一组客户,每个客户通过电子邮件获得一个独特的uuid,如果他们可以只改变一个角色并转到另一个客户的uuid那将是一个问题。
答案 0 :(得分:1)
您正在使用uuid.uuid1
,正如文档所述:
从主机ID,序列号和当前时间生成UUID。
您应该使用uuid.uuid4
生成随机 uuid。
答案 1 :(得分:1)
它使用uuid.uuid1
来执行此操作(这是您的默认值)。请参阅docs:
从主机ID,序列号和当前时间生成UUID。 如果未给出node,则使用getnode()来获取硬件 地址。如果给出clock_seq,则将其用作序列号; 否则选择随机的14位序列号。
还有其他算法,可能uuid4
正是您要找的。 p>