Как проверить UUID версии 4 в python?

Я должен проверить UUID версии 4, который является общим именем в сертификате. Имеется ли какой-либо встроенный Python для проверки правильности UUID prsesnt в сертификате или нет и проверки его версии? Если нет, то как сравнить UUID версии 4

1 ответ

Как говорит Джакомо Альзетта, 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

Вы можете конвертировать UUID в строки, используя str(x)или строки в объекты UUID, используя uuid.UUID(x) как показано выше. Обратите внимание, что вы не можете сравнивать строки с 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
Другие вопросы по тегам