UUID 生成器:什么是 UUID 及如何在线生成

工具 次阅读

什么是 UUID?

UUID(Universally Unique Identifier,通用唯一标识符)是一个 128 位的数字,通常以 32 个十六进制字符加 4 个连字符的格式表示:

550e8400-e29b-41d4-a716-446655440000
^^^^^^^^ ^^^^ ^^^^ ^^^^ ^^^^^^^^^^^^
  time   time  ver  var     node

UUID 的设计目标是在不依赖中央服务器的情况下,在分布式系统中生成全局唯一的 ID。

UUID 的主要版本

版本生成方式特点推荐场景
UUID v1基于时间戳 + MAC 地址可追溯生成时间,但暴露 MAC 地址需要时间排序的场景
UUID v4完全随机最常用,简单,无规律数据库主键、会话 ID(默认选择)
UUID v5基于命名空间 + SHA-1 哈希相同输入生成相同 UUID(确定性)内容寻址、去重
UUID v7基于 Unix 时间戳(毫秒)+ 随机时间有序,适合数据库索引新项目数据库主键(推荐)

如何在线生成 UUID

使用 tool.tl UUID 生成器

  1. 打开 tool.tl/uuid-generator
  2. 选择 UUID 版本(推荐 v4 或 v7)
  3. 设置生成数量(1 到 100 个)
  4. 点击「生成」
  5. 复制单个或批量复制所有 UUID

UUID 碰撞概率有多低?

UUID v4 有 122 位随机性,碰撞概率极低:

  • 生成 10 亿个 UUID,碰撞概率约为 1 in 5.3 × 10²⁰
  • 每秒生成 10 亿个 UUID,需要约 850 年才有 50% 的概率出现一次碰撞

在实际工程中,UUID v4 碰撞是无需担心的问题。

UUID vs 其他 ID 方案对比

方案示例优点缺点
UUID v4550e8400-...无需服务器、真随机无顺序,索引性能稍差
UUID v7018f7d3a-...时间有序,索引友好泄露生成时间
自增整数1, 2, 3...简单、索引性能最好依赖数据库,分布式不适用
雪花 ID(Snowflake)7061564869888时间有序,高并发需要机器 ID 配置
ULID01ARZ3NDEKTSV4...时间有序,Base32 编码更短相对较新

各语言生成 UUID

# Python (3.3+)
import uuid
print(uuid.uuid4())   # v4
print(uuid.uuid1())   # v1

// JavaScript / Node.js (18+)
import { randomUUID } from 'crypto';
console.log(randomUUID());  // v4

// 浏览器
console.log(crypto.randomUUID());  // v4

-- SQL (PostgreSQL)
SELECT gen_random_uuid();  -- v4

-- MySQL 8.0+
SELECT UUID();

常见问题(FAQ)

Q:UUID 和 GUID 有什么区别?

A:GUID(Globally Unique Identifier)是微软对 UUID 规范的实现,两者在格式和使用上基本相同,可以认为是同一个东西。

Q:UUID 适合做数据库主键吗?

A:UUID v4 可以做主键,但因为随机性会导致 B-Tree 索引频繁页分裂,写入性能比自增 ID 差。推荐使用时间有序的 UUID v7 或 ULID,在保持唯一性的同时改善索引性能。

Q:UUID 是否区分大小写?

A:UUID 的十六进制字符大小写等价(RFC 4122 规定小写,但大写也合法)。存储和比较时应统一格式。