UUID 生成器 thumbnail

UUID 生成器

立即生成安全的通用唯一识别码 (v4)。

Checking status...

关于 UUID 生成器

立即生成符合 RFC 4122 标准的 v4 版本通用唯一识别码 (UUID)。该工具非常适合需要生成测试密钥、会话标识符或唯一对象 ID 的开发者、质检工程师及数据库管理员。

如何使用

  1. 指定您想要生成的 UUID 数量。
  2. 选择是否在每个 ID 格式中包含标准的连字符 (-)。
  3. 点击“生成 UUID”按钮创建列表。
  4. 将结果复制到您的代码、数据库脚本或相关文档中。

常见使用场景

  • 为测试数据集生成唯一的数据库主键。
  • 在 Web 应用开发中创建临时的会话或请求 ID。
  • 在软件设计原型中模拟全局唯一对象标识符。

技术细节

利用浏览器内置的加密级随机数生成器 (crypto.getRandomValues) 制作 UUID,确保符合 v4 规范且冲突概率极低。

常见问题

什么是 UUID v4?
UUID v4 是基于随机数的版本。它拥有极其庞大的 128 位随机空间,碰撞概率低到在实际应用中可以被忽略。
离线状态可以使用吗?
可以。加载完毕后,生成逻辑完全在本地运行。您的 UUID 不会经过任何外部服务器传输。
不同的 UUID 版本有什么区别?
UUID v1 基于时间戳和 MAC 地址(可追踪,但已排序)。UUID v4 是随机生成的(最常用,隐私性好)。UUID v5 是基于命名空间的 SHA-1 哈希(相同输入始终产生相同 UUID)。UUID v7 是较新的标准,使用 Unix 毫秒时间戳,可按时间排序(对于数据库索引非常好)。
UUID 可能重复吗?
理论上可以,但实际上极不可能。UUID v4 有 2¹²² 种可能值(约 5.3 × 10³⁶)。在 10 亿个 UUID 的系统中发生碰撞的概率约为 10⁻¹⁸——比被陨石击中的概率还低。
我可以一次生成多个 UUID 吗?
可以。在输入框中指定数量(例如 10 或 100),工具会生成一个批次列表,可以整体复制。
我可以批量生成UUID用于数据库种子脚本吗?
可以。UUID生成器单次可生成多达100个UUID。输出格式为每行一个UUID,便于直接复制粘贴到SQL INSERT语句、JSON固件或种子脚本中。所有UUID均使用浏览器的window.crypto.getRandomValues()函数生成,提供符合UUID v4规范的加密随机字节。UUID不会传输到任何服务器。如需在脚本中生成数千个UUID,可使用uuid npm包或Python中的uuid.uuid4()循环生成。

本地处理

本地文件、文本和图表工具通过 JavaScript、浏览器 API 以及必要时使用的 WebAssembly 在您的设备上处理内容。使用事件不包含文件名、文件内容、输入文本、图表数值、原始错误、电子邮箱或许可证引用。DNS、WHOIS、IP 和测速等网络工具会为其功能访问外部服务。加载网站、字体、库和模型也会产生网络请求。WebAssembly 本身并不能阻止网络访问。

UUID 是什么?离线生成的原理与方法

UUID 是什么?离线生成的原理与方法

UUID(Universally Unique Identifier,通用唯一标识符)是一种 128 位的标签,可以完全离线地在浏览器内生成,无需联系任何服务器或中央数据库。由于两个 UUID 发生碰撞的数学概率极低,离线生成是安全的——这也是注重隐私的 local-first 应用架构的基础。

每当你创建一个新用户账户、保存文档或生成唯一分享链接时,很有可能开发人员已经为该操作分配了一个 UUID。

