Skip to main content
CheckTown
生成工具

UUID 生成器:为任意项目创建唯一标识符

发布于 阅读约 5 分钟
本文目录

什么是 UUID?

UUID(通用唯一标识符)是一个 128 位的标识符,无需中央权威机构即可保证在空间和时间上的唯一性。UUID 的格式为 32 个十六进制数字,分为 5 组并以连字符分隔:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。

UUID 有多个版本,各自的生成方式不同。版本 4(随机)是使用最广泛的一种——它生成 122 个随机位,使得碰撞的可能性微乎其微(你需要每秒生成 10 亿个 UUID 并持续 85 年,才有 50% 的概率发生一次碰撞)。

UUID 生成的原理

UUID v4 使用加密安全的随机生成。

  • 随机位——使用 CSPRNG 生成 122 个随机位
  • 版本标记——第三组的第 12-15 位被设置为 0100,以表示版本 4
  • 变体标记——第四组的第 6-7 位被设置为 10,以表示 RFC 4122 变体

免费试用 —— 无需注册

生成 UUID →

何时使用 UUID

对于分布式系统和数据库而言,UUID 是首选的标识符类型。

  • 数据库主键——在分布式系统中使用 UUID 主键,以避免在合并时发生 ID 冲突
  • 会话令牌——为会话标识符和临时令牌生成 UUID
  • 文件命名——使用 UUID 为用户上传和生成的资源创建唯一文件名

常见问题

UUID v1、v3、v4 和 v5 有什么区别?

v1 基于时间并包含 MAC 地址,因而可被追踪。v3 和 v5 是确定性的——它们对命名空间和名称进行哈希,每次都生成相同的 UUID(v3 使用 MD5,v5 使用 SHA-1)。v4 是随机的,也是通用唯一 ID 中最常用的。v7(新兴标准)结合了时间戳和随机性,可生成可排序的 UUID。

数据库主键应该使用 UUID 还是自增整数?

自增整数更简单,也更节省存储空间。而 UUID 更适合分布式系统、合并来自多个来源的数据、在网址中暴露 ID 而不泄露序列信息,以及在写入数据库之前进行客户端 ID 生成。对于单服务器应用,自增往往就足够了。

UUID 真的是唯一的吗?

UUID v4 有 2^122 种可能的值——约为 5.3 × 10^36。生成两个完全相同的 UUID 的概率极小,对于任何实际应用而言几乎为零。根据生日悖论,你需要大约 2.71 百亿亿(quintillion)个 UUID,才有 50% 的概率发生一次碰撞。

相关工具