Skip to content

UUID 生成器与解析器

免费 UUID 生成器,支持 v1/v4/v5/v7 全版本即时生成。解析验证任意 UUID,批量生成最多 50 个。无需注册,100% 浏览器本地运行。

无追踪 浏览器中运行 免费
所有 UUID 均在浏览器本地生成,不会传输或存储任何数据。

什么是 UUID?

UUID(通用唯一标识符)是由 RFC 9562(前身为 RFC 4122)标准化的 128 位标识符。UUID 以 32 个十六进制数字书写,采用标准的 8-4-4-4-12 格式,例如 `550e8400-e29b-41d4-a716-446655440000`。它们被设计为全局唯一,无需中央机构或系统间的协调。

目前广泛使用的 UUID 有五个版本。版本 1(v1)编码当前时间戳和生成机器的 MAC 地址,使每个 UUID 在时间和空间上都是唯一的。版本 3(v3)和版本 5(v5)是确定性的——它们分别使用 MD5 或 SHA-1 对命名空间和名称进行哈希运算,相同输入始终产生相同的 UUID。版本 4(v4)最为常用:它用加密安全的随机数据填充 122 位,提供超过 5.3 x 10^36 种可能值。版本 7(v7)在 RFC 9562 中引入,将毫秒级 Unix 时间戳与随机数据结合,生成既唯一又可按创建时间自然排序的 UUID。

UUID 在分布式系统、数据库、API 以及任何需要无中心化协调即可获得唯一标识符的场景中都至关重要。它们消除了独立系统之间 ID 冲突的风险,使其非常适合微服务、事件溯源和多租户架构。

本工具使用 Web Crypto API 在您的浏览器中完整生成所有版本的 UUID。不会向任何服务器传输 UUID,确保完全的隐私性。您还可以解析和验证现有的 UUID,以检查其版本、变体和嵌入数据。

// Generate a UUID v4 using the Web Crypto API
const uuid = crypto.randomUUID();
console.log(uuid);
// → '550e8400-e29b-41d4-a716-446655440000'

// Manual v4 generation with crypto.getRandomValues()
function generateUUIDv4() {
  const bytes = new Uint8Array(16);
  crypto.getRandomValues(bytes);
  bytes[6] = (bytes[6] & 0x0f) | 0x40; // version 4
  bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant 10
  const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
  return `${hex.slice(0,8)}-${hex.slice(8,12)}-${hex.slice(12,16)}-${hex.slice(16,20)}-${hex.slice(20)}`;
}

核心功能

UUID v7 支持(RFC 9562)

生成最新的 UUID v7 格式,内嵌 Unix 时间戳,实现时间排序、数据库友好的标识符。少数支持 RFC 9562 标准的在线工具之一。

UUID 解析与验证

解析任意 UUID 以查看其版本、变体、时间戳(v1/v7)、时钟序列和节点信息。即时验证字符串是否为格式正确的 UUID。

多版本支持

支持生成五种版本的 UUID——v1(基于时间戳)、v3(MD5)、v4(随机)、v5(SHA-1)和 v7(时间排序随机)——全部符合 RFC 9562 标准。

批量生成

一次生成多达 50 个唯一的 UUID。每个 UUID 都使用完整的加密随机性或正确的版本特定编码独立生成。

多种输出格式

支持标准小写、大写、无连字符或大括号 {GUID} 格式输出 UUID——精确匹配您的系统或框架所需的格式。

加密级安全

使用 Web Crypto API(crypto.getRandomValues())生成真正的随机数——与现代浏览器和安全工具使用的标准相同。

100% 浏览器端处理

所有 UUID 均在浏览器本地生成。不向任何服务器发送数据——您生成的标识符完全私密。

UUID 版本对比

根据使用场景选择合适的 UUID 版本。

版本 生成方式 可排序 隐私性 适用场景
v1 时间戳 + MAC 地址 按创建时间排序 暴露 MAC 和时间 需要基于时间排序的遗留系统
v4 122 位加密随机数 完全匿名 通用场景——使用最广泛的版本
v5 SHA-1 哈希(命名空间 + 名称) 确定性、可复现 从已知输入生成一致 ID(URL、DNS)
v7 Unix 时间戳(毫秒)+ 随机数 按创建时间排序 仅暴露创建时间 现代数据库——可排序、索引友好(RFC 9562)

