博客
关于我
项目记事【其他】:关于 UUID 的格式
阅读量:426 次
发布时间:2019-03-06

本文共 1057 字,大约阅读时间需要 3 分钟。

先说一下事情的背景:

我们产品对外有两个接口,一个是基于 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 值,但还是用了第一种方式匹配。

 

转载地址:http://payyz.baihongyu.com/

你可能感兴趣的文章
LeetCode75 颜色分类 (三路快排C++实现与应用)
查看>>
bcolz的新操作
查看>>
delete对象时会自动调用类的析构函数
查看>>
POD类型
查看>>
const与常量,傻傻分不清楚~
查看>>
Head First设计模式——迭代器模式
查看>>
MongoDB版本及存储引擎区别
查看>>
cmp命令
查看>>
Linux 磁盘管理(df fu fdisk mkfs mount)
查看>>
jQuery的事件绑定与触发 - 学习笔记
查看>>
Linux上TCP的几个内核参数调优
查看>>
记一次讲故事机器人的开发-我有故事,让机器人来读
查看>>
seo 回忆录百度基本概念(一)
查看>>
kettle 执行 kjb 临时文件夹 /tmp permission denied 问题
查看>>
netcore中使用session
查看>>
Android 开发学习进程0.25 自定义控件
查看>>
多媒体文件格式全解说(下)--图片
查看>>
淘宝WAP版小BUG分析
查看>>
【Maven】POM基本概念
查看>>
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
查看>>