UUID(Universally Unique Identifier,通用唯一识别码)是一个 128 位的标识符,GUID 是微软对它的叫法。它的价值在于不需要中央协调,分布式系统里各节点各自生成也几乎不会重复。本工具支持在浏览器本地生成 v1 / v3 / v4 / v5 / v7 以及 NIL / Max,并能反向解析一个 UUID。
| 版本 | 生成方式 | 适合 |
|---|---|---|
| v4 | 122 位随机 | 最通用:日志 TraceID、临时 ID、前端 key |
| v7 | 48 位毫秒时间戳 + 随机 | 数据库主键:按时间有序,插入不会打乱 B+ 树索引(v4 随机主键会造成页分裂和写放大) |
| v1 | 时间戳 + 节点标识 | 需要能从 ID 反推生成时间的场景;会暴露生成时间,节点位一般用随机值 |
| v3 / v5 | 命名空间 UUID + 名字 的散列(v3 用 MD5,v5 用 SHA-1) | 需要幂等:同样的输入永远得到同一个 UUID,如根据 URL 生成稳定 ID。v5 优于 v3 |
| NIL / Max | 全 0 / 全 F | 占位、哨兵值 |
{…}、URN 形式 urn:uuid:…,大小写。.txt。Q:能用 v4 做数据库主键吗? A:能用但不理想。v4 完全随机,作为聚簇索引主键会导致插入位置随机、页分裂频繁、写入变慢、缓存命中率低。追求有序又要唯一,用 v7(或自增主键 + 另存一个 v4 业务 ID)。
Q:v1 会泄露什么信息? A:v1 内嵌精确到 100 纳秒的生成时间。节点位按原始规范是网卡 MAC,现代实现多改用随机值。介意时间泄露就别用 v1。
Q:v3 和 v5 有什么区别?该用哪个? A:算法不同,v3 用 MD5,v5 用 SHA-1。两者都不可逆、都幂等。优先 v5,MD5 更弱。注意它们不是"加密",只是把命名空间和名字散列成固定 UUID。
Q:生成的 UUID 会重复吗? A:v4 有 122 位随机,每秒生成十亿个、持续 100 年,出现一次碰撞的概率仍极低。v7 靠时间戳 + 随机位进一步降低同一毫秒内碰撞概率。
Q:数据会上传吗?
A:不会。v4 / v7 用浏览器的 crypto.getRandomValues,v1 / v3 / v5 用本地库,全部在你的浏览器里完成。