关于 UUID
01 什么是 UUID?
UUID(Universally Unique Identifier,通用唯一识别码)是一种 128 位的数字标识符,用于在计算机系统中以极高的概率保证信息的唯一性。微软系统中通常称之为 GUID(Globally Unique Identifier)。
标准格式:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
- 32 个十六进制数字
- 由 4 个连字符分隔为 5 组
- 格式为 8-4-4-4-12
02 常见版本区别
| 版本 | 生成依据 | 特点与用途 |
|---|---|---|
| Version 1 | 时间戳 + MAC 地址 | 保证绝对唯一,但会暴露生成时间和网卡信息。 |
| Version 4 | 完全随机数 | 最常用。基于强随机数生成,重复概率极低(几乎由 5.3x10^36 分之一),不暴露隐私。本工具默认生成 v4。 |
| Version 3/5 | 命名空间 + 字符串 Hash | 相同输入会产生相同 UUID(确定性)。v3 用 MD5,v5 用 SHA-1。 |
03 常见应用场景
-
🗄️
数据库主键 用于生成全局唯一主键,特别是在分库分表或无需中心发号器的场景中。
-
☁️
分布式系统 ID 在微服务架构中,各个服务独立生成 ID,互不冲突,便于数据合并。
-
🔑
API Key / Token 生成随机性强、难以预测的会话标识(Session ID)或访问令牌。
-
📁
防止文件名冲突 用户上传文件时,使用 UUID 重命名文件,彻底避免同名文件在服务器上覆盖。
常见问题
UUID 会重复吗?
理论上会,但概率极低。对于 v4 版本,产生冲突的概率小到可以忽略不计。即便每秒生成 10 亿个 UUID,也需要 85 年才可能发生一次碰撞。
GUID 和 UUID 有什么区别?
没有本质区别。GUID 是微软对 UUID 标准的实现称呼(Globally Unique Identifier)。在数据库和编程中,两者通常指代同一种 128 位格式。
数据库主键应该用 UUID 还是自增 ID?
自增 ID 性能更好,索引更紧凑;UUID 保证全局唯一,适合分布式系统和数据合并。如果是分布式微服务架构,推荐使用 UUID(或 Snowflake ID);单体应用推荐自增 ID。
UUID 存储在数据库中占用多大空间?
如果存储为 36 个字符的字符串(char(36)),占用 36 字节。如果存储为 16 字节的二进制(binary(16)),则仅占用 16
字节,效率更高。推荐在数据库中尽量使用二进制存储。
什么是 ULID?它和 UUID 有什么关系?
ULID (Universally Unique Lexicographically Sortable Identifier) 是一种兼容 UUID
的改进格式。它包含时间戳,不仅唯一而且按时间有序(Lexicographically Sortable),解决了 UUID 在数据库索引中性能较差的问题。
本工具生成的 UUID 安全吗?
非常安全。本工具使用浏览器原生的 `crypto.randomUUID()` API,利用系统底层的强随机数生成器。且所有计算均在本地完成,不会上传到服务器。
为什么有时候 UUID 是大写的?
UUID 本质是二进制数据,十六进制展示时大小写不敏感('A' 等于 'a')。但在某些旧系统或特定规范中可能要求特定大小写。通常推荐使用小写。
UUID 能包含用户信息吗?
Version 4 (随机) 不包含。Version 1 (时间戳+MAC) 包含网卡地址。Version 3/5 (命名空间) 包含输入数据的哈希。出于隐私考虑,现代应用大多使用
Version 4。