Make Tools
2026-04-11

UUID 生成器:什么是 UUID 以及何时使用

了解 UUID 版本(v1、v4、v5、v7),何时使用它们,以及如何在浏览器或编程语言中生成 UUID。

UUID开发工具分布式系统

什么是 UUID?

UUID(通用唯一标识符)是计算机系统中用于标识信息的 128 位数字。通常写作 36 个字符的字符串,如 550e8400-e29b-41d4-a716-446655440000,UUID 的设计目标是在不需要中央协调机构的情况下实现全局唯一性。

两个独立生成的 UUID 发生冲突的概率极低——对于 v4,你需要每秒生成 10 亿个 UUID 持续 85 年才有 50% 的概率出现一次冲突。我们的 UUID 生成器 在浏览器中即时创建它们。

UUID 版本详解

UUID v1 — 基于时间戳

v1 UUID 结合了时间戳和生成机器的 MAC 地址。这保证了唯一性(同一机器 + 同一时间 = 同一 UUID),但会泄露 UUID 的创建时间和地点信息。

格式: xxxxxxxx-xxxx-1xxx-xxxx-xxxxxxxxxxxx
示例: 550e8400-e29b-11d4-a716-446655440000

UUID v4 — 随机

v4 是最常用的版本。它由随机数生成,122 位随机性加上 6 位固定的版本和变体标识。简单、快速且无隐私顾虑。

格式: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
示例: f47ac10b-58cc-4372-a567-0e02b2c3d479
                    ^版本  ^变体 (8, 9, a, b)

UUID v5 — 基于名称(SHA-1)

v5 通过 SHA-1 哈希从命名空间和名称生成 UUID。相同的命名空间 + 名称始终产生相同的 UUID——确定性和可复现。

# Python: 生成 UUID v5
import uuid

namespace = uuid.NAMESPACE_DNS
print(uuid.uuid5(namespace, "example.com"))
# 始终返回: cfbff0d1-9375-5685-968c-48ce8b15ae17

UUID v7 — 时间戳 + 随机(新版)

v7(RFC 9562)结合了 Unix 时间戳和随机位。它按创建时间排序同时保持随机性——v1 和 v4 的最佳结合。作为数据库主键的推荐选择越来越多。

格式: xxxxxxxx-xxxx-7xxx-xxxx-xxxxxxxxxxxx
结构: 48 位时间戳 | 12 位随机 | 版本 | 62 位随机

何时使用 UUID

  • 数据库主键:避免暴露记录数量的自增 ID。UUID 允许客户端在插入前生成 ID。
  • 分布式系统:多个节点可以独立生成 ID,无需协调。
  • API 资源:暴露 UUID 而非自增整数,防止枚举攻击。
  • 会话令牌:用于用户会话的唯一、不可猜测的标识符。
  • 文件命名:防止多个进程同时写入文件时发生冲突。

UUID vs 其他 ID 系统

UUID vs 自增 ID

自增整数快速且紧凑,但会泄露信息(总记录数、创建顺序),并且需要中央数据库协调。UUID 用大小换取去中心化。

UUID vs ULID

ULID 是 128 位 ID,前 48 位编码时间戳,使其可以按字典序排序。比 v4 UUID 更适合数据库,但标准化程度较低。UUID v7 在 UUID 标准内解决了同样的问题。

UUID vs NanoID

NanoID 生成更短、URL 友好的标识符(默认 21 个字符),但不是标准。适合面向用户的 URL;对于系统级标识,还是用 UUID。

不同语言中生成 UUID

// JavaScript (Node.js)
const crypto = require('crypto');
const uuid = crypto.randomUUID();
console.log(uuid); // 如: 1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed

// 浏览器
const uuid = self.crypto.randomUUID();
# Python
import uuid
print(uuid.uuid4())  # 随机 UUID
print(uuid.uuid5(uuid.NAMESPACE_DNS, "example.com"))  # 基于名称
# 命令行
uuidgen  # macOS / Linux
cat /proc/sys/kernel/random/uuid  # Linux 备选方案

高效存储 UUID

UUID 作为字符串占用 36 字节。以二进制存储(16 字节)可节省空间但使调试复杂化。现代数据库提供原生 UUID 类型,自动处理这个问题。

// PostgreSQL: 原生 UUID 类型
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name TEXT NOT NULL
);

常见问题

UUID 真的永远不会冲突吗?

概率非零但极其微小。对于 v4,你需要生成约 2.71 × 10¹⁸ 个 UUID 才有 50% 的概率出现一次冲突。实际应用中,它们是唯一的。

应该使用哪个 UUID 版本?

简单场景用 v4,需要排序用 v7,需要确定性生成用 v5。大多数情况下 v4 是默认选择。

在 URL 中暴露 UUID 安全吗?

安全——v4 UUID 不泄露系统或序列的任何信息。这是相对于自增整数 ID 的主要优势。

如何在不安装任何东西的情况下生成 UUID?

使用我们的 UUID 生成器——完全在浏览器中运行,支持 v1、v4、v5 和 v7 格式。

总结

UUID 解决了分布式系统中无需协调生成唯一标识符的问题。无论你需要随机(v4)、时间可排序(v7)还是确定性(v5)标识符,我们的 UUID 生成器 都能满足——支持批量生成和多种格式选项,全部在客户端完成。

试试这个工具?

打开工具 →