RevealTheme logo

UUID生成工具

生成UUID v4(通用唯一标识符,随机版)。每次点击都会生成一个新的。

如何使用本工具

  1. 1

    Click the Generate UUID button to produce a fresh random v4 UUID.

  2. 2

    Read the 36-character identifier shown in the canonical 8-4-4-4-12 format below the button.

  3. 3

    Click Copy to put the UUID on your clipboard for pasting into code, a database, or a config file.

  4. 4

    Click Generate UUID again whenever you need another one — every click replaces the value with a brand-new random UUID.

什么是UUID,软件为什么要使用它?

UUID(Universally Unique Identifier,在微软的语境中有时称为GUID)是一个128位的值,用于在无需系统间协调的情况下标识实体。UUID的核心理念在于:两个互不知晓、运行在两台不同机器上的不同程序,可以各自生成UUID,并满怀信心地认定它们绝不会发生冲突。这一特性使分布式系统设计成为可能:你可以让任意服务在本地铸造标识符而无需中央计数器,可以在不重新编号行的情况下合并数据库,还可以在服务器尚未看到请求之前就在客户端预先生成标识符。UUID有五个由RFC 4122定义的规范版本:v1(基于时间+MAC地址,会泄露创建时间和机器身份)、v3(命名空间+名称的MD5哈希)、v4(随机,最常用)、v5(命名空间+名称的SHA-1哈希)。RFC 9562又新增了v6(按时间排序,类似v1但不泄露MAC)和v7(Unix时间戳+随机,专为数据库主键设计,因为它按时间先后排序)。本工具通过crypto.randomUUID()生成UUID v4,它使用来自浏览器底层操作系统的、具备密码学强度的随机性,这与TLS密钥的来源是同一个。其输出与Python的uuid.uuid4()、Node的crypto.randomUUID()以及Go的google/uuid.NewRandom()逐字节完全一致。

常见使用场景

  • 数据库主键:当你需要合并数据库或在客户端生成标识符时,用它替代自增整数。

  • Cookie中的会话标识符:长度足够,使得通过暴力猜测出一个有效的会话ID在计算上不可行。

  • API请求的幂等性键:可安全地重试请求;服务器会按UUID去重。

  • 上传文件的标识符:以UUID命名上传的文件,可避免路径冲突,并且不暴露原始文件名。

  • 分布式追踪标识符:每个请求都会获得一个UUID,并在各服务之间传播,用于关联日志。

  • 测试数据标识符:为测试数据提供可预测的随机性,无需在各测试用例之间协调标识符。

常见问题

v4是什么意思?
版本4:它由122位随机性加上6位固定的版本/变体位生成。其他版本:v1基于时间戳+MAC(不要使用;它会泄露机器身份和时间),v3/v5是命名空间+名称的确定性哈希(适用于稳定的派生标识符),v7是带时间戳前缀的随机版(非常适合数据库,因为它按时间先后排序)。对于大多数场景,v4是正确的默认选择。
UUID到底有多唯一?
UUID v4拥有122位有效随机性:即5.3×10^36个可能的值。你需要生成约2.71×10^18个UUID,才会达到50%的冲突概率。作为参照,即便你每秒生成十亿个UUID,也需要85年才能达到这个临界点。在使用良好的随机数生成器时,实际中不会发生冲突。
数据库主键应该用v4还是v7?
v7更适合数据库。UUID v4是随机的,这意味着新行会随机分散到B-tree索引各处,导致索引膨胀,并在大规模下造成插入缓慢。v7将时间戳置于前部,因此新的UUID总是排在旧的之后,从而保持顺序插入的模式。PostgreSQL、MySQL和SQL Server都能从v7中获益。如果你的库尚不支持v7,ULID是一个具有相同特性的流行替代方案。
使用crypto.randomUUID()安全吗?
安全。它由WHATWG规范定义,并在所有现代浏览器中通过操作系统的密码学随机数生成器实现(与TLS密钥的来源相同)。其输出不可预测,并均匀分布在整个UUID v4空间中。
UUID和GUID有什么区别?
它们在功能上完全相同:GUID是微软对同一概念的称呼。字节格式在某些微软API中有所不同(.NET的Guid.ToByteArray()在前三个字段中使用混合字节序),因此当互操作性很重要时,要留意字节序。规范的字符串格式(8-4-4-4-12)是一致的。
我可以缩短UUID以用于URL吗?
可以:将这128位编码为Base62或Base64,而不使用规范的十六进制格式。Base62会得到22个字符;Base64带填充时为22个字符,其URL安全变体也为22个字符。某些库还使用“短UUID”格式。底层的比特位不会改变;只是显示用的编码有所不同。
为什么我的UUID开头几个字符和另一个相同?
这是巧合:UUID v4是随机的。总共有36个十六进制字符,而其中只有22个是随机的十六进制字符(4个保留给版本/变体,4个是连字符),因此当你生成大量UUID时,出现一些前缀重合在所难免。即便前缀相同,完整的UUID仍然是唯一的。

相关工具