深入理解 UUID:结构、变体与版本差异全解析

本文发布于 2025年10月23日,阅读 4 次,点赞 0 次,归类于 后端技术
深入理解 UUID:结构、变体与版本差异全解析

博客:https://www.emanjusaka.com

博客园:https://www.cnblogs.com/emanjusaka

公众号:emanjusaka的编程栈

by emanjusaka from https://www.emanjusaka.com/archives/uuid-structure-variant-version 彼岸花开可奈何

本文为原创文章,可能会更新知识点以及修正文中的一些错误,全文转载请保留原文地址,避免产生因未即时修正导致的误导。

UUID,全称Universally Unique Identifier,即通用唯一识别码,是一种在分布式系统中为对象分配唯一标识符的标准方法。

可能的UUID数量为16^32,即2^128或约3.4x10^38(这是一个很大的数字!)。

一个标准的 UUID 可以分解为这几个部分:

时间戳低位-时间戳中位-时间戳高位和版本-变体和时钟序列-节点标识符

UUID 有不同的版本,下面我们来详细解释下不同版本之间的区别和特点。

38-uuid.drawio

UUID 的字符串格式与字节对应关系

38-1

UUID 的标准字符串格式是 8-4-4-4-12 共 36 个字符(包含 4 个连字符),对应 16 个字节(128 位)。

每个十六进制字符对应 4 个比特,2 个十六进制字符组成 1 个字节。

变体:

变体通过 UUID 的第 8 位(从 0 开始计数)来标识。

  • 变体 0

    最高位为 0,形式为:0xxxxxxx

    早期由 NCS(Network Computing System)定义的 UUID 格式,现在很少使用

  • 变体 1

    最高两位为 10,形式为:10xxxxxx

    当前最常用的 UUID 格式,由 RFC 4122 定义,包括我们常见的版本 1 到 5

  • 变体 2

    最高三位为 110,形式为:110xxxxx

    微软定义的 UUID 格式,主要用于 Windows 系统

  • 变体 3

    最高三位为 111,形式为:111xxxxx

    为未来扩展预留,目前未使用

Version 1

基于时间戳版本。由时间戳、时钟序列、MAC 地址组成。

可反推出生成时间和设备信息(存在隐私风险)。

唯一性强,同一设备上不会重复。

Version 2

DCE 安全 UUID

类似于版本 1,但将时间戳低 32 位替换为本地安全标识符(UID/GID)。

Version 3

基于命名空间名称和名字的 MD5 散列结果。

相同命名空间 + 名称会生成相同 UUID

MD5 哈希存在碰撞风险(安全性较低)

Version 4

完全基于随机或伪随机数据生成,不依赖于时间戳和硬件地址。

浏览器和 nodejs 内置了 V4 的生成函数。

Version 5

与版本 3 类似,但使用 SHA-1 算法替换 MD5 进行散列计算。

相同命名空间 + 名称生成相同 UUID

SHA-1 安全性高于 MD5,碰撞风险极低

总结

现在我们常用的是版本 4,它使用随机数据生成,比较简单和安全。基本上不会重复(重复的概率很小)。

版本 1 和版本 2 会暴露 MAC 地址有安全风险。

需要从名称生成固定 UUID 时,优先选择版本 5。

本篇完
下一篇: 【开发问题】GeoServer 跨域问题解决方案