UUID / GUID 在线生成器

基于 RFC 4122 与 RFC 9562 规范在浏览器本地极速批量生成与校验 UUID。支持格式定制(大小写、去连字符、大括号及引号包裹)、多格式批量导出,以及位级结构解析与嵌入时间戳解码。

自定义:
字母大小写
连字符 (-)
大括号包裹
引号包裹
已生成 0 个 UUID (V4)点击任意行即可快速复制

如何使用 UUID 生成与结构校验器

  1. 选择规范版本:按业务需要选择规范版本 —— 通用随机 ID 选择 UUID v4,关系型数据库主键推荐选用时间有序的 UUID v7,兼容遗留分布式系统可选择 UUID v1。
  2. 配置批量数量与格式规则:选择预设批量(1、5、10、50、100、500、1000)或输入自定义数量;按需切换字母大小写、保留或去除连字符、开启微软 GUID 大括号({...})以及单双引号包裹。
  3. 生成与快捷复制:点击 生成新 UUID 按钮,依托原生 Web Crypto API 实时生成;直接点击任意单行结果即可快速复制对应 ID,或点击 复制全部 提取完整生成列表。
  4. 多格式数据导出:支持将批量结果直接下载为干净的 .txt 纯文本、结构化 .json 数组或表格化 .csv 文件;展开高级选项还可一键转换为 SQL INSERT VALUES 批量插入子句。
  5. 深度校验与逆向解析:切换至 校验与结构解析 标签页,粘贴待检测的任意 UUID,即可检验语法合规性、拆解二进制字段,并毫秒级还原 UUID v7 与 v1 中嵌入的 UTC 生成时间戳。

UUID 规范全景对比矩阵:RFC 4122 与 RFC 9562

互联网工程任务组(IETF)于 2024 年正式批准并发布了 RFC 9562 规范,全面现代化了自 2005 年沿用至今的基础标准 RFC 4122。在工程选型中,选择合适的 UUID 版本取决于数据聚簇索引特性、密码学随机熵需求以及安全隐私约束:

版本标准规范生成算法与机制时间可排序典型工程应用场景
UUID v4RFC 4122密码学安全强伪随机数 (CSPRNG)无序(离散均匀分布)通用唯一标识、分布式 Session Token、API Key、请求链路追踪 Trace ID(业界默认标准)
UUID v7RFC 9562 (2024)48 位 Unix 毫秒时间戳 + 74 位随机数单调递增有序(大端序)关系型数据库主键(PostgreSQL、MySQL InnoDB、SQLite)、聚簇 B 树索引高并发写入
UUID v1RFC 412260 位格里高利历时间戳 + 48 位节点 ID(随机 / MAC)非标准顺序(低位时间戳在前)传统企业级分布式遗留系统;Web 端依 RFC 4122 §4.5 填充随机节点位以保障隐私
UUID v3 / v5RFC 4122MD5 (v3) / SHA-1 (v5) 命名空间散列无序基于固定命名空间与输入字符串生成的确定性 ID(如 URI、DNS 映射,相同输入必得相同 UUID)
UUID v6RFC 9562重排序的 60 位格里高利历时间戳单调递增有序遗留 v1 系统的就地替代方案,使时间戳支持 B 树顺序排序
UUID v8RFC 9562厂商自定义二进制字段布局取决于具体实现企业级特定定制架构,需在 128 位 UUID 容器中嵌入专有业务元数据
Nil / Max UUIDRFC 4122 / 9562128 位全部置 0x00 (Nil) 或 0xFF (Max)极值边界哨兵标志值、默认未初始化占位符(00000000-0000-0000-0000-000000000000)及范围查询边界

128 位二进制布局与结构深度解析

标准 UUID 严格由 128 位二进制位(16 字节 / 32 位十六进制字符)组成,在文本表现形式上划分为 5 个连字符分隔的段落:8-4-4-4-12。在标准网络大端字节序(Big-Endian)下,特定比特位精确标定了标识符的版本号与 RFC 变体类型:

UUID v4 (强伪随机型)

