跳到正文
BCBinary Code Translator
菜单

标识工具

安全 UUID v4 批量生成器

优先使用 crypto.randomUUID,必要时使用 crypto.getRandomValues 安全回退,生成 UUID v4,并支持批量、大小写和连字符选项。

UUID 全部在浏览器本地使用密码学安全随机源生成,绝不使用 Math.random。

请输入 1 到 1000。

如何生成 UUID v4

设置数量和文本格式后生成。底层 128 位值始终写入 v4 版本位和 RFC 变体位;大小写与移除连字符只改变显示,不改变随机字节。

  1. 输入 1 到 1000 的整数,限制可避免误操作导致页面和剪贴板过大。
  2. 通常保留 8-4-4-4-12 连字符形式,只有目标字段要求 32 位十六进制时才移除。
  3. 大写仅用于兼容展示,UUID 比较通常应忽略大小写。
  4. 生成并复制后,确认目标数据库字段长度、唯一约束和格式校验。

案例与预期行为

输入 输出 说明
1 个,小写,含连字符 550e8400-e29b-41d4-a716-446655440000 标准文本分为 8、4、4、4、12 个十六进制字符。
1 个,大写 550E8400-E29B-41D4-A716-446655440000 大小写只改变文本展示。
1 个,无连字符 550e8400e29b41d4a716446655440000 紧凑形式仍包含相同 128 位。
版本位 xxxxxxxx-xxxx-4xxx-… 第三组首个十六进制数字为 4。
变体位 …-[8|9|a|b]xxx-… 第四组首位承载 RFC 变体。
数量 1001 拒绝 单次生成上限为 1000。

UUID v4 结构与标准

UUID 是 128 位标识,常写成 32 个十六进制字符并分成 8-4-4-4-12。版本 4 固定一部分版本与变体位,剩余 122 位来自随机源。该文本格式被数据库、语言和 API 广泛支持。

本工具优先调用 crypto.randomUUID;若浏览器没有该方法,则用 crypto.getRandomValues 填充 16 字节并设置版本和变体位。回退绝不使用 Math.random。大写和连字符处理只在生成后作用于文本。

  • 规范形式通常是小写十六进制加连字符。
  • 版本字段必须为 4。
  • 变体字段首位应为 8、9、a 或 b。

随机性、碰撞与实际保障

122 个随机位提供巨大空间。随机源可靠时,普通业务规模发生碰撞的概率可以忽略,因此多个客户端可在不联系中央序列的情况下生成 ID。

实际风险还包括随机源缺陷、虚拟机克隆、实现错误和数据库字段截断。存储时应保留完整值,并在重复会破坏数据一致性时建立唯一约束。工具无法验证复制后是否被截断或改写。

  • 数据库应使用 UNIQUE 约束。
  • 不要截短 UUID 作为短码。
  • 导入测试应确认 32 个十六进制字符完整保留。

UUID 是标识,不是密钥

随机 UUID 比自增 ID 更难猜,但它不是授权凭证。UUID 经常出现在 URL、日志、分析和客户端代码中。如果只凭知道对象 ID 就允许访问,会形成越权漏洞,所有请求仍需独立鉴权。

也不应直接把 UUID 当加密密钥、重置密码 Token 或长期 API 密钥。安全 Token 通常需要更明确的熵、编码、过期、吊销和服务端哈希存储设计。应使用成熟身份认证库。

  • 对象标识与访问控制必须分离。
  • 不要因为字符串像 UUID 就把它当秘密。
  • 凭证和重置链接使用专门随机 Token。

批量与文本格式选择

批量生成适合测试夹具、迁移映射、离线记录和种子数据。单次上限 1000,避免错误数量造成长时间阻塞和巨大剪贴板。每个 UUID 都独立调用安全随机源。

连字符更容易识别,旧系统有时要求 32 位紧凑形式;大小写多用于报表兼容。严格字符串比较可能受大小写影响,应在系统边界选择并记录统一格式。

  • 输出每行一个 UUID,便于脚本处理。
  • 大小写表示相同十六进制值。
  • 无连字符仍是同一 UUID,但严格校验器可能拒绝。

常见用途与不合适替代

适合分布式主键、客户端先创建记录、文件标识、链路追踪 ID 和测试数据。它不会像顺序 ID 那样直接暴露记录数量,但高写入数据库仍需评估索引局部性和存储成本。

时间戳可预测且可能重复,不适合替代随机 UUID。内容哈希由数据决定,适合完整性和内容寻址。单数据库内部自增 ID 更简单、索引更友好。应因为需要去中心化唯一性而选择 UUID,而不是只因为外观复杂。

  • 离线准备导入映射。
  • 在分布式请求入口创建关联 ID。
  • 为客户端暂存记录预分配 ID。
  • UUID v4 不适合作为按时间排序字段。

错误、浏览器支持与验证

数量不是整数、小于 1 或大于 1000 时会拒绝。如果 crypto.randomUUID 和 crypto.getRandomValues 都不可用,也会安全失败,不会降级到弱随机。现代安全上下文通常支持这些 API,但旧 WebView 或受限环境可能例外。

测试可以验证格式、版本位、变体位和数量上限,但确定性单元测试不能证明某台真实设备的熵质量。本交付依赖平台 Web Crypto 契约,不会把模拟随机源说成真实浏览器随机验证。

  • 现代 Web Crypto 通常需要 HTTPS 或可信本地环境。
  • API 边界仍要校验 UUID 格式。
  • 正则匹配成功不等于来源一定安全。

与哈希和时间戳的区别

UUID v4 是随机值,与内容无关;哈希对同一字节总是相同,用于完整性和内容寻址;时间戳表示时间且可预测;HMAC 使用密钥认证数据。

其他新版 UUID 可能提供时间排序,但本页按需求只实现 v4。数据库局部性是核心需求时,应评估标准化时间有序 ID,不要自行拼接时间戳和随机数。

常见问题

是否使用 Math.random?

不使用。优先 crypto.randomUUID,只在必要时回退到 crypto.getRandomValues 并设置版本和变体位;安全随机不可用时直接失败。

UUID v4 碰撞概率有多大?

在 122 位可靠随机空间中,普通业务规模概率可忽略。但字段截断、环境缺陷和实现错误仍可能产生重复,所以数据库应设置唯一约束。

UUID v4 可以作为 API 密钥吗?

不建议。它是标识,不是授权机制,可能出现在 URL 和日志。安全 Token 需要专门的熵、过期、吊销和存储设计。

大写或去掉连字符会改变 UUID 吗?

只改变文本表示,底层十六进制值相同。但严格校验器或数据库字段可能要求标准小写连字符格式。

为什么批量上限是 1000?

用于避免浏览器卡顿、巨大字符串和误操作剪贴板。更大受控任务应分批或使用带保护的脚本。

单元测试能证明真实浏览器随机安全吗?

不能。测试能验证调用路径、位布局和格式,但不能测量真实设备熵。本项目不会把模拟或 Node 测试描述成浏览器熵验证。

相关开发工具

查看全部工具

Cookie 偏好设置

管理你的 Cookie 偏好。必要 Cookie 无法关闭。

必要 Cookie

必要

用于语言选择、隐私选择和网站基础功能,属于必需项。

Cookie: NEXT_LOCALE

分析 Cookie

可选的分析 Cookie 可帮助我们了解访问情况并改进网站。

Cookie: _ga, _gid, _gat, _clck, _clsk

广告 Cookie

可选的广告 Cookie 可能用于展示相关广告并衡量广告效果。

Cookie: __gads, _gcl_au, IDE