什么是UUID v1
UUID v1 是 RFC 4122 最初定义的版本,把生成时刻和一个节点标识符编码进去:60 位时间戳从 1582 年格里高利历起算,精度为 100 纳秒;后面是时钟序列和节点值。
在规范原意中,节点就是机器的 MAC 地址,这带来两个问题 —— 它会泄露机器身份,而且在虚拟机上往往并不唯一。所以现代实现通常改用随机节点值,本工具也是如此。
使用方法
- 在下拉框里选择 v1。
- 设置数量,最多 1000 条。
- 点击生成 UUID。
- 需要的话可以打开大写和花括号选项。
适用场景
- 仍在生成 v1 且必须保持格式一致的遗留系统。
- 需要从标识符本身读出创建时间的老代码。
- 与依赖 v1 字段布局的第三方系统对接。
结构
前 60 位是自 1582 年起的 100 纳秒计数;接着 4 位版本号(1);然后是 14 位时钟序列和 48 位节点,最后 2 位是变体号。
UUID v1 的定位
| 选项 | 何时使用 |
|---|---|
v1 | 时间加节点,仅用于与遗留系统保持兼容 |
v6 | 携带同样的信息但时间在高位,不会打乱索引 |
v7 | 毫秒 Unix 时间;新项目应以此替代 v1 |
UUID 各版本速查表
| 版本 | 可排序 | 数据来源 | 适合的场景 |
|---|---|---|---|
| v1 | 不可以 | 时间戳 + MAC 地址 | 仍在依赖 v1 的既有系统 |
| v3 | 不可以 | 名称的 MD5 哈希 | 必须使用 MD5 时的确定性标识符 |
| v4 | 不可以 | 122 位随机数 | 绝大多数普通的唯一标识需求 |
| v5 | 不可以 | 名称的 SHA-1 哈希 | 需要同一名称始终得到同一标识符 |
| v6 | 可以 | 重排后的时间戳 | 既要随机性又要便于排序 |
| v7 | 可以 | 毫秒精度的 Unix 时间 | 数据库主键和事件标识符 |
| v8 | 不可以 | 自定义位布局 | 专有格式和实验性用途 |
这七个版本都是 128 位,都用同样的 8-4-4-4-12 写法表示,区别只在于各个位代表什么。
代码示例
javascript
// Web Crypto 不提供 v1
const id = crypto.randomUUID();
python
import uuid
id = str(uuid.uuid1())
bash
# 命令行
uuidgen -t
常见问题
v1 会泄露我的信息吗?
取决于实现。RFC 原意是把 MAC 地址写进节点字段,那样别人就能从 UUID 反推机器身份。本工具使用加密随机数作为节点值,不会暴露硬件信息。
v1 按时间排序吗?
大致可以,但并不严格。时间戳只精确到 100 纳秒,同一时刻生成的值顺序取决于时钟序列,而且在系统时钟回拨时顺序会翻转。v7 的排序更可靠。
什么时候才该用 v1?
只有在你必须与既有 v1 数据保持兼容时。新系统请直接用 v7。