UUID 在线批量生成与随机密码工具
批量生成符合 RFC 4122 标准的 UUID v4 唯一标识符,支持连字符与大小写转换,并提供加密级随机安全密码与 API Key 生成。
阿里云爆款云服务器 · 开发者上云特惠 99元/年起
2核2G/2核4G 高性能轻量服务器、OSS 对象存储与云数据库限时特价,专属通道直达优惠。
UUID 版本家族特性与演进对比 (RFC 4122 / RFC 9562)
对比 v1、v3、v4、v5 以及最新规范 v7 的生成逻辑、安全考量与数据库索引特性。
| UUID 版本 | 生成原理与基础数据源 | 碰撞风险 | 隐私与安全考量 | 数据库 B+ 树索引友好度 |
|---|---|---|---|---|
| UUID v1 | 时间戳 (60-bit) + 硬件网卡 MAC 地址 | 极低 (单机单纳秒唯一) | 存在隐私风险 (泄露物理 MAC 地址) | 低位在左,写入非单调递增 |
| UUID v4 (主流) | 纯加密级安全伪随机数 (122-bit 熵) | 数学上近乎不可能碰撞 (\( 2^{-122} \)) | 完全匿名,无任何主机或时间关联 | 极差 (随机离散插入引发频繁页分裂) |
| UUID v5 | 命名空间 Namespace + SHA-1 哈希散列 | 同命名空间同名称输出恒定 | 确定性输出,不可逆 | 极差 (散列均匀离散分布) |
| UUID v7 (新标准) | 毫秒级 Unix 时间戳 (前48位) + 随机数 | 数学碰撞概率趋零 | 无物理 MAC 泄露风险 | 极佳 (单调递增,天然主键友好) |
常见编程语言生成 UUID 代码速查
主流后端语言中生成符合 RFC 4122 标准 UUID v4 的原生或官方库方法。
// 浏览器与 Node.js 原生支持
const uuid = crypto.randomUUID();import uuid
# 生成 UUID v4 字符串
uid = str(uuid.uuid4())import "github.com/google/uuid"
// 生成随机 UUID v4
id := uuid.New().String()import java.util.UUID;
String uuid = UUID.randomUUID().toString();use Ramsey\Uuid\Uuid;
$uuid = Uuid::uuid4()->toString();# 生成一个 UUID
uuidgen
# 或直接读取内核随机数
cat /proc/sys/kernel/random/uuidUUID 唯一标识符常见技术问答 (FAQ)
碰撞概率数学推导、分布式数据库主键选择与 GUID 区别。
Q1: UUID v4 会发生碰撞(重复)吗?概率有多大?
UUID v4 拥有 122 位的有效随机熵,可能的组合总数高达 \( 2^{122} \approx 5.3 \times 10^{36} \) 种。根据生日悖论计算,若要达到 50% 的碰撞概率,需要以每秒生成 10 亿个 UUID 的极端速度持续生成整整 85 年(累计生成 \( 2.7 \times 10^{18} \) 个)。在人类现有的计算体系下,UUID v4 的碰撞概率在工程实践中等同于零。
Q2: 为什么 MySQL InnoDB 等数据库不推荐使用 UUID v4 作为主键?
InnoDB 聚簇索引底层基于 B+ 树数据结构构建。由于 UUID v4 的字符序列是完全随机离散的,在持续插入新记录时,会导致数据无法依次顺序追加在索引叶子节点的末尾,而是频繁在各个叶子数据页中间随机写入,引发严重的页分裂 (Page Split),导致大量的磁盘 I/O 随机写与碎片率飙升。推荐使用有序的自增主键、Snowflake 雪花 ID 或最新的时间有序 UUID v7。
Q3: UUID 与 GUID 是一回事吗?
本质上是同一种规范的不同称呼。UUID (Universally Unique Identifier) 是由 Open Software Foundation (OSF) 与 IETF 统一标准化的通用规范;而 GUID (Globally Unique Identifier) 则是微软(Microsoft)在 COM 组件体系与 .NET 框架中对该标准的特定叫法与实现。两者的字节长度均为 128 位,结构与格式完全兼容。