← 中文资源

简体中文版本

用于紧凑标识符的 Base62 编码

用 BigInt 把非负整数编码为短 Base62 字符串并解码还原,拒绝负数、小数与非法字符。

阅读英文原文

功能说明

Base62 用 0 到 9、A 到 Z、a 到 z 表示整数,字符串比十进制短且只含 URL 安全字符。该实现使用 BigInt 避免大整数精度损失,编码非负整数,解码时逐字符累加并拒绝非法字符。它适合短链接、订单号和数据库自增 ID 的外部表示。

关键代码

encodeBase62 接受 number 或 bigint,负数抛 RangeError,0 直接返回字符串 0。循环取模 62 得到字符索引并前插,然后整除。decodeBase62 校验非空字符串,用 indexOf 查字符,未知字符抛错,结果用 BigInt 累加。

while (remaining > 0n) {
  output = ALPHABET[Number(remaining % BASE)] + output;
  remaining /= BASE;
}

使用注意

编码结果不是定长,不包含前导零,因此无法用长度判断数值范围。number 输入必须是可安全转换的整数,小数会抛 TypeError。字母表顺序固定,与其他 Base62 实现的字母表可能不兼容,双方必须约定一致。解码不校验业务层唯一性。

验证方式

断言 encodeBase62(0) 返回 0,encodeBase62(61) 返回 z,encodeBase62(62) 返回 10。decodeBase62(“10”) 返回 62n。负数抛 RangeError,小数抛 TypeError,非法字符抛 RangeError,空字符串抛 TypeError。大整数往返后应相等。