Ask HN:我们真的撞到了一次 UUID v4 重复

查看原文 HN 讨论

文章摘要

发帖人 mittermayr 自报家门:他用的就是 npm 上那个最常用的 uuid 包,代码简单到不能再简单——import { v4 as uuidv4 } from "uuid"; const document_id = uuidv4(); 然后写库。今早数据库报了一个重复,他还以为是 double-insert,但查下来不是:一条 2025 年插入的旧记录今早一条新生成的 UUID完全相同——b6133fd6-70fe-4fe3-bed6-8ca8fc9386cd。数据库里只有约 15,000 条记录,这种规模下 UUID v4 碰撞的理论概率(约 1/4.72×10²⁸)”统计上不可能”。他在 Ask HN 求助:到底哪里出了问题?

他给出的唯一可疑线索是:这两条 UUID 的生成环境不一样。早期 UUID 是在用户手机上生成的,最近几个月迁到了 Ubuntu 服务器上生成。

这是个非常有 HN 风味的求救帖——一个看起来”不可能”的事件,引出整个评论区把”为什么 UUID v4 会撞”的各种可能性几乎枚举了一遍。从结论看,HN 共识非常一致:UUID v4 碰撞远比数学概率暗示的常见,但几乎永远不是真的”中了天文级巧合”,而是熵源出问题、被攻击、被复用、bit 翻转、或者代码里别的地方有 bug。

HN 评论精华