ByteCompress

UUID生成器

在浏览器中即时生成加密随机的版本4 UUID。使用Web Crypto API进行单个或批量生成,符合RFC 9562。

51
FreeClient-sideNo signup

UUID v4具有122位随机位,约有5.3×1036个可能值。要有50%的单次碰撞概率,需要生成2.71×1018个UUID。以每秒十亿个的速度,这需要85年。UUID v4在RFC 9562中标准化(RFC 4122的继任者),是现代分布式系统中最广泛部署的标识符格式。此生成器使用浏览器的crypto.randomUUID() API,由操作系统的CSPRNG支持。一次生成一个UUID或数百个--无需服务器,无需注册。

如何生成UUID

  1. 点击生成立即创建一个UUID。
  2. 输入数量(例如,10、100、1000),然后点击批量生成一次生成多个UUID。
  3. 点击列表中的任何UUID单独复制,或使用复制全部复制完整列表。
  4. 根据目标系统的要求选择大写或小写输出格式。
  5. 使用下载导出为文本文件。

UUID v4解释

结构和格式

UUID是32个十六进制字符,按8-4-4-4-12的模式分组:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx。第三组中的4是固定的(版本4)。第四组的前1-2位在二进制中固定为10(RFC 4122变体)。其余122位是随机生成的。UUID v4在每个主要云提供商、数据库系统和Web框架中作为默认标识符格式出现。

碰撞概率

有2122个可能值(约5.3×1036),从适当的CSPRNG生成重复的UUID v4在任何实际应用中都是统计上微不足道的。UUID v4的碰撞在实际中被视为不可能。

示例

生成的UUID v4

f47ac10b-58cc-4372-a567-0e02b2c3d479

不同表示形式的相同UUID

带连字符:  f47ac10b-58cc-4372-a567-0e02b2c3d479
大写:       F47AC10B-58CC-4372-A567-0E02B2C3D479
无连字符:   f47ac10b58cc4372a5670e02b2c3d479
URN格式:    urn:uuid:f47ac10b-58cc-4372-a567-0e02b2c3d479

UUID版本比较

  • v1 - 基于时间,包含生成机器的MAC地址。暴露硬件信息并具有顺序模式。避免用于安全敏感的标识符。
  • v3 / v5 - 基于名称和确定性的:相同的输入命名空间+名称总是产生相同的UUID。适用于可重复的标识符。
  • v4 - 完全随机(122位)。没有嵌入信息,没有顺序模式。最广泛使用的应用生成标识符类型。
  • v7 - 时间排序的随机UUID(RFC 9562)。前48位是Unix毫秒时间戳,使得v7 UUID可以按创建时间排序。比v4在数据库B树索引性能上更好。

常见用例

  • PostgreSQL中的主键(uuid类型)、MySQL(VARCHAR(36))和MongoDB
  • 分布式系统ID,多个服务独立创建记录而无需中央序列
  • API资源标识符,在公共URL中暴露(比顺序整数更安全,后者会导致枚举攻击)
  • 文件名,用于上传资产以防止碰撞
  • 幂等性密钥,用于API请求以防止重复处理

要生成安全随机密码(而不是标识符),请使用密码生成器。要获取时间基础的标识符并且也可数据库排序,请在您的数据库驱动程序或ORM中查找UUID v7支持。

常见问题

版本4的UUID在实践中有多独特?

UUID v4具有122位随机性,约有5.3×1036个可能值。要有50%的单次碰撞概率,需要生成2.71×1018个UUID--以每秒十亿个的速度,大约需要85年。对于所有实际应用,UUID v4的碰撞被视为不可能。

这里生成的UUID是加密安全的吗?

是的。该工具使用crypto.randomUUID()(或crypto.getRandomValues()作为后备),均由操作系统的CSPRNG支持。生成的UUID适合用作安全令牌、会话标识符和其他安全敏感的上下文。

我应该使用UUID还是自增整数作为数据库主键?

两者各有利弊。UUID v4在分布式系统中表现良好,多个节点独立生成ID,使得公共URL中的ID不可预测(防止枚举攻击),并简化数据库合并。自增整数更简单、更小(4-8字节对比16字节),并且在顺序插入时具有更好的B树索引性能。UUID v7提供了一个折中方案:随机UUID同时可按时间排序。

UUID的格式是什么?

UUID是32个小写十六进制字符,按8-4-4-4-12的模式分组:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx。带连字符的总字符串长度为36个字符。PostgreSQL将UUID存储为本地16字节二进制类型;MySQL和SQLite通常存储36个字符的字符串。

我可以离线生成UUID吗?

是的。一旦此页面加载,UUID生成完全使用本地JavaScript和浏览器内置的crypto API。生成过程中不会进行网络请求。该工具在初始页面加载后可离线工作。