RFC 4122 §4.4
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
  • xxxxxxxx-xxxx:前 48 位密码学安全伪随机数据。
  • 4xxx:4 位版本号字段(0100₂ = 4),后续跟随 12 位伪随机数据。
  • yxxx:2 位 RFC 变体位(10₂;十六进制字符 8、9、a 或 b),后续跟随 14 位伪随机数据。
  • xxxxxxxxxxxx:尾部 48 位伪随机数据。全长有效随机熵总计 122 位。

UUID v7 (Unix 毫秒时间有序型)

RFC 9562 §5.7
tttttttt-tttt-7xxx-yxxx-xxxxxxxxxxxx
  • tttttttt-tttt:前 48 位无符号 Unix 纪元毫秒时间戳(网络大端序)。
  • 7xxx:4 位版本号(0111₂ = 7),后续跟随 12 位高熵随机数或毫秒内单调递增计数器。
  • yxxx:2 位 RFC 变体位(10₂),后续跟随 14 位伪随机数据。
  • xxxxxxxxxxxx:尾部 48 位高熵随机数据。毫秒内有效随机熵为 74 位。
关于大小端字节序(Endianness)的工程提示: RFC 国际标准严格强制在全部 16 个字节上采用大端序(Big-Endian)网络字节序。早期微软 Windows COM GUID 实现在内部二进制内存结构中,将前三段(Data1、Data2、Data3)以 x86 本地小端序存储。虽然在格式化为连字符文本时外观一致,但在 C/C++ 或底层驱动中进行二进制原始字节互转时,必须注意这种历史遗留的字节反转差异。

数据库性能:UUIDv7 为何能彻底解决聚簇 B 树索引写放大问题

在 PostgreSQL、MySQL (InnoDB) 和 SQLite 等主流关系型数据库引擎中,表的主键决定了底层磁盘上聚簇 B 树(B-Tree)索引物理页的物理排布次序。主键标识符的生成特征直接决定了高并发写入时的吞吐上限与磁盘存储利用率:

随机 UUIDv4 的写入惩罚与性能衰退

由于 UUIDv4 呈现均匀无序的离散分布,每条新记录的插入都会随机命中 B 树索引中任意一个未知的叶节点物理页。当表数据规模超出物理内存容量时,数据库引擎必须不断从磁盘随机读取索引页、将已满的页面切分为两个半空页(Page Split),并向上递归重写父节点。这会导致:

  • 灾难性的磁盘写放大(Write Amplification)与严重的随机 I/O 抖动
  • 因持续频繁的页面分裂,导致索引存储膨胀且填充率通常仅维持在 50% 左右
  • 不断将宝贵的热点查询缓存页挤出数据库缓冲池(Buffer Pool)

时间单调 UUIDv7 的顺序写入解决方案

UUIDv7 在前置高位嵌入了 48 位 Unix 毫秒时间戳。这种设计确保了新插入的记录在物理时间线上天然保持单调递增,始终顺序追加至聚簇 B 树索引最右侧的叶子节点,实现了类似自增整数主键的高性能表现:

  • 高并发持续批量写入时,树中间节点产生页分裂的概率降至极低
  • 索引页紧凑致密,物理填充率稳定达到 90%~100% 理想状态
  • 支持在多微服务节点去中心化生成全局唯一 ID,完全无需中心化发号锁与网络交互
主键存储方案每行磁盘占用索引占用估算(1000 万行)物理写入特征
UUIDv4 存为 VARCHAR(36)37 字节(36 + 1 长度前缀)约 750 MB(频繁 50% 页分裂空洞膨胀)完全随机离散写入
UUIDv4 存为 BINARY(16) / uuid16 字节约 320 MB随机写入
UUIDv7 存为 BINARY(16) / uuid16 字节约 175 MB(高密度紧凑填充)时间单调顺序追加

碰撞概率与密码学熵边界评估

在分布式系统设计中,唯一标识符的理论碰撞概率可通过生日悖论极限近似公式测算:p ≈ 1 - exp(-n² / (2 × 2^k)),其中 k 为有效伪随机熵比特位宽,n 代表系统累计生成的标识符总数。

