如何检查 python 中的版本 4 UUID?

How to check version 4 UUIDs in python?

我必须检查版本 4 UUID,它作为证书中的通用名称存在。 built function中是否有python可以用来检查证书中的UUID prsesnt是否正确并检查其版本?如果不是如何比较版本 4 UUID

正如 Giacomo Alzetta 所说,UUID 可以与任何其他对象进行比较,使用 ==UUID 构造函数规范化字符串,因此 UUID 是否为非标准形式无关紧要。

import uuid
uuid.UUID('302a4299-736e-4ef3-84fc-a9f400e84b24') == uuid.UUID('302a4299-736e-4ef3-84fc-a9f400e84b24')
# => True
uuid.UUID('302a4299736e4ef384fca9f400e84b24') == uuid.UUID('{302a4299-736e-4ef3-84fc-a9f400e84b24}')
# => True

字符串比较将比较文字字符串,它可能符合也可能不符合 UUID:

'302a4299-736e-4ef3-84fc-a9f400e84b24' == '302a4299-736e-4ef3-84fc-a9f400e84b24'
# => True
'302a4299736e4ef384fca9f400e84b24' == '{302a4299-736e-4ef3-84fc-a9f400e84b24}'
# => False

您可以使用 str(x) 将 UUID 转换为字符串,或使用 uuid.UUID(x) 将字符串转换为 UUID 对象,如上所示。请注意,您无法将字符串与 UUID 进行比较,只能将字符串与字符串以及 UUID 与 UUID 进行比较。

如果 UUID 字符串是否为规范形式确实让您感到困扰,您可以尝试将其转换为 UUID 对象并返回字符串(这将为您提供规范形式),并将其与原文:

x = '302a4299-736e-4ef3-84fc-a9f400e84b24'
str(uuid.UUID(x)) == x
# => True
x = '302a4299736e4ef384fca9f400e84b24'
str(uuid.UUID(x)) == x
# => False

但是,您真的不应该关心 UUID 字符串是否规范 - 只要它可以被识别为 UUID 字符串就足够了。如果不能...

uuid.UUID("foo")
# => ValueError: badly formed hexadecimal UUID string

如果您需要知道 UUID 的版本,它就在 UUID API:

uuid.UUID('302a4299-736e-4ef3-84fc-a9f400e84b24').version
# => 4