Как проверить 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