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,所以只能是 89ab 中的一个。

M:目前 UUID 标准只有 5 个版本,所以只会是 12345

规范的 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,取值是 89ab 中的一个。

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。

原文地址:https://blog.csdn.net/wilson1068/article/details/88044603

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


现在给大家介绍一下如何查询MAC的生产日期,希望对你查询MAC的生产日期操作有所帮助。
1、点击【编辑虚拟机设置】,转到【CD/DVD (SATA)】,选中【使用 ISO 映像文件】复选框,点击【浏览】,找到已经准备好的 MacOS Ventura 镜像;4、客户机操作系统下,选择【Apple Mac OS X】,版本选择大家需要的【macOS版本】,再点击【下一步】;7、完成【抹掉】后,左上角关闭该窗口,返回上一界面,选择【Install macOS】,正式进入苹果系统安装流程;1、打开 Vmware Workstation,然后点击左上角的【文件】,打开的下拉项中,选择【新建虚拟机】;
注意:用哪个版本的 Python 运行安装脚本,pip 就被关联到哪个版本。一般情况 pip 对应的是 Python 2.7,pip3 对应的是 Python 3.x。pip介绍:pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。1.打开后输入python3确定电脑上是否已安装python3,如果输入python是查看mac上的自带版本。如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。如下图是已经成功安装pip的状态。
Mac 安装nvm
Mac(M1)安装VMware虚拟机及Linux系统
Mac 如何安装 Telnet,mac安装telnet命令
是不是对键盘输入厌烦了?那你可以试试语音输入。 你可以按照下面的步骤打开Mac的语音输入功能。 以 macOS Catalina 为例: Step 1. 点击屏幕左上角的图标,点击【系统偏好设置】。
1.clean my Mac x 2.Cleaner One Pro 3.App Cleaner
按caps lock键。 CapsLock键,短按切换中英文,长按切换大小写。
windows: 1.PowerToys 2.不用软件进行分屏 Windows 10技巧1:窗口1/4分屏 - Acer Community 介绍说明 从Win7时代开始,微软便引入了屏幕热区概念,即
https://zhuanlan.zhihu.com/p/111111684 下载地址: https://www.smoothscroll.net/mac/
https://support.apple.com/zh-cn/guide/imac/apd2e7352054/mac 浏览:24 英寸 iMac 24 英寸 iMac 比以往更个
在Mac自带的中文输入法中,“反斜杠”键(“\”)就是顿号。
1.系统偏好设置。 2和3步如下图: 注意:在设置后,启用capslock大写的时候,需要长按capslock键。
Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别。即时渲染使得你写Markdown就想是写Word文档一样流畅自如,不像其他编辑器的有编辑栏和显示栏。简洁美观实时预览扩展语法跨平台免费Typora现在收费,但你仍然可以在官方网站上找到历史版本。虽然新版本仍然值得收费,但免费版本仍然可以使用。httpshttpshttpshttpshttpshttpshttpshttps。......
Mac M1安装Centos7
连接为官方下载链接, 直接复制MD5可迅雷下载亲测可用, 和付费版使用体验无差别.1. Windows 64bithttps://download.typora.io/windows/typora-setup-x64-0.11.18.exeMD5:12F96372BEE2951ACF5627EA28F8A389**2. Window 32bit **https://download.typora.io/windows/typora-setup-ia32-0.11.18.exeMD5:F5036
ubuntu22.04 、系统安装、win双系统、Ubuntu分区、Ubuntu优化、美化gnome tweaks,扩展、macos、搜狗输入法、wps字体、微信安装、navicat15、java开发环境搭建、idea 输入法问题处理、双系统问题、github慢等等。史上最全保姆级Ubuntu使用教程
MAC怎么获取文件路径 MAC获取文件路径的四种方法