UUID v4 随机熵边界

UUID v4 包含整整 122 位密码学安全随机熵(2¹²² ≈ 5.3 × 10³⁶ 种可能数值)。

  • 若要使产生单次重复碰撞的概率达到十亿分之一(10⁻⁹),整个系统需累计生成超过 103 万亿 个 UUID。
  • 即便以每秒 10 亿个的速度连续生成 100 年,碰撞概率依然低于 10⁻¹⁵。

UUID v7 毫秒高并发边界

UUID v7 提供了 74 位高熵随机数 结合毫秒级物理时间切片。

  • 在任意单一毫秒时间窗内,理论空间达到 2⁷⁴(≈ 1.88 × 10²²)种不同组合。
  • 即便有 10,000 台分布式节点在完全重合的同一个毫秒时刻并发打点生成 ID,发生冲突的概率在数学上依然趋近于绝对零。
  • RFC 9562 第 6.2 节定义的单调计数器(Monotonic Counter)机制,可进一步对同毫秒批次内的多条 ID 提供严格自增保序。

主流编程语言代码实现速查

涵盖主流后端运行时与数据库环境的标准库及生产级实现方式:

JavaScript / TypeScript•原生 Web Crypto API 与 uuid 依赖包
js
// 原生 RFC 4122 UUID v4 (现代浏览器沙箱与 Node.js 14.17+):
const v4 = crypto.randomUUID();

// RFC 9562 UUID v7 (通过官方 'uuid' 依赖包):
import { v7 as uuidv7 } from 'uuid';
const v7 = uuidv7();

唯一标识符体系横向评测:UUID vs. ULID vs. NanoID vs. TSID

在现代系统架构设计中,工程团队通常依据数据库聚簇索引特性、URL 紧凑度与国际标准化级别权衡选择最佳方案:

标识符方案原始位长文本字符长度时间可排序标准化程度最佳工程实践场景
UUID v4128 位36 字符否IETF RFC 4122临时鉴权 Token、非聚簇独立主键
UUID v7128 位36 字符是(毫秒级)IETF RFC 9562关系型数据库聚簇索引主键首选
ULID128 位26 字符 (Base32)是(毫秒级)开源社区规范需要时间排序的紧凑短 URL 标识
NanoID可自定义默认 21 字符 (Base64)否NPM 开源库面向公网 Web 的紧凑防碰撞短链接
TSID / Snowflake64 位13 字符 / BIGINT是(毫秒级)定制 / Twitter 规范原生 64 位整数列超高吞吐主键

Frequently Asked Questions

在现代工程架构中,应该优先选用 UUID v4 还是 UUID v7?

强烈建议在关系型数据库主键(如 PostgreSQL、MySQL、SQLite)以及任何基于 B 树(B-Tree)索引的存储系统中选用 UUID v7。UUID v7 前置了 48 位 Unix 毫秒时间戳,保证新记录按时间单调递增写入聚簇索引最右侧叶子节点,彻底规避了索引页频繁分裂与碎片化问题。而在无需时间排序、或为了防止暴露实体创建时间信息的通用唯一标识场景(如分布式 Session Token、API Key、请求跟踪 Trace ID 等),则推荐选用纯随机的 UUID v4。

在大规模高并发生产环境中,UUID 发生碰撞(重复)的实际概率有多大?

理论与工程实践上均趋近于零。UUID v4 拥有 122 位密码学安全随机熵(约 5.3 × 10³⁶ 种可能取值)。根据生日悖论概率模型,系统连续生成 103 万亿个 UUID v4 时,发生单次碰撞的概率仅为十亿分之一。UUID v7 结合了 48 位毫秒时间戳与 74 位高熵随机数(每毫秒切片内包含约 1.88 × 10²² 种可能组合),即便数万台分布式节点在完全相同的同一毫秒内并发生成 ID,发生碰撞的概率在数学上依然可以忽略不计。

为什么在数据库主键性能上,UUID v7 显著优于传统 UUID v4?