长期以来,生成唯一标识符的标准方法是请求中央数据库来完成。你向服务器发送请求,数据库递增一个数字(例如 ID #1042)并返回。这是一个可靠的系统,但从根本上要求与中央机构保持持续连接。

当我们构建去中心化应用、local-first 软件或注重隐私的工具时,这种持续的服务器连接就成了负担。如果你的应用需要完全离线运行,就无法依赖数据库来告知下一个 ID 应该是什么。

这就是 UUID 改变架构的地方。你可以在浏览器内部本地生成 UUID,完全离线,并在数学上保证它不会与任何其他人生成的任何 ID 发生冲突。

UUID 长什么样?

UUID 是一个 128 位标签,显示为由字母、数字和连字符组成的 36 字符字符串。

123e4567-e89b-12d3-a456-426614174000

它看起来像随机乱码,但有严格的结构。字符串被分为五组,由连字符分隔(8-4-4-4-12)。虽然 UUID 有多个版本,但版本 4(UUIDv4)是完全随机离线生成中最常用的版本。

在 UUIDv4 中,几个位被保留用于指示版本和变体。这留下了整整 122 位用于纯粹的随机性。

为什么两个 UUID 永远不会重复?

如果数千台不同的设备离线生成 UUID,为什么没有设备会产生重复?

答案在于规模。

由于我们有 122 个随机位,UUIDv4 可能的组合总数为 2122。

为了形象说明:

2122 ≈ 5.3 × 1036

这是 5.3 undecillion(5.3 × 1036)个可能的 ID。

如果你在接下来 85 年里每秒生成 10 亿个 UUID,产生单个重复(碰撞)的概率仍然只有约 50%。由于碰撞概率极低,我们可以完全省去数据库检查。你的浏览器不需要询问服务器"这个 ID 已被使用了吗?"——它可以直接生成字符串,并以近乎绝对的数学确定性假定该 ID 在全球范围内是唯一的。这是 offline-first 应用架构的基石。

开发者手记:伪随机陷阱

构建本地 UUID 生成器听起来非常简单——不就是随机文本吗?当我第一次为 LokalTools 构建离线 UUID 生成器原型时,我陷入了一个经典的 JavaScript 陷阱。

为了生成随机位,我使用了原生的 Math.random() 函数。它快速、简单,输出在人眼看来完全是唯一的。

问题所在: Math.random() 并不是真正的随机。它是一个伪随机数生成器(PRNG)。浏览器使用专为速度而设计的算法(如 xorshift128+)来实现它,而不是为了安全性或加密熵。如果你在紧密循环中使用 Math.random() 生成 UUID,"随机"种子就会开始重叠。

在我们的测试中,当使用 Math.random() 在本地生成 10 万个 UUID 进行压力测试时,我们开始看到碰撞。如果随机数生成器是可预测的,5.3 undecillion 的数学逻辑就会崩溃。

解决方案: 我们必须移除标准数学函数,转而使用 Web Crypto API。具体来说,我们将生成引擎切换为使用 window.crypto.getRandomValues()。

与标准 JavaScript 数学函数不同,Web Crypto API 直接利用操作系统的熵源。它观察硬件中的微小变化——如 CPU 热噪声或按键时间间隔——来为生成器提供种子。

通过将工作负载推送到操作系统级别的加密 API,我们保证了本地浏览器生成能够维持真正的高熵随机性。数学逻辑再次安全,一切都严格保留在客户端。

为什么本地生成在隐私方面胜出?

传统架构通过网络请求来生成或验证会话 ID、文档令牌或 API 密钥。流程如下:

  1. 你的设备向服务器发送请求。
  2. 服务器生成 UUID。
  3. 服务器在数据库中记录此次创建。
  4. UUID 被发送回你的设备。

这种方法产生不必要的网络延迟,并在第三方服务器上留下审计跟踪。如果你正在为安全的本地文档生成唯一加密密钥,向远程服务器发送请求就违背了隐私保护的初衷。

通过使用浏览器的加密引擎在本地生成 UUID,零字节数据被传输。在你决定如何处理它之前,该 ID 仅存在于本地系统的内存中。实际上,这意味着你的数据生成是尽可能私密的。

什么时候数据库 ID 更胜一筹?

客户端生成很强大,但它并非每个软件工程问题的完美解决方案。你必须了解架构上的权衡。

现实情况是:完全随机的 UUID 对数据库性能非常不利。

如果你正在构建一个需要向传统关系型数据库(如 PostgreSQL 或 MySQL)插入数百万行数据的应用,以 UUIDv4 作为主键会导致一个名为"索引碎片化"的问题。

关系型数据库使用 B 树来组织数据。它们偏好按顺序插入数据(1, 2, 3, 4...)。由于 UUIDv4 完全随机,数据库必须不断拆分和重新组织其内部存储树以容纳新记录。随着时间推移,这会产生大量读写放大并降低查询速度。

对于高性能数据库,传统的自增整数或按时间排序的 UUID(如 UUIDv7,它在字符串开头放置时间戳)从根本上来说更好。

但对于会话 ID、离线文档生成、幂等 API 请求,或在不依赖互联网连接的情况下构建私有 local-first 工具,本地 UUID 生成依然无可替代。

立即体验

不要再为了获取一个唯一字符串而向服务器发送请求了。保持应用架构的解耦和数据的私密性。

立即访问 LokalTools UUID 生成器,即刻生成数千个加密安全的标识符。亲眼见证你自己的机器如何在浏览器内部快速创造真正的随机性,没有任何请求接触过我们的后端。


常见问题

UUID 是什么? UUID(Universally Unique Identifier)是在 RFC 4122 中标准化的 128 位标识符,通常显示为由连字符分隔的 36 字符字符串。它被设计为全局唯一,无需中央机构来分配。

UUID 和 GUID 有什么区别? GUID(Globally Unique Identifier)是微软对同一概念的命名。GUID 和 UUID 在功能上完全相同——两者都是遵循相同 RFC 4122 标准的 128 位标识符。这两个术语在大多数情况下可以互换使用。

两个 UUID 有可能相同吗? 从数学角度来说,可能——但概率极低,几乎被认为不可能发生。有 2122 种可能的 UUIDv4 组合,你需要每秒生成超过十亿个 UUID 持续数十年,碰撞才会在统计上变得可能。

在没有服务器的情况下在浏览器中生成 UUID 安全吗? 是的,只要你使用 window.crypto.getRandomValues() 而不是 Math.random()。Web Crypto API 从你的操作系统获取熵,使浏览器生成的 UUID 在加密上是安全的,适合用作会话令牌、文档 ID 和 API 密钥。

UUIDv4 和 UUIDv7 有什么区别? UUIDv4 完全随机(122 个随机位),最适合需要隐私且无需顺序排列的离线生成。UUIDv7 在开头嵌入毫秒级时间戳,使其可排序,在高插入量的工作负载中作为数据库主键效率更高。

为什么 Math.random() 不适合生成 UUID? Math.random() 是一个针对速度而非加密安全性优化的伪随机数生成器(PRNG)。在压力测试中,我们发现使用 Math.random() 批量生成 UUID 会产生碰撞,因为底层种子空间有限。始终使用 Web Crypto API 进行 UUID 生成。

什么时候应该使用 UUID 而不是自增整数? 当你需要离线生成 ID、在多个断开连接的客户端上生成,或者不想向最终用户暴露顺序记录数量时,使用 UUID。当你在单一集中式系统中需要最佳数据库插入性能时,使用自增整数。