UUID 与其他 ID 格式对比

ULID

26 字符,Crockford Base32

与 UUID v7 类似可按字典序排序,但使用 Crockford Base32 编码(26 字符 vs 36)。UUID v7 现已是 IETF 标准化替代方案,工具支持更广泛。

nanoid

21 字符,URL 安全字符集

更短且 URL 安全,适合对紧凑性有要求的场景。非正式标准——缺少 UUID 拥有的原生数据库类型和跨平台库支持。

CUID2

可变长度,字母数字

为水平扩展设计,具备碰撞抗性。采用率低于 UUID,无原生数据库支持。建议使用 UUID v7 作为标准化的时间排序 ID。

UUID 版本示例

UUID v4(随机)

550e8400-e29b-41d4-a716-446655440000

最常用的版本。122 位加密随机数提供超过 5.3 x 10^36 种可能值——适用于几乎所有需要唯一性且无需协调的场景。

UUID v7(时间排序)

01906b5e-4a3e-7234-8f56-b8c12d4e5678

将 48 位毫秒级 Unix 时间戳与随机数据结合。UUID 按时间顺序排列,非常适合需要索引局部性的数据库主键。推荐在新项目中替代 v1 和 v4 使用。

UUID v1(基于时间戳)

6ba7b810-9dad-11d1-80b4-00c04fd430c8

编码 60 位时间戳和生成机器的 48 位 MAC 地址。保证时间和空间上的唯一性,但可能泄露硬件身份信息。在 RFC 9562 中已被 v6/v7 取代。

UUID v5(SHA-1 命名)

886313e1-3b8a-5372-9b90-0c9aee199e5d

通过使用 SHA-1 对 DNS 命名空间和名称 'python.org' 进行哈希生成的确定性 UUID。相同的命名空间和名称始终产生相同的 UUID,使 v5 非常适合可复现的标识符。

使用方法

  1. 1

    选择 UUID 版本

    从 v1(基于时间戳)、v3(MD5 命名)、v4(随机)、v5(SHA-1 命名)或 v7(时间排序随机)中选择。每个版本有不同用途——v4 是通用场景中最常用的版本。

  2. 2

    配置选项

    对于 v3 和 v5,选择命名空间(DNS、URL、OID、X.500 或自定义)并输入要哈希的名称。设置生成数量(1 到 50),选择输出格式:标准小写、大写、无连字符或大括号 {GUID}。

  3. 3

    生成 UUID

    点击「生成 UUID」按钮。每个 UUID 均使用 Web Crypto API(crypto.getRandomValues())创建,确保加密安全性。版本特定字段(如 v1/v7 的时间戳和 v3/v5 的哈希值)会被正确编码。

  4. 4

    复制使用

    点击任意 UUID 旁的「复制」按钮将其复制到剪贴板,或使用「复制全部」一次复制所有生成的 UUID。切换到「解析」标签页可分析现有 UUID 的版本、变体、时间戳和其他嵌入信息。

常见使用场景

数据库主键
使用 UUID v4 或 v7 作为唯一主键,无需数据库节点间的协调。UUID v7 尤其适合,因为其时间排序特性可提升 B-tree 索引性能。
分布式系统
在微服务、消息队列和事件溯源系统中独立生成唯一标识符。UUID 消除了对集中式 ID 生成服务的需求。
API 开发
为 RESTful 和 GraphQL API 创建唯一的请求 ID、关联 ID 和幂等键。UUID 使跨分布式服务边界的请求追踪变得简单。
会话与令牌管理
为认证流程生成唯一的会话标识符和临时令牌。UUID 提供足够的唯一性,防止大规模用户群中的会话冲突。
测试与开发
快速生成测试数据、模拟标识符和自动化测试所需的唯一固定 ID。批量生成功能便于填充开发数据库和测试套件。

技术细节

