UUID UUID Generator

免费 · 无需注册 · 无需安装

UUID 校验工具

逐条检查 UUID 是否正确、属于哪个版本,并把时间型版本里的时间戳解出来。

  • 最多 200 条
  • 识别版本与变体
  • 解码时间戳

UUID 校验工具

Validator
最多 200 行。花括号、引号、大写字母和省略连字符的写法都可以直接粘贴。

结果 0

结果显示在这里。

所有值都在你的设备上用 Web Crypto API 生成,不会发送到浏览器之外的任何地方。 快捷键:Ctrl + Enter — 重新生成

什么是UUID 校验

校验器会解析你粘贴的每一行,判断它是否是合法的 UUID,并读出第 13 位十六进制数表示的版本号,以及第 17 位表示的变体。

对于 v1、v6、v7,它还能把编码在里面的时间戳还原成可读时间。这在排查问题时很有用:只要看一眼 ID,就能知道某条记录是什么时候创建的。

使用方法

  1. 把值粘贴进输入框,每行一个,最多 200 行。
  2. 花括号、引号、大写和省略连字符的写法都不需要预处理。
  3. 点击校验,逐行查看是否有效、版本、变体和详情。
  4. 使用填入示例可以先看看输出长什么样。

适用场景

  • 粘贴日志里的几十条 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 时间,不需要自己写代码。

为什么第一次校验时生成的值和第二次不一样?

校验不会修改输入,结果也不会变。如果你同时开着生成器页,那是因为重新生成产生了新值。