UUID生成器
在浏览器中即时生成加密随机的版本4 UUID。使用Web Crypto API进行单个或批量生成,符合RFC 9562。
UUID v4具有122位随机位,约有5.3×1036个可能值。要有50%的单次碰撞概率,需要生成2.71×1018个UUID。以每秒十亿个的速度,这需要85年。UUID v4在RFC 9562中标准化(RFC 4122的继任者),是现代分布式系统中最广泛部署的标识符格式。此生成器使用浏览器的crypto.randomUUID() API,由操作系统的CSPRNG支持。一次生成一个UUID或数百个--无需服务器,无需注册。
如何生成UUID
- 点击生成立即创建一个UUID。
- 输入数量(例如,10、100、1000),然后点击批量生成一次生成多个UUID。
- 点击列表中的任何UUID单独复制,或使用复制全部复制完整列表。
- 根据目标系统的要求选择大写或小写输出格式。
- 使用下载导出为文本文件。
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。生成过程中不会进行网络请求。该工具在初始页面加载后可离线工作。