zoukankan      html  css  js  c++  java
  • 项目记事【其他】:关于 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 值,但还是用了第一种方式匹配。

  • 相关阅读:
    dubbo-Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
    sqlmap基本命令
    Read-Only Tables 只读表
    Oracle Set操作
    OGG-00664
    Oracle 附加日志(supplemental log)
    Oracle 数字转为字符串 to_char()
    Oracle单引号转义符
    OGG开启DDL,约束信息和索引信息会同步过去吗
    OGG-01161
  • 原文地址:https://www.cnblogs.com/jing-an-feng-shao/p/14505470.html
Copyright © 2011-2022 走看看