FreezeJ' Blog

python中的UUID

2023-07-31

python提供了几种uuid的生成方式用于生成 RFC 4122 所定义的第 1, 3, 4 和 5 版 UUID。

官方文档:https://docs.python.org/zh-cn/3.7/library/uuid.html

uuid1:根据主机 ID、序列号和当前时间生成一个 UUID。 如果没有给出 node,则使用 getnode() 来获取硬件地址。

与机器相关,所以生成的值有部分是相同的,可能会损害隐私,不建议使用:

>>> uuid.uuid1()
UUID('d4b453e8-2f43-11ee-a0cb-1831bfd0635f')
>>> uuid.uuid1()
UUID('d5a4afd2-2f43-11ee-a0cb-1831bfd0635f')
>>> uuid.uuid1()
UUID('d5cf54e4-2f43-11ee-a0cb-1831bfd0635f')
>>> uuid.uuid1()
UUID('d5f39cb4-2f43-11ee-a0cb-1831bfd0635f')
>>> uuid.uuid1()
UUID('d816fa72-2f43-11ee-a0cb-1831bfd0635f')
>>> uuid.uuid1()
UUID('d83d8a5c-2f43-11ee-a0cb-1831bfd0635f')

uuid3:根据命名空间标识符(UUID)和名称(字符串)的MD5哈希值生成一个UUID。
uuid5:根据命名空间标识符(UUID)和名称(字符串)的SHA-1哈希值生成一个UUID。

# 不同的NAMESPACE:
>>> uuid.NAMESPACE_DNS
UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')
>>> uuid.NAMESPACE_URL
UUID('6ba7b811-9dad-11d1-80b4-00c04fd430c8')
>>> uuid.NAMESPACE_OID
UUID('6ba7b812-9dad-11d1-80b4-00c04fd430c8')
>>> uuid.NAMESPACE_X500
UUID('6ba7b814-9dad-11d1-80b4-00c04fd430c8')

# uuid3
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

# uuid5
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org') 
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

uuid4:生成一个随机的UUID。(常用

>>> uuid.uuid4()
UUID('96fee003-1d49-4bdc-a71b-752f09579da3')
>>> uuid.uuid4()
UUID('fba092b7-fe81-4bb0-b5bb-34bdeaed15ab')
>>> uuid.uuid4()
UUID('6df63cc6-6fce-494b-ab5c-2426e69bf61b')
>>> str(uuid.uuid4())
'cda73fa9-7117-42e4-bba5-8846d773a5aa'

# 去除中间的横线
>>> uuid.uuid4().hex
'406c2903193a4864b3305a675326e9b1'