什么是UUID 校验
校验器会解析你粘贴的每一行,判断它是否是合法的 UUID,并读出第 13 位十六进制数表示的版本号,以及第 17 位表示的变体。
对于 v1、v6、v7,它还能把编码在里面的时间戳还原成可读时间。这在排查问题时很有用:只要看一眼 ID,就能知道某条记录是什么时候创建的。
使用方法
- 把值粘贴进输入框,每行一个,最多 200 行。
- 花括号、引号、大写和省略连字符的写法都不需要预处理。
- 点击校验,逐行查看是否有效、版本、变体和详情。
- 使用填入示例可以先看看输出长什么样。
适用场景
- 粘贴日志里的几十条 ID,快速找出格式错误的那一条。
- 核对 ID 声明的版本是否和实际相符。
- 从数据库导出的 ID 反推创建时间。
结构
校验就是读取固定位置的位:第 13 位十六进制数给出主版本号,第 17 位给出变体。其余内容只对时间型版本和 Nil、Max 这两个特殊值有意义。
UUID 校验 的定位
| 选项 | 何时使用 |
|---|---|
校验 | 给出是否有效、版本、变体,并解码时间戳 |
正则 | 只能回答匹配或不匹配,不解释原因 |
转换 | 改写写法,无法判断一个值是否真实合规 |
UUID 各版本速查表
| 版本 | 可排序 | 数据来源 | 适合的场景 |
|---|---|---|---|
| v1 | 不可以 | 时间戳 + MAC 地址 | 仍在依赖 v1 的既有系统 |
| v3 | 不可以 | 名称的 MD5 哈希 | 必须使用 MD5 时的确定性标识符 |
| v4 | 不可以 | 122 位随机数 | 绝大多数普通的唯一标识需求 |
| v5 | 不可以 | 名称的 SHA-1 哈希 | 需要同一名称始终得到同一标识符 |
| v6 | 可以 | 重排后的时间戳 | 既要随机性又要便于排序 |
| v7 | 可以 | 毫秒精度的 Unix 时间 | 数据库主键和事件标识符 |
| v8 | 不可以 | 自定义位布局 | 专有格式和实验性用途 |
这七个版本都是 128 位,都用同样的 8-4-4-4-12 写法表示,区别只在于各个位代表什么。
代码示例
javascript
const RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-
[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
RE.test(value);
python
import uuid
try:
u = uuid.UUID(value)
print("版本", u.version)
except ValueError:
print("不是 UUID")
sql
SELECT '550e8400-e29b-41d4-a716-446655440000'::uuid;
常见问题
为什么一个看起来正常的 UUID 被判为无效?
常见原因有三个:长度不是 32 位十六进制;版本号不在 1 到 8 之间;或者变体位不是 8、9、a、b 之一。表格里的详情列会指出具体是哪一种。
怎么从 UUID 里读出创建时间?
只有 v1、v6、v7 编码了时间。粘贴进来后,详情列会直接显示解码出的 UTC 时间,不需要自己写代码。
为什么第一次校验时生成的值和第二次不一样?
校验不会修改输入,结果也不会变。如果你同时开着生成器页,那是因为重新生成产生了新值。