UUID v4 的完全随机性会导致物理写入均匀散落在 B 树索引的任意叶子节点上。当数据量超出服务器物理内存时,数据库必须不断从磁盘换入随机索引页,触发密集的叶节点分裂(Node Split)、造成高达 50% 的索引存储空洞与灾难性的随机 I/O 抖动。UUID v7 的前缀具有严格的时间单调性,写入时天然呈现顺序追加特性,使索引填充率保持在 90% 以上,不仅大幅降低磁盘 I/O 压力,还获得了媲美自增整型(Auto-Increment INT/BIGINT)的写入吞吐量。

业界常说的 UUID 与微软 GUID 有何联系与区别?

UUID(通用唯一标识符)与 GUID(全局唯一标识符)在本质上指向相同的 128 位数学标识符概念。UUID 是 IETF 国际标准(RFC 4122 / RFC 9562),而 GUID 是微软在 Windows 与 COM 体系下的历史实现名称。两者在文本表示上完全一致,均采用 8-4-4-4-12 的连字符十六进制字符串。唯一的历史底层差异在于字节序(Endianness):早期 Windows COM GUID 在内部二进制存储中对前三个字段采用了 x86 小端序(Little-Endian),而标准 RFC UUID 强制采用网络大端序(Big-Endian)。现代工程中两者的文本形态已完全等价互通。

在 PostgreSQL、MySQL 和 SQLite 中如何高效存储与索引 UUID?

在 PostgreSQL 中,应直接使用原生的 16 字节 "uuid" 列类型,其内置了针对 B 树与哈希索引的优化。在 MySQL 8+ 中,强烈建议采用 "BINARY(16)" 代替传统的 "VARCHAR(36)",可缩减超过 55% 的存储空间与索引占用,配合 UUID_TO_BIN() 函数或直接写入 UUID v7。在 SQLite 中,建议使用 16 字节 "BLOB" 或 32 位紧凑字符串存储。将二进制存储与时间有序的 UUID v7 相结合,能最大化发挥数据库存储效率并消除索引重平衡开销。

如何使用本工具校验现有 UUID 的合法性并反向解析生成时间戳?

切换至上方的“校验与结构解析”标签页,粘贴待检测的 UUID 文本。工具会自动清洗常见的格式外壳(如大括号、双引号、URN 前缀),严格校验 RFC 语法规范,自动识别其版本号(如 v1、v4、v7)与 RFC 变体位。若输入的标识符属于基于时间戳的版本(UUID v7 或 UUID v1),工具将以毫秒精度反向还原其嵌入的 UTC 日期、本地时区时间及相对逝去时间。

为什么现代应用中不再推崇使用 UUID v1?在浏览器中生成它会泄露 MAC 地址吗?

传统 RFC 4122 规范下的 UUID v1 服务端实现要求将宿主机的 48 位 IEEE 802 物理 MAC 地址与 60 位格里高利时间戳硬编码至 ID 中,若暴露给公网 API 可能会导致局域网物理拓扑与设备指纹外泄,存在安全合规风险。而在现代 Web 浏览器沙箱环境中,出于严格的安全隔离机制,JavaScript 引擎根本无权访问主机的物理硬件 MAC 地址。本工具严格遵循 RFC 4122 第 4.5 节针对无物理网卡访问权限系统的规范,自动采用密码学安全伪随机数填充 48 位节点字段,并显式置位多播位(Multicast Bit),既保证了格式与旧系统完全兼容,又确保了 0 硬件隐私泄露。

在超高并发场景下,如果同一毫秒内并发生成多个 UUID v7,会发生冲突或乱序吗?

不会。RFC 9562 规范为毫秒级并发提供了双重保障机制:系统可以将 12 位的 "rand_a" 字段的一部分定义为单调递增计数器(Monotonic Counter),确保同一毫秒内多条记录严格保持时间自增次序;或者依赖高达 74 位的密码学随机熵。即便不启用计数器,在单节点单毫秒内产生数千条记录的情况下,碰撞概率也微乎其微。