Base62 编码解码

将文本、十六进制字节或文件转换为 Base62,也可以反向解码。输出只包含数字和字母,无需转义即可用于 URL、文件名和各类标识符。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 选择“编码”把文本转换为 Base62,或选择“解码”把 Base62 还原为文本。
  2. 选择与目标系统一致的字母表顺序:0-9 A-Z a-z(默认)或 0-9 a-z A-Z。
  3. 输入或粘贴内容,也可以打开较小的文件(约 20 KB 以内)。
  4. 复制结果,或将结果下载为文件。

什么是 Base62?

Base62 使用 10 个数字、26 个大写字母和 26 个小写字母,是只由字母和数字组成的最大字母表,因此结果在 URL、文件名、数据库键和代码标识符中都无需转义。每个字符约承载 5.95 位,输出约为输入的 1.34 倍,几乎和 Base64 一样紧凑,却不含 +、/、=、- 或 _。

由于 62 不是 2 的幂,本工具与 Base58、Base36 一样,把整个输入当作一个大整数转换为 62 进制。每个前导零字节写成一个 0,以便在往返转换中保留下来。数据越大运算越慢,因此输入限制在约 20 KB 以内。

Base62 没有统一标准

与 Base64 不同,Base62 没有 RFC 标准,各种实现在以下方面存在差异,结果往往互不兼容:

  • 字母表顺序。本工具提供 0-9A-Za-z(默认)和 0-9a-zA-Z 两种,另一些库则把字母放在数字前面。
  • 前导零。有的实现像本工具一样为每个前导零字节保留一个 0,有的直接丢弃,固定长度的格式则会补齐到指定宽度。
  • 编码对象。很多 Base62 函数编码的是整数(例如数据库 ID),而不是字节序列;还有的把数据切成固定大小的块分别编码。

如果来自其他系统的字符串在这里解码出乱码,可以换用另一种字母表;仍然不行的话,说明对方很可能使用了不同的方法。

Base62 的常见用途

短链接服务把自增 ID 转换为短代码,7 个 Base62 字符就能表示超过 3.5 万亿个值。KSUID 等可排序 ID 采用固定 27 个字符的 Base62 形式;许多服务也用 Base62 生成 API 密钥和令牌,因为双击就能选中整个字符串,粘贴到哪里都不会出问题。若要转换单个整数,可以使用进制转换器,或者写几行代码:

// JavaScript:把整数(BigInt)转换为 Base62
const A = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
function toBase62(n) {
  let s = '';
  do { s = A[Number(n % 62n)] + s; n /= 62n; } while (n > 0n);
  return s;
}
toBase62(123456789n);   // '8M0kX'

编码规格

字母表0-9 A-Z a-z
输出体积约 134%(大数进制转换)
填充无
标准无正式标准
区分大小写是

编码示例

输入 (UTF-8)输出
Hello, World!1wJfrzvdbtXUOlUjUf
Base64.isNWxjrFq4r3rv
你好19PqtKE1t

常见问题

Base62 是 URL 安全的吗?
是的。它只使用 A-Z、a-z 和 0-9,在 URL 中永远不需要转义。Base64URL 也是 URL 安全的,但包含 - 和 _ 两个字符。
为什么 Base62 字符串解码后文字不对?

不同的 Base62 实现在字母表顺序和编码方法上各不相同。请在 0-9A-Za-z 和 0-9a-zA-Z 两种字母表之间切换试试;如果都不对,这个字符串很可能是由整数生成的,或使用了其他算法。

Base62 区分大小写吗?

区分。大写和小写字母代表不同的值,所以绝不能把 Base62 字符串统一转换为大写或小写。

该选 Base62 还是 Base58?
Base58 去掉了 0、O、I 和 l,避免人工抄写时混淆;Base62 保留全部字母和数字,长度略短。需要人工输入的字符串选 Base58,主要由程序处理的字符串选 Base62。