是否存在多种Base62编码算法?短链接系统设计编码结果差异疑问
关于Base62编码变体的问题解答
首先可以明确,Base62确实没有统一的强制工业标准,存在多种不同的实现变体,你遇到的结果不一致、长度超限的问题都来源于此。
核心差异点主要有两个:
- 字符集排序规则不同
Base62的字符池固定为10个数字+26个小写字母+26个大写字母共62个字符,但不同实现的排序顺序完全不统一:- 最经典的排序规则是
0-9 → A-Z → a-z,对应字符序列为0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz - 第二常见的排序规则是
0-9 → a-z → A-Z,对应字符序列为0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
还有部分实现会自定义字符排序做混淆,避免短链被轻易遍历爬取。你看到的相同输入得到不同结果,大概率是两个编码器用了不同的字符排序规则。
- 最经典的排序规则是
- 输入处理逻辑不同
部分Base62编码器是为整数进制转换设计的,会把输入的1000000当成十进制整数处理,转码后长度非常短:整数1000000小于62^4(14776336),转码后只有4位,远小于7位的短链限制。
另一部分编码器是为二进制/字符串数据转码设计的,会把输入的1000000当成字符串的ASCII字节序列处理,转码后的结果长度会大幅增加,就会出现你遇到的超出7位限制的情况。
短链系统设计的适配建议
如果你采用计数器+Base62编码的方案生成短链,不需要纠结第三方在线工具的结果:
- 自行实现编码解码逻辑,固定使用一套你自己选定的字符排序规则
- 编码对象直接用计数器的整数值,不要转成字符串处理
按这个方案7位Base62最多可以支持3.5万亿个短链,完全满足绝大多数业务的需求。
内容的提问来源于stack exchange,提问作者Harts
相关产品推荐
相关产品推荐

