| 类型 | 长度 | 示例 | 特点 |
|---|---|---|---|
| UUID v4 | 36 | f47ac10b-58cc-4372-… | 全随机,最通用;不能按时间排序 |
| UUID v7 | 36 | 01932c8a-7f3b-7c4d-… | 前 48 位时间戳,字典序即时间序,推荐 |
| UUID v1 | 36 | 2c5ea4c0-4067-11e9-… | 100ns 时间戳;传统实现会泄露 MAC |
| ULID | 26 | 01J8ZK2M3N4P5Q6R7S8… | Base32(无 I/L/O/U),时间有序、可读性好 |
| NanoID | 21 | V1StGXR8_Z5jdHi6B-m… | URL 安全,长度可调,短小好看 |
| ObjectId | 24 | 507f1f77bcf86cd7994… | MongoDB 默认 _id,可从 ID 反推时间 |
⚠️ 使用提醒:
· 本工具优先使用 crypto.getRandomValues(密码学安全随机源)。只有在该 API 不可用的极老浏览器里才会降级到 Math.random(),此时右侧「随机源」一栏会明确标红提示——若用于生产环境,请确认显示的是「密码学安全」。
· 生成的 ID 只存在于你的浏览器里,本工具不存储、不上传、也无法再找回,请自行复制或导出保存。
· 网页端生成的 UUID 不能保证是 UUID v1 的严格标准实现:v1 最后 12 位本应是网卡 MAC,本工具改用随机值并置多播位,这样既保留了时间戳特性又不会泄露硬件信息——如果你需要与别的系统做 v1 互操作,请留意这一点。
· 「唯一性」是概率意义上的:UUID v4 需要生成约 2.7×10¹⁸ 个才有约 50% 概率出现一次碰撞,日常使用无需担心,但数据库层面仍建议加唯一索引做兜底。
写 SQL 造测试数据要好几十个主键、给接口压测要一批不重复的 ID、做短链接要一批短码——手动编 ID 既不现实也容易重复。
这个工具一次给全六种主流唯一 ID,并且说明它们各自适合什么场景,免得选错:
· UUID v4:最通用、最省心,Java / Python / Go 默认生成的几乎都是它,但不能按时间排序;
· UUID v7:前 48 位是毫秒时间戳,因此字典序就是时间顺序。做数据库主键时索引局部性远好于 v4,是新建系统的推荐选择;
· UUID v1:100ns 时间戳精度最高,但传统实现会把网卡 MAC 写进 ID 里——本工具用随机节点替代,不会泄露你的硬件信息;
· ULID:26 个字符的 Base32,刻意去掉了容易看错的 I、L、O、U,时间有序、大小写不敏感,适合做对外可见的 ID;
· NanoID:默认 21 个字符,URL 安全、长度可调,短链接与分享码的常见选择;
· ObjectId:MongoDB 的默认 _id,24 位十六进制,还能从 ID 反推出创建时间。
另外提供「大写 / 去连字符 / 加引号 / 单行逗号分隔」四个格式开关,复制出去就能直接贴进代码、SQL 或 JSON。所有生成均在浏览器本地完成,不联网。
做数据库主键,且在意写入性能 → 选 UUID v7 或 ULID。它们把时间戳放在前面,新记录会集中插在索引末尾,避免随机写入把 B+ 树索引打散。
只求省事、不关心排序 → 选 UUID v4。生态支持最广,几乎任何语言的任何库都认。
要给别人看、希望短一点好念 → 选 ULID(26 字符)或 NanoID(21 字符,可再调短)。
做短链接、分享码、文件名 → 选 NanoID,URL 安全且没有连字符,不用再做转义。
在用 MongoDB → 直接用 ObjectId,它就是 Mongo 的默认主键格式,还能反推创建时间。
需要极致的纳秒级时间精度 → 选 UUID v1,但要注意它的隐私问题与排序友好度都不如 v7。
造 SQL 测试数据:勾上「每个值加双引号」+「单行输出」,复制出来直接塞进 IN (...) 或 VALUES 里。
写配置文件 / 常量数组:同样用「加双引号 + 单行」得到 "a-1", "a-2", "a-3" 这样可直接粘贴的列表。
拿去当密码用:正好顺手——UUID v4 有 122 位随机量,但注意它是小写十六进制,字符集只有 16 种,做密码不如专门的密码生成器。
压测造 ID:直接生成 1000 个导出成文件,作为压测数据源。
crypto.getRandomValues(),它由操作系统提供的密码学安全伪随机数生成器驱动,输出不可预测。Math.random():它不是为安全设计的,其内部状态在观察到足够多的输出后可能被逆向推测。用 Math.random 生成的「随机」token 曾被用于攻击场景(例如猜测会话 ID、重置令牌)。BINARY(16) 而不是 36 字符的文本。审核通过后就会展示在留言板上,稍安勿躁~
还没有留言,来抢沙发吧!