UUID v7 时间戳解码

只需粘贴UUID v7字符串,即可提取其前48位中嵌入的毫秒级时间戳并还原为UTC日期时间。可检测非v7版本及variant异常,是姊妹工具「UUID v7生成」的逆向工具。

UUID v7的比特布局

比特范围 字段 说明
0-47 unix_ts_ms 自Unix纪元起的毫秒数,以大端序存储。本工具提取的值。
48-51 version UUID的版本号。v7固定为0111(十六进制为7)。
52-63 rand_a 12位随机值。部分实现用它来保持同一毫秒内的顺序。
64-65 variant 表示RFC 4122/9562变体的固定值10。十六进制表示时开头为8/9/a/b。
66-127 rand_b 62位随机值,用于避免冲突的熵源。

什么是 UUID v7 时间戳提取

UUID v7 是2024年由 RFC 9562 标准化的新版本,前 48 位内嵌了以毫秒为单位的 Unix 时间戳,也就是「生成时刻」。因此排序后会按生成顺序排列,用作数据库主键时索引也不易碎片化。本工具只需贴上 UUID 字符串,就会取出前 48 位并还原为 UTC 日期时间。

同时也会判定版本(version)与 variant。即使输入非 v7 的 UUID 也照样计算时间戳,并附上「这不是 v7」的警告。像 v4 那样的随机 UUID 会得到无意义的日期,但这对于理解各版本 UUID 究竟包含什么信息很有帮助。工具还会显示位元配置表,可确认前 48 位之后放的是什么。所有处理都在浏览器内完成。

从 UUID 取出时间戳的步骤

  1. 贴上 UUID 以 8-4-4-4-12 的连字号分隔 36 字符格式输入。大小写不拘。
  2. 确认版本与 variant 若为 v7 则不会出现警告;非 v7 时会显示「不是 v7」的警告。
  3. 阅读还原的日期时间 会以 Unix 毫秒、ISO 8601(UTC)、你所用装置的本地时间三种形式显示。
  4. 看位元配置表了解结构 可确认前 48 位的时间戳之后,版本、variant、随机数分别落在哪些位元。

用好本工具的小技巧

  • 解码处理完全在浏览器内的JavaScript中完成,输入的UUID不会发送到toolbase.cc服务器。
  • 如果数据库主键使用UUID v7,即使没有专门的created_at字段,只需粘贴主键即可还原该记录的创建时间。
  • 输入非v7版本的UUID(如v4)会触发警告,但仍会显示从前48位机械提取的参考值,可用于了解不同格式之间的差异。
  • 如需生成UUID,可使用姊妹工具「UUID v7生成」,它生成的UUID可直接用本工具反向解码。
  • 将日志文件或API响应中的UUID v7逐个粘贴到此处,有助于在调试外部系统时估算事件发生的大致时间。

这些场景下会用到

从日志中的 UUID 推出发生时刻

即使日志没有时间字段,只要主键是 v7 就能还原生成时刻,在排查故障、追溯前后关系时很有效。

确认主键是否按生成顺序

依序放入多笔记录的 UUID,即可确认实作是否真的产生时间有序的值。

评估是否采用 v7

实际放入值看看能取出什么,就能明白「时间可被外部读取」这项性质的意义。若该时间属于敏感信息,这就成了缺点。

辨别 UUID 的版本

收到的 UUID 是 v4 还是 v7,肉眼难以分辨,本工具可立即判定。

UUID 的相关术语

UUID v7
RFC 9562 标准化的版本,前 48 位带有 Unix 毫秒时间戳。可按时间排序是与 v4 最大的差异。
version(版本)
位于第 13 个十六进位位置的数字,表示 UUID 的生成方式。v7 时此处为 7。
variant
与版本不同,表示 UUID 内部配置的值。遵循 RFC 9562 的 UUID 其第 17 位为 8、9、a、b 之一。
Unix 毫秒
自 1970 年 1 月 1 日 00:00:00 UTC 起经过的毫秒数。48 位足以表示到西元 10889 年。
与 UUID v4 的差异
v4 几乎整体都是随机数,**完全不带生成时刻的信息。** 因此排序不会得到生成顺序,但相对地时间也无法被外部读取。

常见问题

UUID v7在RFC 9562中被标准化,其128位中的前48位以大端序固定嵌入毫秒级Unix时间戳。因此只需将前12位十六进制数字转换为数值并按毫秒解释,即可还原生成时间。

由于UUID v4是完全随机的,从中提取出的"时间戳"是与实际创建时间无关的无意义数值。本工具会检查版本位并显示警告,但仍会展示从前48位机械提取的结果供参考。

根据UUID v7规范,精度为毫秒级。如果在同一毫秒内生成了多个UUID v7,其前48位将完全相同,无法还原它们的生成顺序,区分工作完全交由rand_a和rand_b的随机值负责。

符合RFC 4122/9562的UUID要求第4组开头的十六进制数字必须为8、9、a或b之一。若为其他值(0-7或c-f),可能意味着采用了自定义ID生成逻辑或比特损坏,因此会显示警告。
工具君

闲话 ― 让UUID内置一块"时钟"

UUID v7的划时代之处在于,标识符本身永久保留了生成时间这一信息。在旧版UUID v4中,要知道记录的创建时间必须依赖单独的created_at字段,而若主键使用UUID v7,则仅凭ID字符串本身即可机械地还原生成时间。本工具正是作为姊妹工具"UUID v7生成"的逆向流程提供这一还原功能。

这一特性在故障排查和数据迁移场景中尤为有用。例如旧日志中留存的订单ID,或从外部系统接收到的事件ID若为UUID v7格式,无需查阅专门的时间戳字段即可立即确认该记录大致的创建时间。这对缺失created_at字段的旧系统排查,以及解析其他公司发行的UUID v7同样适用。

不过也需注意几点:UUID v7的时间戳完全依赖生成端的系统时钟,若生成服务器的时钟不准,提取结果也会随之偏差。此外,本工具对UUID v4等其他版本同样会机械地提取出"疑似时间戳",这仅仅是对比特位置的解读,并不保证该值具有实际意义,使用时请留意这一点。