UUID

UUID(Universally Unique Identifier)也称为GUID(Globally Unique Identifier),是一个128比特位的数字。它用于唯一的标示一段信息。

UUID的唯一性保障机制与其它一般的编号方案不同,它的唯一性不依赖于一个中心化的注册机构,也不需要在多个UUID生成器之间做协调。

理论上,UUID是有可能重复的。但是在实际合适的应用场景中,其重复几率低到可以忽略。

 

UUID的历史

UUID最初被应用于NCS(Apollo Network Computing System)。

之后又被应用到OSF(Open Software Foundation)的DCE(Distributed Computing Environment)。

DCE UUID 的设计是基于 NCS UUID 的。而NCS UUID的设计则受到了在 Domain/OS 中广泛应用的64比特位唯一标识符的启发。

后来微软Windows平台中的GUID采用了DCE的设计。

RFC 4122 为UUID注册了一个URN命名空间,并概述了UUID早期的规范。

RFC 4122被公布为IETF标准时,ITU 也基于先前的标准和RFC 4122的早期规范对UUID作了标准化。

 

 

UUID的格式

UUID的文本表达式含有32个十六进制数,它们被分为5个部分,用连字符(-)拼接。如:

123e4567-e89b-12d3-a456-426655440000

 

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

M的大小是4个比特位,它表示UUID的版本。N的前1到3个比特位表示UUID的变量。

 

“8-4-4-4-12”UUID文本表达式中的字段含义



注:

这些字段的划分方式与version1和version2的UUID相符合,它们都是基于时间的UUID。

但是8-4-4-4-12这个表达形式是所有版本的UUID所通用的(即使其构建方式不同)。

 

在不同应用场景中,UUID的具体展现形式会稍有不同,但主体内容大致相同。如:

{123e4567-e89b-12d3-a456-426655440000}

urn:uuid:123e4567-e89b-12d3-a456-426655440000

 

UUID的版本

不同版本的UUID,其适用场景也不同。

 

version1:基于时间和节点ID。节点ID通常是MAC地址

 

version2:基于一个标识符、时间和节点ID。标识符可以是某个组或用户的ID

与version1类似,但该版本是DCE安全的

 

version3 和 version5:基于某个特定的hash算法对一个命名空间和名字进行hash

version3使用的是MD5算法,version5使用的是SHA1算法。

 

这两个版本的UUID:

命名空间和名字都相同时生成的UUID是相同的;

但只要其中一项或两项都不同则生成的UUID也不同。

 

RFC 4122 建议这两个版本中选择version5,且不建议version3或version5的UUID作为安全凭证。

 

version4:基于一个随机数(或伪随机数)

 

  • MySQL UUID()方法采用的是version1
  • Java中的 java.util.UUID 类提供了实现version3和version4(伪随机数)UUID的方法
    • version3:nameUUIDFromBytes
    • version4:randomUUID

 

其它

Wikipedia:《UUID

知乎:《UUID是如何保证唯一性的?

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值