> base36 | 0-9,A-Z | 紧凑 <
// Base36 —— 使用数字 0-9 和字母 A-Z 的紧凑字母数字编码
仅使用字母和数字
只使用数字 0-9 和字母 A-Z,兼容数据库、URL 以及多数文本环境。
紧凑表示
比十进制更紧凑地表示大整数,同时仍然易于阅读和复制。
适合 URL
不包含特殊字符,非常适合短链接、公开 ID、产品编码和许可证密钥等场景。
>> 技术说明
Base36 的工作原理:
Base36 是一种以 36 为基数的进位制系统,使用 36 个符号(0-9 和 A-Z)。每一位代表 36 的幂次,从而可以将大数压缩为短小的字母数字字符串。
Base36 示例:
数字 → Base36: 123 → 3F 1000 → RS 999999 → LFLR 文本 → Base36(按字节编码): Hi → 1Q5 ABC → 3O0AF 常见用途: - 视频/资源 ID - 短链接 - 会话令牌 - 产品序列号 - 许可证密钥
为什么使用 Base36:
- ▸从整数生成短而可读的标识符
- ▸生成不含特殊字符的 URL 安全令牌
- ▸将数值压缩为紧凑的字母数字字符串
- ▸通常不区分大小写,对大小写变化比较宽容
- ▸在某些场景下,比十六进制更容易被人理解
>> 常见问题
什么是 Base36?
Base36 是一种位置记数系统,使用 36 个不同符号:数字 0-9 和字母 A-Z。它可以仅用字母和数字紧凑地表示整数。
Base36 通常用在什么场景?
Base36 常用于生成短 ID,如短链接、公开资源 ID、产品编码、会话令牌等,兼顾紧凑性和可读性。
Base36 是否区分大小写?
在多数实现中,Base36 对大小写不敏感:A-Z 与 a-z 通常被视为相同,这有助于避免大小写变化导致的错误。
Base36 与其它编码方式相比如何?
Base36 比十进制(base10)更紧凑,但不如十六进制(base16)或 Base64 紧凑。它只使用字母和数字,在紧凑性与易读性之间取得平衡。
// 速查表
| DEC | HEX | Base36 | Base62 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 35 | 23 | z | z |
| 36 | 24 | 10 | A |
| 100 | 64 | 2s | 1c |
| 1000 | 3e8 | rs | G8 |
| 123456789 | 75bcd15 | 21i3v9 | 8M0kX |
| 4294967295 | ffffffff | 1z141z3 | 4gfFC3 |
// 代码示例
JavaScript (123).toString(36) // "3f" parseInt("3f", 36) // 123
Python int("3f", 36) // 123 (no built-in int -> base36; write a loop)
Java Integer.toString(123, 36) Long.parseLong("3f", 36)
PHP base_convert("123", 10, 36)
Go strconv.FormatInt(123, 36) strconv.ParseInt("3f", 36, 64)
>> 更多问题
问:在 JavaScript、Python、Java 中如何使用 Base36?
答:JavaScript、Java、PHP、Go 都内置支持:(123).toString(36) 得到 "3f",parseInt("3f", 36) 还原为 123。Python 中 int(s, 36) 可解码,编码需自己写一个小循环。
问:Base36 能编码的最大整数是多少?
答:理论上没有上限,Base36 只是一种位置计数法。实际受整数类型限制:JavaScript 中 Number.MAX_SAFE_INTEGER(2⁵³−1)对应 2gosa7pa2gv,更大的值请使用 BigInt。
问:为什么 YouTube 和短链接的 ID 看起来像 Base36/Base62?
答:短 ID 通常由大整数(数据库 ID 或哈希)转换到更高进制得到。Base36 不区分大小写;Base62 更短,但区分大小写。