UUID 结构
UUID 为 128 位(16 字节),以 32 个十六进制字符按 8-4-4-4-12 格式表示。第 48–51 位(第 13 个 hex 数字)编码版本号。第 64–65 位编码变体字段,标识 UUID 的布局方式。其余位承载版本特定的有效载荷:时间戳、随机数据或哈希输出。
版本位
第 48–51 位(第 7 个字节的高半字节)编码 UUID 版本:0001 = v1(基于时间戳)、0011 = v3(MD5 命名)、0100 = v4(随机)、0101 = v5(SHA-1 命名)、0110 = v6(重排时间)、0111 = v7(Unix 纪元时间)。这四个位在生成时始终被显式设置。
变体字段
第 64–65 位(第 9 个字节的两个最高有效位)定义变体。模式 10x 表示 RFC 4122/9562 UUID(绝大多数)。模式 110 表示微软 GUID,采用混合字节序。模式 0xx 表示 NCS 向后兼容的 UUID(遗留)。模式 111 保留供将来使用。
RFC 9562 标准
RFC 9562 于 2024 年 5 月发布,取代 RFC 4122 成为权威的 UUID 规范。它正式引入了 UUID 版本 6、7 和 8。版本 6 重新排列 v1 字段以实现可排序性。版本 7 使用 48 位毫秒级 Unix 时间戳加随机数据,是新的基于时间的 UUID 的推荐版本。版本 8 为自定义的、实现特定的 UUID 提供格式。RFC 9562 还正式废弃了 v1,推荐使用 v6/v7 替代。

最佳实践

选择合适的版本
通用唯一标识符且不需要排序或确定性时使用 v4。数据库主键使用 v7——其时间排序特性显著提升索引性能。需要从名称派生确定性 ID 时使用 v5(优先选择 v5 而非 v3,因为哈希更强)。
数据库主键使用 UUID v7
UUID v7 的时间排序结构使 B-tree 插入保持顺序,与随机的 v4 UUID 相比减少约 90% 的索引碎片化。这意味着更快的写入、更小的索引和更好的缓存利用率。大多数现代数据库(PostgreSQL 17+、MySQL 8.0+)都有针对此模式优化的原生 UUID 支持。
切勿将 UUID 用作安全令牌
UUID 为唯一性而设计,非为保密性。UUID v1 会泄露生成时间戳和 MAC 地址。UUID v4 只有 122 位熵且结构可预测。对于安全令牌、API 密钥或会话密钥,请使用专用 CSPRNG 生成 128 或 256 位的纯随机数据,无需 UUID 结构的额外开销。
解析前先验证
在解析或存储之前,始终使用正则表达式验证 UUID 格式。在系统边界——API 端点、表单提交和数据库输入——拒绝格式错误的输入。这可以防止注入攻击、数据损坏以及无效标识符在系统中传播导致的难以调试的错误。

常见问题

