科普

Base62 编码详解:短链接与唯一 ID 生成的高效编码方案

全面了解 Base62 编码的工作原理、62 个字符的字母表、编解码算法,以及它在短链接生成、分布式 ID、URL 缩短服务等领域的广泛应用。

什么是 Base62?

Base62 是一种二进制到文本的编码方案,使用 62 个可打印字符来表示任意二进制数据或整数值。这 62 个字符由 10 个阿拉伯数字(0-9)26 个大写字母(A-Z)26 个小写字母(a-z) 组成,是 ASCII 可打印字符中全部字母数字字符(alphanumeric characters)的集合。

Base62 编码的核心优势在于:它完全由字母和数字组成,不包含任何特殊符号,因此天然适合作为 URL、文件名、数据库主键以及各种标识符的编码方式。在互联网应用中,Base62 已成为短链接服务、分布式 ID 生成器和唯一标识系统的首选编码方案之一。

在线工具推荐:需要进行 Base62 编码或解码?试试我们的在线 Base62 编解码工具,支持文本、十六进制和数值模式的实时转换。

Base62 字符表

Base62 使用以下 62 个字符作为编码字母表:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

每个字符对应一个从 0 到 61 的索引值:

范围字符索引值
数字0 - 90 - 9
大写字母A - Z10 - 35
小写字母a - z36 - 61

注意:不同的实现可能采用不同的字符顺序。上述顺序(数字 → 大写 → 小写)是最常见的标准顺序,也是我们工具所采用的方案。有些实现会将小写字母排在大写字母之前,使用时请注意确认所用字母表。

Base62 的工作原理

Base62 的编码方式取决于输入数据的类型,主要分为两种模式:数值模式(整数直接转换)和字节流模式(二进制数据编码)。

数值模式(整数 ⇄ Base62)

这是最直观的模式,本质上是十进制与 62 进制之间的进制转换。

编码过程

  1. 将输入的十进制整数反复除以 62
  2. 每次取余数作为索引,从字母表中选取对应字符
  3. 将所有字符逆序排列得到最终结果

示例:将整数 123456789 转换为 Base62

123456789 ÷ 62 = 1991238 余 33 → 字符 'X'
1991238   ÷ 62 = 32116   余 46 → 字符 'k'
32116     ÷ 62 = 518     余  0 → 字符 '0'
518       ÷ 62 = 8       余 22 → 字符 'M'
8         ÷ 62 = 0       余  8 → 字符 '8'

逆序排列结果:8M0kX

解码过程8M0kX → 123456789):

'8' = 8,  'M' = 22, '0' = 0, 'k' = 46, 'X' = 33

8 × 62⁴ + 22 × 62³ + 0 × 62² + 46 × 62¹ + 33 × 62⁰
= 118210688 + 5243216 + 0 + 2852 + 33
= 123456789

字节流模式(二进制数据 ⇄ Base62)

