上传文件
  1. base64hub
  2. 其他进制编码
  3. Base62

Base62 在线编码与解码

输入文本即可得到 Base62,这是许多短链接和 ID 背后由数字和字母组成的编码。Base62 没有统一的标准字母表顺序,所以请选择你的库所用的那种:0-9 A-Z a-z 或 0-9 a-z A-Z。

免费 无需注册,不限次数 本地 不上传任何内容 2 种字母表 0-9A-Za-z 和 0-9a-zA-Z 更新于 2026年10月27日
输入 0字节 0 B输出 0

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何编码和解码 Base62

  1. 在 输入 · 文本 中输入或粘贴文本。Base62 字符串会显示在 输出 · Base62 中。
  2. 把输出下方的 字母表 设为与对接系统一致的顺序:0-9 A-Z a-z 或 0-9 a-z A-Z。
  3. 对于数字 ID,请把 从 改为 整数(大数),并输入十进制数字。对于原始字节,请选择 Hex 或 Base64。
  4. 要解码,请在方向切换中点击 Base62 → 文本。此时 字母表 选项会移到输入下方,它必须与编码时使用的一致。

两种字母表顺序及其不同结果

Base62 没有 RFC,实际使用中这 62 个字符有两种排列方式。本转换器两种都支持:

字母表A 的值a 的值Hello数字 1000000
0-9 A-Z a-z10365TP3P3v4C92
0-9 a-z A-Z36105tp3p3V4c92

第一种顺序遵循 ASCII 顺序,所以等长的编码字符串排序结果与数字的顺序一致。GMP 在 37 到 62 进制中使用这种顺序。第二种顺序相当于沿着十六进制的小写 a-f 继续扩展;有些库称之为“反转”字母表。

两种输出中,一个就是把另一个的每个字母大小写翻转后的结果。这让错误很容易被忽视:用错误的顺序解码 5tp3p3V 也会成功,只是得到的是字节 4e 08 14 29 1d,而不是 Hello。如果解码出的值看起来是乱码,先试试另一种顺序,再怀疑数据本身。

用于短 ID 和短链接的 Base62

短链接服务和 ID 方案使用 Base62,因为它的每个字符在 URL 路径、文件名和双击选中中都是安全的,而且结果很短。数据库 ID 是数字,所以请从 整数(大数) 编码:

十进制Base62(0-9A-Za-z)
12521
3843zz
3844100
10000004C92
1234567898M0kX

七个字符能表示最大 62^7 − 1 的数,约 3.5 万亿。对于随机 ID,请编码随机字节:16 字节的 UUID 变成 21 或 22 个字符,而 hex 需要 32 个。

较短的顺序 ID 会暴露记录总数,也很容易被猜到。如果这一点很重要,请编码随机字节而不是计数器。

Base62 如何处理字节和前导零

由于 62 不是 2 的幂,Base62 无法把比特组映射为字符。它把输入读作一个大端序的大数,再把这个数转换为 62 进制。前导零字节会消失,所以本工具为每个前导零字节写一个 0:字节 00 00 编码为 00,00 ff 编码为 047。

在这一点上各个库也不一样。很多库只编码数字并丢掉前导零,固定宽度的格式则会补齐到固定长度。如果接收方期望固定宽度,请在输出左侧补 0。大数方法的开销还会随输入长度的平方增长,所以本工具把 Base62 输入限制在 64 KB。

在 Python 中使用 Base62

Python 标准库中没有 Base62。对于整数 ID,转换只需几行代码:

ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

def b62encode(n: int) -> str:
    if n == 0:
        return ALPHABET[0]
    out = ""
    while n:
        n, r = divmod(n, 62)
        out = ALPHABET[r] + out
    return out

def b62decode(s: str) -> int:
    n = 0
    for ch in s:
        n = n * 62 + ALPHABET.index(ch)
    return n

b62encode(1000000)    # '4C92'
b62decode("8M0kX")    # 123456789

要使用另一种顺序,交换 ALPHABET 中的两段字母即可。对于字节,先用 int.from_bytes(data, "big") 转换。更多字节处理见 Python。

常见问题

Base62 的字母表是什么?

十个数字加上 26 个大写字母和 26 个小写字母,共 62 个字符,没有别的。数字总是排在最前面,但各个库对接下来是大写(0-9A-Za-z)还是小写(0-9a-zA-Z)意见不一。

Base62 和 Base64 有什么区别?

Base64 多了 + 和 /(或 - 和 _)以及 = 填充,并按固定的 6 比特分组映射。Base62 只使用字母和数字,所以在任何地方都不需要转义;但 62 不是 2 的幂,它必须把数据当作一个大数处理。输出比 Base64 长约 1%。

如何把数字编码为 Base62?

把 从 设为 整数(大数),然后输入十进制数字。使用默认字母表时,1000000 变成 4C92。如果把数字当作文本编码,编码的就是它的数字字符。

Base62 区分大小写吗?

区分。A 和 a 是不同的数字,在默认顺序中分别为 10 和 36。会把 URL 或 ID 转成小写的系统会损坏 Base62 字符串;如果大小写可能丢失,请使用 Base36。