什么是 UUID?
UUID(通用唯一标识符)是由 RFC 9562 标准化的 128 位标识符。它以 32 个十六进制数字书写,分为五组并用连字符分隔,遵循 8-4-4-4-12 格式——例如 550e8400-e29b-41d4-a716-446655440000。UUID 被设计为全局唯一,无需中央注册机构。GUID(全局唯一标识符)是微软对同一概念的称呼,使用完全相同的格式。UUID 在数据库、分布式系统、API 和软件开发中被广泛使用,适用于任何需要唯一标识符的场景。UUID v4 有超过 5.3 x 10^36 种可能值,生成重复的概率极其微小,可以安全地在不协调的系统间独立生成。
不同版本的 UUID 有什么区别?
UUID v1 编码 60 位时间戳和机器的 48 位 MAC 地址,保证时间和空间上的唯一性,但可能泄露硬件身份。UUID v3 使用 MD5 对命名空间和名称进行哈希运算,生成确定性的 UUID——相同输入始终产生相同输出。UUID v4 使用 128 位中的 122 位填充加密安全随机数据,是通用唯一标识符中最广泛使用的版本。UUID v5 与 v3 相同,但使用 SHA-1 替代 MD5,提供更强的哈希碰撞抗性。UUID v7 在 RFC 9562(2024 年 5 月)中引入,嵌入 48 位毫秒级 Unix 时间戳加上随机位,生成既唯一又可按创建时间自然排序的 UUID。版本选择取决于需求:v4 追求简单,v5 追求确定性,v7 追求可按时间排序的数据库主键。
应该使用 UUID v4 还是 v7?
UUID v4 是最流行的版本,也是出色的默认选择。它生成 122 位纯随机数据,无需配置,适用于所有场景。当您只需要一个唯一标识符且不关心排序时,使用 v4。UUID v7 在 UUID 用作数据库主键或需要按创建时间排序时是更好的选择。因为 v7 在最高有效位中嵌入毫秒精度的时间戳,v7 UUID 自然按时间顺序排列。这一特性显著提升了 B-tree 索引性能——插入总是追加到索引末尾而非随机位置,将页面分裂和碎片化减少多达 90%。2026 年的一般建议是:数据库主键使用 v7,其他场景使用 v4。两个版本在随机部分具有同等的唯一性和加密随机性。
UUID 碰撞的概率是多少?
UUID v4 有 122 个随机位,提供 2^122(约 5.3 x 10^36)种可能值。要达到 50% 的碰撞概率,您需要生成约 2.71 x 10^18 个 UUID——即 2.71 百亿亿个。换个角度理解,如果每秒生成十亿个 UUID,大约需要 86 年才能达到 50% 的碰撞概率。在更现实的生成速率下,碰撞概率微乎其微。例如,生成 1000 万个 UUID 的碰撞概率约为 10^22 分之一。实际上,硬件故障、软件缺陷和人为错误导致重复 ID 的可能性都比 UUID v4 碰撞高出数十亿倍。计算基于生日问题公式:p(n) 约等于 n^2 / (2 * 2^122)。
UUID 和 GUID 有什么区别?
UUID(通用唯一标识符)和 GUID(全局唯一标识符)本质上是同一事物。GUID 是微软创造的术语,主要在 Windows、.NET、COM 和 SQL Server 环境中使用。UUID 是 RFC 9562(及其前身 RFC 4122)定义的标准术语,在包括 Linux、Java、Python、PostgreSQL 和 Web 开发在内的大多数其他场景中使用。两者使用完全相同的 128 位格式,以 32 个十六进制数字按 8-4-4-4-12 模式显示。唯一的细微差别是微软工具有时以大写加大括号的形式显示 GUID,如 {550E8400-E29B-41D4-A716-446655440000},而 UUID 通常以小写且不带大括号显示。本工具通过输出格式选择器同时支持两种格式——选择大括号 {GUID} 格式即可获得微软风格的输出。
UUID v4 是加密安全的吗?
当使用 crypto.getRandomValues() 或等效的 CSPRNG(加密安全伪随机数生成器)生成时,UUID v4 包含 122 位加密安全随机数据。本工具使用 Web Crypto API,从操作系统的安全随机源获取熵。然而,UUID 不应被用作安全令牌、密码或加密密钥。虽然 122 位随机性使预测不可行,但 UUID 有可预测的结构——版本半字节(4)和变体位是固定且公开的。对于安全令牌,请使用专用 API(如 crypto.getRandomValues())生成完整的 128 或 256 位熵,或使用成熟的令牌格式如 JWT。UUID 适用于标识,不适用于安全。
如何验证 UUID 格式?
有效的 UUID 匹配正则表达式:^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$(不区分大小写)。此模式强制执行 8-4-4-4-12 十六进制格式,检查版本数字(第 15 位)在 1 到 7 之间,并验证变体半字节(第 20 位)以 8、9、a 或 b 开头(表示 RFC 4122/9562 变体)。在 JavaScript 中,可以这样验证:/^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(uuid)。大多数编程语言也有内置的 UUID 解析功能——例如 Python 的 uuid.UUID() 构造函数、Java 的 UUID.fromString() 和 Go 的 uuid.Parse()。始终在系统边界验证 UUID,防止注入攻击和数据损坏。
UUID 适合作为数据库主键吗?(性能、安全性与最佳版本)
适合,UUID 作为数据库主键既安全又越来越普遍,推荐使用 UUID v7。核心优势:(1) UUID 可在任何地方生成——客户端、服务端或边缘函数——无需往返数据库查询,支持离线优先和分布式架构。(2) UUID 防止枚举攻击,因为它们不是顺序整数。(3) UUID 简化跨系统数据合并,ID 永远不会冲突。UUID v7 是主键的最佳版本,其时间排序结构使 B-tree 索引保持顺序,与随机的 v4 UUID 相比,显著减少页面分裂、写放大和索引碎片化(可达 90%)。取舍方面:UUID 使用 16 字节,而整数为 4-8 字节,会增加索引的存储和内存开销。在 MySQL/InnoDB 中,主键即聚簇索引,随机 v4 UUID 会导致严重的性能下降——v7 确保插入始终追加到索引末尾,性能可媲美自增整数。PostgreSQL 以原生 uuid 类型高效存储 16 字节。对于大多数现代应用,全局唯一、无协调 ID 生成的好处远大于额外的存储成本。
什么是命名空间 UUID(v3/v5)?
命名空间 UUID 是一个预定义或自定义的 UUID,用作生成确定性 v3 和 v5 UUID 的作用域。RFC 4122 定义了四个标准命名空间 UUID:DNS(6ba7b810-9dad-11d1-80b4-00c04fd430c8)、URL(6ba7b811-9dad-11d1-80b4-00c04fd430c8)、OID(6ba7b812-9dad-11d1-80b4-00c04fd430c8)和 X.500 DN(6ba7b814-9dad-11d1-80b4-00c04fd430c8)。当您将命名空间 UUID 与名称字符串组合时,v3 或 v5 算法会对它们进行哈希运算以产生确定性的 UUID——相同的命名空间加名称始终产生相同的 UUID。这在需要从有意义的名称派生可复现标识符时非常有用。例如,用 DNS 命名空间对 'example.com' 进行哈希始终生成相同的 v5 UUID。您也可以使用任何有效的 UUID 作为自定义命名空间,为您的应用建立专属的确定性 ID 方案。
什么是 UUID nil 值?
nil UUID(也称为零 UUID)是 00000000-0000-0000-0000-000000000000——所有 128 位均为零。它在 RFC 9562 第 5.9 节中定义为一个特殊的 UUID,可以表示值的缺失,类似于编程语言中的 null 或 None。nil UUID 可用作哨兵值、配置系统中的默认值,或数据库记录中 UUID 字段不能为空但尚无真实值时的占位符。RFC 9562 还定义了 max UUID:ffffffff-ffff-ffff-ffff-ffffffffffff(所有位为一),可用作边界标记。重要注意事项:切勿将 nil UUID 用作实际标识符——它不是唯一的。某些 UUID 库和数据库可能会拒绝或特殊处理 nil UUID,因此请确保您的系统对其处理方式保持一致。始终在 API 契约和数据库架构中记录是否接受 nil UUID。
什么是 UUID v7?为什么要使用它?
UUID v7 是 RFC 9562(2024 年 5 月)中定义的最新 UUID 版本。它在最高有效位中嵌入 48 位毫秒级 Unix 时间戳,后跟加密随机数据。这种设计生成的 UUID 全局唯一、按时间排序,且作为数据库主键非常高效。与同样包含时间戳的 UUID v1 不同,v7 使用更简单的 Unix 纪元格式,且不暴露 MAC 地址。时间排序结构将 B-tree 索引碎片化减少多达 90%,带来更快的插入、更小的索引和更好的缓存命中率。2026 年的新项目中,任何需要时间排序的场景(尤其是数据库主键、事件日志和分布式消息队列)都推荐使用 UUID v7。
如何解析一个 UUID?
解析 UUID 是指提取其 128 位中编码的结构信息。每个 UUID 都包含版本字段(第 48-51 位)标识其生成方式,以及变体字段(第 64-65 位)标识所遵循的 UUID 标准。不同版本嵌入不同数据:UUID v1 和 v6 包含 60 位时间戳和 48 位节点(MAC 地址);UUID v7 包含 48 位毫秒级 Unix 时间戳;UUID v3 和 v5 包含命名空间和名称的截断哈希。要解析 UUID,请将其粘贴到本工具的「解析」标签页。它会即时显示版本、变体、时间戳(针对基于时间的版本)和有效性状态。
UUID vs ULID vs nanoid——应该选哪个?
UUID、ULID 和 nanoid 都用于生成唯一标识符,但在格式、可排序性和标准化程度上有所不同。UUID 是最广泛采用的标准(RFC 9562),几乎所有数据库、语言和框架都原生支持。UUID v7 在标准的 128 位 36 字符格式中提供基于时间的排序。ULID 早于 UUID v7,使用 Crockford Base32 编码生成 26 字符的可排序字符串。现在 UUID v7 已作为 IETF 标准存在,ULID 的主要优势——可排序性——在通用 UUID 格式中已可获得。nanoid 生成更短的标识符(默认 21 字符),使用 URL 安全字符集。对于大多数应用,建议选择 UUID v4(通用)或 UUID v7(数据库主键)。