当需要编码文本字符串或任意二进制数据时,使用大整数转换方法:

  1. 将数据转为字节序列:例如将 UTF-8 文本转换为字节数组
  2. 将字节序列视为大整数:按大端序将所有字节拼接为一个大整数
  3. 进行 Base62 进制转换:反复除以 62 取余
  4. 保留前导零信息:输入数据中的前导零字节对应字母表中的第一个字符(0

示例:编码字符串 “Hello”

1. UTF-8 字节:   0x48 0x65 0x6C 0x6C 0x6F
2. 大整数值:     310939249775(十进制)
3. Base62 编码:  5TP3P3v

解码过程则是上述步骤的逆操作:将 Base62 字符串还原为大整数,再拆分为字节序列。

为什么选择 Base62?

1. URL 安全性

Base62 只使用字母和数字,完全不包含 URL 中的特殊字符(如 +/=),无需进行任何 URL 编码(Percent-Encoding)即可安全嵌入 URL。这是相比 Base64 的一大优势。

2. 文件系统兼容

Base62 编码后的字符串可以直接用作文件名或目录名,无需担心操作系统对特殊字符的限制。

3. 编码效率高

在所有纯字母数字的编码方案中,Base62 使用了最多的字符(62 个),编码效率接近理论上限。相比 Base32(32 个字符),Base62 编码后的字符串更短;相比 Base36(仅大小写不敏感的字母数字),Base62 利用大小写区分进一步缩短了编码长度。

4. 双击可选中

Base62 字符串在大多数文本编辑器和浏览器中,双击即可选中整个字符串,方便复制粘贴。

5. 数据库友好

纯字母数字字符串在各种数据库、编程语言和框架中都能被正确处理,无需转义或特殊处理。

Base62 与其他编码方案的比较

特性Base62Base64Base58Base36Base32
字符集大小6264583632
字符构成数字 + 大小写字母数字 + 字母 + +/无混淆字符的字母数字数字 + 大写字母大写字母 + 数字
URL 安全✅ 天然安全❌ 需要变体✅ 安全✅ 安全✅ 安全
大小写敏感
含特殊符号
需要填充是(=是(=
编码膨胀率~37%33.3%~37%~54%60%
主要用途短链接、ID 生成通用数据传输加密货币不区分大小写的 ID2FA、DNS

常见应用场景

1. 短链接服务(URL Shortener)

这是 Base62 最经典的应用场景。核心思路:

  1. 将长 URL 存入数据库,获得自增 ID
  2. 将 ID 编码为 Base62 字符串作为短码
  3. 访问短链接时解码短码,查找原始 URL 并重定向

示例:数据库 ID 123456789 → Base62 编码 → 8M0kX → 短链接 https://short.url/8M0kX

仅 6 位 Base62 字符就可以表示 62⁶ ≈ 568 亿个不同的链接。

2. 分布式唯一 ID

在分布式系统中,Base62 常用于生成紧凑的唯一标识符:

  • 雪花算法(Snowflake)ID:将 64 位整数编码为约 11 位 Base62 字符
  • UUID 压缩:将 128 位 UUID 从 32 个十六进制字符压缩到约 22 个 Base62 字符
  • MongoDB ObjectId:24 位十六进制 ID 可压缩为更短的 Base62 表示

3. 会话令牌与 API 密钥

Base62 编码的随机字符串常用作会话令牌(Session Token)、API 密钥、邀请码和验证码等。

4. 文件命名与存储

云存储服务和 CDN 常使用 Base62 编码生成上传文件的唯一名称、图片和资源的标识符。

5. 数据库分片键

在数据库分库分表场景中,Base62 编码的 ID 可以均匀分布到各分片,同时缩短主键长度、节省存储空间。

数值模式的特殊用途

Base62 的数值模式(整数 ⇄ Base62 直接转换)可以显著缩短大整数的字符串表示:

原始值十进制长度Base62 长度压缩比
10004 位2 位50%
10000007 位4 位43%
2^53 (JS 安全整数上限)16 位9 位44%
2^63 (长整型上限)19 位11 位42%

Base62 的实现要点

伪代码:字节流编码

function base62Encode(bytes):
    x = bytesToBigInt(bytes)              // 字节序列转大整数
    if x == 0:
        return "0" × bytes.length         // 处理全零输入
    result = []
    while x > 0:
        result.append(ALPHABET[x % 62])   // 取余映射字符
        x = x ÷ 62
    for each leading zero byte in bytes:
        result.append('0')                // 保留前导零
    return reverse(result)

注意事项

  1. 前导零处理:字节流模式中,输入数据的前导零字节在大整数转换时会丢失,必须单独保留。
  2. 大整数支持:处理较长数据时需要使用 BigInt(JavaScript)或类似的大整数类型。
  3. 字母表一致性:编码和解码必须使用相同的字母表,不同字母表会导致完全不同的结果。
  4. 无标准填充:与 Base64 不同,Base62 没有标准的填充机制。

Base62 的优缺点

优点

  • URL 安全:纯字母数字,无需编码即可用于 URL
  • 文件系统安全:可直接作为文件名
  • 紧凑高效:在纯字母数字编码中效率最高
  • 双击友好:整个字符串可被双击选中
  • 跨平台兼容:在任何系统和编程语言中都能正确处理

缺点

  • 大小写敏感:在不区分大小写的环境中可能出现冲突,此时应考虑 Base36
  • 编码复杂度:基于大整数运算,实现比 Base64(位操作)更复杂
  • 性能开销:大整数除法比位运算慢,处理大数据时性能不如 Base64
  • 无标准规范:没有像 Base64(RFC 4648)那样的官方标准
  • 无内置校验:不像 Base58Check 那样内置错误检测

安全性考虑

虽然 Base62 广泛用于生成令牌和标识符,但使用时需注意:

  1. Base62 不是加密:它只是一种编码方式,不提供安全性保障。敏感数据应先加密再编码。
  2. 随机性要求:用作令牌或密钥时,底层数据必须来自密码学安全的随机数生成器(CSPRNG)。
  3. 长度要求:确保 Base62 标识符有足够的长度来抵抗暴力猜测。例如,22 位 Base62 字符串提供约 131 位的熵。

如何选择合适的编码?

  • 需要 URL 安全且区分大小写:选择 Base62(短链接、API 密钥)
  • 需要最高编码效率:选择 Base64(数据传输、嵌入数据)
  • 需要人工输入不易出错:选择 Base58(加密货币地址)
  • 需要不区分大小写:选择 Base36Base32
  • 需要极致紧凑:选择 Base85Base91

总结

Base62 是一种简洁、高效且极具实用价值的编码方案。它利用全部 62 个字母数字字符,实现了在 URL 安全性和编码效率之间的理想平衡。从短链接服务到分布式 ID 生成,从会话令牌到文件命名,Base62 在现代互联网开发中有着广泛的应用。

如果你正在构建短链接系统、设计分布式 ID 方案,或者需要一种既紧凑又安全的标识符编码方式,Base62 是一个值得优先考虑的选择。赶快使用我们的 Base62 编解码工具 来亲身体验吧!