UUID 生成器
立即生成安全的通用唯一识别码 (v4)。
关于 UUID 生成器
立即生成符合 RFC 4122 标准的 v4 版本通用唯一识别码 (UUID)。该工具非常适合需要生成测试密钥、会话标识符或唯一对象 ID 的开发者、质检工程师及数据库管理员。
如何使用
- 指定您想要生成的 UUID 数量。
- 选择是否在每个 ID 格式中包含标准的连字符 (-)。
- 点击“生成 UUID”按钮创建列表。
- 将结果复制到您的代码、数据库脚本或相关文档中。
常见使用场景
- 为测试数据集生成唯一的数据库主键。
- 在 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 密钥。流程如下:
- 你的设备向服务器发送请求。
- 服务器生成 UUID。
- 服务器在数据库中记录此次创建。
- 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。当你在单一集中式系统中需要最佳数据库插入性能时,使用自增整数。