【问题标题】:How to validate list of UUID's AND return UUID Version?如何验证 UUID 列表并返回 UUID 版本?
【发布时间】:2017-08-29 16:09:57
【问题描述】:

我需要验证 UUID 列表以及确定版本。例如,使用 https://www.beautifyconverter.com/uuid-validator.php 并输入 25CCCA6F-1568-473E-BFED-EC08C31532C6 我可以确定它是有效的,并且是版本 4。我从 https://www.snip2code.com/Snippet/12614/Validating-a-uuid4-with-Python-How to determine if a string is a valid v4 UUID? 看到 UUID 模块可以在一次,或测试特定版本,但不确定 UUID 是否会测试所有 4 个版本并返回该版本。

【问题讨论】:

  • 你已经处理了最困难的部分。现在去了解如何在 python 中循环,并在为 uuid 验证函数找到真正的布尔值后从循环中中断。

标签: python uuid


【解决方案1】:

这是我将如何迭代潜在 UUID 列表并返回包含版本号(如果有效)或 None 否则的并行列表。

特别注意UUID 构造函数接受任何版本的UUID 字符串。如果字符串有效,可以查询.version成员确定版本。

from uuid import UUID


def version_uuid(uuid):
    try:
        return UUID(uuid).version
    except ValueError:
        return None

def version_list(l):
    return [version_uuid(uuid) for uuid in l]

if __name__=="__main__":
    uuids = (
        '0d14fbaa-8cd6-11e7-b2ed-28d244cd6e76',
        '6fa459ea-ee8a-3ca4-894e-db77e160355e',
        '16583cd3-8361-4fe6-a345-e1f546b86b74',
        '886313e1-3b8a-5372-9b90-0c9aee199e5d',
        '0d14fbaa-8cd6-11e7-b2ed-28d244cd6e7',
        '6fa459ea-ee8a-3ca4-894e-db77e160355',
        '16583cd3-8361-4fe6-a345-e1f546b86b7',
        '886313e1-3b8a-5372-9b90-0c9aee199e5',
        '481A8DE5-F0D1-E211-B425-E41F134196DA',
    )
    assert version_list(uuids) == [1,3,4,5,None,None,None,None,14]

【讨论】:

  • 很有趣,但有一个转折点。我正在检查的列表包括一些似乎不符合任何格式的 UUID:481A8DE5-F0D1-E211-B425-E41F134196DA。注意通常版本所在位置的“E”。
  • 我的代码(正确,我断言)返回 14 作为该 UUID 的版本号。你期望什么行为?
  • 当我尝试您的解决方案时,空白返回您的示例数据,当我将 481A8DE5-F0D1-E211-B425-E41F134196DA 添加到列表时,回溯失败。 Python 2.7.13 64 位
【解决方案2】:
def validate_uuid4(uuid_string):

    try:
        val = UUID(uuid_string, version=4)
    except ValueError:
        # If it's a value error, then the string 
        # is not a valid hex code for a UUID.
        return False

    return True

你可以使用上面的函数来检查你的 uuid 字符串列表,它会告诉你列表中的特定字符串是否是有效的版本 4 uuid

【讨论】:

  • 这将传递版本不为 4 的有效 UUID。例如,UUID(x, version=4) 将 x 成功转换为 UUIDv4,即使 x 是 UUIDv1 字符串。
  • 如果 uuid_string 的版本不是 4,这将不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
相关资源
最近更新 更多