UUID - 通用唯一识别码
UUID - 通用唯一识别码
通用唯一识别码(英语:Universally Unique Identifier,UUID),是用于计算机体系中以识别信息数目的一个 128 位标识符,还有相关的术语:全局唯一标识符(GUID)。
根据标准方法生成,不依赖中央机构的注册和分配,UUID 具有唯一性,这与其他大多数编号方案不同。重复 UUID 码概率接近零,可以忽略不计。
其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。
定义
UUID 是由一组 32 位数的 16 进制数字所构成,是故 UUID 理论上的总数为 1632=212816^{32} = 2^{128}1632=2128 ,约等于 3.4×10383.4 \times 10^{38}3.4×1038 。也就是说若每纳秒产生 1 兆个 UUID,要花 100 亿年才会将所有 UUID 用完。
UUID 的标准型式包含 32 个 16 进制数字,以连字号分为五段,形式为 8-4-4-4-12 的 32 个字符。示例: 376f844e-4df4-4743-8d91-60148b76b9de
UUID 数据规模对比
分类 | 数据量 | 单位 | 数字 |
---|---|---|---|
一张电报 | 100 B | B | 1 |
一个笑话 | 1 KB | KB | 1,024 |
一页书籍 | 10 KB | ||
一张低分辨率照片 | 100 KB | ||
一部微型小说 | 1 MB | MB | 1,048,576 |
一次胸透视 | 10 MB | ||
一章百科全书 | 50 MB | ||
一部广播级质量电影 | 1 GB | GB | 1,073,741,824 |
一卷大型数字磁带 | 100 GB | ||
五万棵树制成的纸 | 1 T8 | TB | 1,099,511,627,776 |
一套大型存储系统 | 50 TB | ||
NASA EOS 对地观测系统三年数据 | 1 PB | PB | 1,125,899,906,842,624 |
所有印刷材料 | 200 PB | ||
全人类说过的所有的话 | 5 EB | EB | 1,152,921,504,606,846,976 |
2020 年全球预计数据量 | 45 ZB | ZB | 1,180,591,620,717,411,303,424 |
1 YB | YB | 1,208,925,819,614,629,174,706,176 | |
1 NB | NB | 1,237,940,039,285,380,274,899,124,224 | |
1 DB | DB | 1,267,650,600,228,229,401,496,703,205,376 | |
GUID | 340,282,366,920,938,463,463,374,607,431,768,211,456 |
格式
在其规范的文本表示中,UUID 的 16 个 8 位字节表示为 32 个十六进制(基数 16)数字,显示在由连字符分隔 ‘-’ 的五个组中,“8-4-4-4-12” 总共 36 个字符(32 个字母数字字符和 4 个连字符)。例如:
b8b6564e-2011-42aa-828f-bcc52443c4d4
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
四位数字 M 表示 UUID 版本,数字 N 的一至三个最高有效位表示 UUID 变体。在例子中,M 是 4 而且 N 是 8 (10xx),这意味着此 UUID 是 “变体 1”、“版本 4” UUID;
N:变体 0 (0xxx),变体 1 (10xx),变体 2 (11xx),变体 3 (111x)。目前使用 变体 1,所以只能是 8,9,a,b 中的一个。
M:目前 UUID 标准只有 5 个版本,所以只会是 1,2,3,4,5
规范的 8-4-4-4-12
格式字符串基于 UUID 的 16 个字节(128 bit)的 “记录布局”:
UUID record layout
Name | Length (bytes) | Length (hex digits) | Contents |
---|---|---|---|
time_low
|
4 | 8 | 整数:低位 32 bits 时间 |
time_mid
|
2 | 4 | 整数:中间位 16 bits 时间 |
version time_hi
|
2 | 4 | 最高有效位中的 4 bits “版本”,后面是高 12 bits 的时间 |
res clock_seq_hi clock_seq_low
|
2 | 4 | 最高有效位为 1-3 bits “变体”,后跟 13-15 bits 时钟序列 |
node
|
6 | 12 | 48 bits 节点 ID |
UUID 变体(Variants)
为了能兼容过去的 UUID,以及应对未来的变化,因此有了变体(Variants)这一概念。目前已知的变体有如下几种:
variant 0:0xxx。为了向后兼容预留。
variant 1:10xx。当前正在使用的。
variant 2:11xx。为早期微软 GUID 预留。
variant 3:111x。为将来扩展预留。目前暂未使用。
因此,可以认为,目前正在使用的 UUID 都是 variant1,取值是 8,9,a,b 中的一个。
UUID 版本(Version)
version 1:0001。基于时间和 MAC 地址。由于使用了 MAC 地址,因此能够确保唯一性,但是同时也暴露了 MAC 地址,私密性不够好。
version 2:0010。DCE 安全的 UUID。该版本在规范中并没有仔细说明,因此并没有具体的实现。
version 3:0011。基于名字空间 (MD5)。用户指定一个名字空间和一个字符串,通过 MD5 散列,生成 UUID。字符串本身需要是唯一的。
version 4:0100。基于随机数。虽然是基于随机数,但是重复的可能性可以忽略不计,因此该版本也是被经常使用的版本。
version 5:0101。基于名字空间 (SHA1)。跟 Version 3 类似,但是散列函数编程了 SHA1。
UUID 版本 1 (时间 + MAC 地址)
60 bit 时间戳(time_low + time_mid + time_hi
) + 48 bit MAC地址(node
) + 13/14 bit 时钟序列(clock_seq_hi
clock_seq_low
)。
60 bit 时间戳:以 1582 年 10 月 15 日午夜起协调世界时(UTC)以来的 100 纳秒间隔数,最大日期在公元 3400 年左右(RFC 4122,只用了 59 bit),所以这个 60 bit 时间戳是有符号的(最高位表示正负)。但是某些软件会将其视为无符号,最大日期为公元 5236 年。
48 bit MAC地址:来自生成 UUID 的计算机。但是依赖于计算机设备,且暴露了 MAC 地址不安全。
13/14 bit 时钟序列:扩展了时间戳,尽可能避免短时间内生成两组相同 UUID 的风险(主要是网络多设备生成 UUID 碰撞),与 60 bit 时间戳能够组成 74 bit 的时间信息。
UUID 版本 2 (时间 + MAC 地址,DCE 安全版本)
RFC 4122 保留了 “DCE security” UUID 的 “版本 2” ; 但它没有提供任何细节。因此,许多 UUID 实现省略了 “版本 2” 。
这里不做介绍。
UUID 版本 3 (名字空间 MD5 散列)
用户指定一个名字空间和一个字符串,通过 MD5 散列生成 UUID。
这个版本的 UUID 保证了:相同名字空间中不同名字生成的 UUID 的唯一性;不同名字空间中的 UUID 的唯一性;相同名字空间中相同名字的 UUID 重复生成是相同的。
MD5 算法能够生成 128 bit 的数据,然后将其中的 4 bit 改为固定的版本号(version),1-3 bit 改为变体(Variants)。
UUID 版本 4 (随机)
4 bit 为固定的版本号(version),1-3 bit 改为变体(Variants),其它为随机生成。
理论上各个设备生成的随机数,重复的可能性很低。
但是由于一些伪随机数发生器缺少必要的熵来产生足够的伪随机数。如果不能很好的保证随机性,建议采用版本 3 或版本 5 生成 UUID。
UUID 版本 5 (名字空间 SHA1 散列)
与版本 3 类似,用户指定一个名字空间和一个字符串,通过 SHA1 生成 UUID。(其中使用的字符串必须唯一)
只是 SHA1 生成 160 bit 的散列,需要截断为 128 bit。
UUID - 通用唯一识别码相关推荐
- java生成UUID通用唯一识别码
一.UUID概述 UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Founda ...
- UUID 通用唯一识别码(Universally Unique Identifier)介绍
UUID 简介 UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分.其目的,是让 ...
- uuid通用唯一识别码
https://www.npmjs.com/package/uuid 1.安装 npm install uuid 2.使用 import { v4 as uuid } from 'uuid'; uui ...
- golang生成UUID通用唯一识别码
大多数推荐github上现成的包 https://github.com/satori/go.uuid package mainimport("fmt""github.co ...
- 通用唯一识别码UUID
UUID是通用唯一识别码(Universally Unique Identifier)的缩写.UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指 ...
- 通用唯一识别码(uuid):吃透id随便搞
Index v4 高64位 mostSigBits 低64位 leastSigBits v3 高64位 mostSigBits 低64位 leastSigBits v1 高64位 mostSigBit ...
- 云客Drupal源码分析之通用唯一识别码UUID
先来看一个问题:假设一个网络系统每秒钟需要保存数十万来自用户提交的信息,并分配一个id给每条信息用于以后唯一标识它,那么怎么产生这个id呢?不能重复又要足够快以支持高并发,有这么强大的单台服务器吗?即 ...
- 用于分布式系统的ID?——UUID(Universally Unique Identifier,通用唯一识别码)
用于分布式系统的ID?--UUID(Universally Unique Identifier,通用唯一识别码) UUID 是 通用唯一识别码(Universally Unique Identifie ...
- _02_使用UUID获取唯一标识
[文章标题:_02_使用UUID获取唯一标识] [202012-29 03:39:00] 需求: 很多时候我们会需要用到 生成不重复的唯一标识的 的功能,如数据库表中的主键等. 实现: 使用U ...
最新文章
- 【快乐水题】1688. 比赛中的配对次数
- 浏览器预连接性能测试
- 全连接神经网络_【模型解读】从“局部连接”回到“全连接”的Non-Local神经网络...
- 收藏 | 李飞飞经典CS231N《卷积神经网络视觉识别》第十一讲!
- 点击高德地图标注没法弹窗_如何在地图上标注我的店铺
- for循环之性能优化
- ReactNative组件导出
- python入门经典100例-Python3经典100例(含习题答案) DOC 清晰版
- 毕设题目:Matlab智能算法VRP(车辆路径规划)
- 修改apache2根目录
- 误删除vmdk文件恢复办法
- RecyclerView或是ListView(列表)点击某个条目保持选中【非常巧妙】
- 2022年场(厂)内专用机动车辆安全管理考试模拟100题模拟考试平台操作
- 在Ubuntu上安装MySQL8.0数据库并使用Navicat远程访问
- 【学习笔记】行人异常行为检测的综述
- 拼多多商家想做好推广一定不能这么做!
- 【人工智能】全球老外正跟你同步修仙!AI垂直文本翻译助力国产网文出海,规模将达300亿!...
- 成功解决笔记本重装系统后没有无线网
- 葡萄城让低代码之光照进软件厂商的心田
- [安全攻防进阶篇] 二.如何学好逆向分析、逆向路线推荐及吕布传游戏逆向案例