什么是 Short UUID?
Short UUID 是一种将标准的 128 位 UUID 压缩成更短、更适合 URL 的字符串的技术。它通常涉及:
- 进制转换:将 UUID 从 16 进制(十六进制)转换为更高的进制(通常是 58 进制或 62 进制)
- 字符集选择:使用不含歧义字符的 URL 安全字符集
- 无损压缩:保留原始 UUID 的所有信息
转换示例:
- 标准 UUID:
f47ac10b-58cc-4372-a567-0e02b2c3d479
- Short UUID(58 进制):
2kLrTdCQVWFjc7dYXzzB5A
Short UUID 如何工作
- 移除标准 UUID 中的连字符
- 将得到的 32 字符十六进制字符串转换为十进制数
- 将十进制数转换为更高的进制(58、62、64 等)
- 如有必要,填充结果以确保一致的长度
常见的编码字母表包括:
- 58 进制:不含歧义字符(0、O、I、l)的字母数字组合
- 62 进制:所有字母数字字符(a-z、A-Z、0-9)
- 64 进制:字母数字加两个特殊字符(通常是 + 和 /)
优势与考虑因素
优势 | 考虑因素 |
---|---|
|
|
长度比较
格式 | 长度 | 字符集 | 示例 |
---|---|---|---|
标准 UUID | 36 个字符 | 十六进制 + 连字符 | f47ac10b-58cc-4372-a567-0e02b2c3d479 |
十六进制(无连字符) | 32 个字符 | 0-9, a-f | f47ac10b58cc4372a5670e02b2c3d479 |
58 进制 | 22 个字符 | 不含 0, O, I, l | 2kLrTdCQVWFjc7dYXzzB5A |
62 进制 | 约 22 个字符 | 字母数字 | 3pqLYdcw9TGKxNVgeO0gOd |
64 进制 | 约 22 个字符 | 字母数字 + 符号 | 9HrBC1jMQ3KlZw4CssPUeQ== |
常用的 58 进制字母表
58 进制字母表设计为在等宽和比例字体中都能清晰可辨:
字符集 | 内容 |
---|---|
数字 | 1-9(不包括 0) |
大写字母 | A-Z(不包括 I、O) |
小写字母 | a-z(不包括 l) |
字符:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
常见用例
- URL 缩短:更紧凑的 URL 参数
- 面向公众的 ID:用户或内容标识符
- 二维码优化:更少的字符 = 更简单的码
- 移动应用:减少数据传输
- API 设计:更清晰、更紧凑的资源标识符
- 社交分享:更友好的链接
常见问题
Short UUID 是否与标准 UUID 一样唯一?
是的。Short UUID 只是同一个 128 位值的不同表示形式。转换是无损的,保留了标准 UUID 的所有唯一性特性。
我可以在标准和 Short UUID 格式之间转换吗?
可以。这种转换是双向的 - 您可以将标准 UUID 编码为 Short UUID,并将其解码回完全相同的标准 UUID。
哪种进制编码最推荐?
58 进制通常是首选,因为它避免了容易混淆的字符(0/O 和 l/I),同时保持 URL 安全,不需要 URL 编码。
Short UUID 比标准 UUID 短多少?
标准 UUID 有 36 个字符(带连字符)。使用 58/62/64 进制编码时,Short UUID 通常有 22 个字符,减少了约 40%。
我应该在数据库中存储 Short UUID 吗?
通常建议在数据库中存储标准 UUID 格式,只在向用户显示或在 URL 中使用时转换为 Short UUID。这提供了与数据库 UUID 类型更好的兼容性。