• 项目记事【其他】:关于 UUID 的格式


    先说一下事情的背景:

    我们产品对外有两个接口,一个是基于 JSON 报文的 REST,另一个是基于 XML 报文的 CAI3G,现在要新加一个参数,yaml 文件里面的定义如下:

    XXX:
    description: "XXX"
    type: string
    format: uuid

    基于 Security 的原因,具体的参数名就不写了。

    这里用到了一个很特殊的东西叫,format: uuid,而在这个 yaml 文件其他地方又找不到 uuid 的格式定义。

    关于 UUID(Universally unique identifier)通用唯一识别码,简而言之,这是一个 128-bit 的数值,通过一定的算法来保证其唯一性。

    具体的定义,推荐去看 Wiki 的介绍,或者 RFC4122 标准:

    说回正题,yaml 的定义给了,转到 XML schema 的定义,为了限定其范围,我们需要给一个正则表达式,那么一个合规的 UUID 的格式应该是怎样的呢?

    这就要说回生成 UUID 的算法了,至今为止,UUID 一共有 5 个 标准版本。

    • Version1,是根据你的当前时间戳和你的节点ID,通常是你电脑的 Mac 地址生成的
    • Version2,是根据一个标识符,通常是你的 groupId 或是 userId 生成的
    • Version3 和 Version5,是根据你的 namespace 标识符的哈希值 或者你 name 的哈希值生成的
    • Version4,是根据一个随机值,或者是伪随机值生成的

    这里有个生成 UUID 的链接,和匹配正则表达式的网站,大家可以上去玩一下:

    不同的版本/算法,生成的 UUID 的格式也不相同,但是总体的格式是一定的,是一个 8-4-4-4-12 的16进制数字:

    [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}

    但是当你确认版本后,这个范围有时候能够进一步缩小,例如 Version4 中,固定第13位是版本号4,第17位是 [8,9,a,b] 之一:

    [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}

    最后从通用性考虑,虽然在网上查到,这个参数根据 3GPP 规范,明确是 Version4 的 UUID 值,但还是用了第一种方式匹配。

  • 相关阅读:
    rh
    re模块
    粘包现象
    子类调用父类方法
    北大医院条码
    戴德金-连续性和无理数-第1页
    数学名词
    核心英语笔记,含记忆术mnemonics
    python笔记
    收集的句子
  • 原文地址:https://www.cnblogs.com/jing-an-feng-shao/p/14505470.html
Copyright © 2020-2023  润新知