> qr-optimized | efficient | modern <
// 针对 QR 码和数字证书优化的 Base45 编码
为二维码优化
仅使用二维码字母数字模式支持的字符,在保证可读性的前提下提升数据密度和扫描成功率。
符合 RFC 9285
实现官方 Base45 标准(RFC 9285),被欧盟数字新冠证书等数字健康证书广泛采用。
空间利用更高
在二维码中比 Base32 更高效,通常也比 Base64 更适合二维码场景,可减小二维码尺寸和复杂度。
>> 技术说明
Base45 的工作原理:
Base45 使用 45 个字符,这些字符与二维码字母数字模式完全兼容。数据通常以每 2 个字节映射为 3 个 Base45 字符的方式编码,使得在二维码中存储数据时比 Base64 更节省空间。
示例:
"Hello" → %69 VD92EX0
为什么选择 Base45:
- >在限定大小的二维码中承载更多结构化数据
- >兼容欧盟数字新冠证书等数字健康证书标准
- >降低二维码版本和模块数量,提升在纸张和屏幕上的可读性
- >在光线较差或镜头一般的设备上也更易被扫码
- >当数据最终要进入二维码时,比 Base64 更合适的选择
>> 常见问题
什么是 Base45 编码?
Base45 是一种在 RFC 9285 中定义的编码方式,使用 45 个特定字符,以便在二维码字母数字模式下高效表示数据。
Base45 为何被设计出来?
Base45 是为了在二维码中高效存储数据而设计,尤其适用于欧盟数字新冠证书等需要在小小二维码中承载较多信息的场景。
Base45 与 Base64 等其它编码有何不同?
与 Base64 不同,Base45 只使用二维码字母数字模式支持的字符,因此在二维码中能获得 20–30% 的有效容量提升。
什么时候应该使用 Base45?
当你需要将证书、票据、访问令牌或配置数据嵌入二维码时,如果关心大小和扫描可靠性,就应该考虑使用 Base45。
// 速查表
| 输入 | Base45 |
|---|---|
| AB | BB8 |
| Hello!! | %69 VD92EX0 |
| base-45 | UJCLQE7W581 |
| ietf! | QED8WEX0 |
// 代码示例
Alphabet 0-9 A-Z space $ % * + - . / : (45 characters) Length 2 bytes -> 3 chars, 1 byte -> 2 chars Python pip install base45 base45.b45encode(b"AB") # b'BB8' Node.js npm i base45-js // RFC 9285 EU DCC JSON -> CBOR -> COSE -> zlib -> Base45 -> "HC1:" -> QR
>> 更多问题
问:Base45 使用哪 45 个字符?
答:正好是二维码字母数字模式支持的字符:0–9、A–Z(仅大写)、空格以及 $ % * + - . / :。字母表由 RFC 9285 规定。
问:Base45 字符串相对原始字节有多长?
答:每 2 个输入字节生成 3 个字符,剩余的 1 个字节生成 2 个字符。n 个字节得到 3·⌊n/2⌋ + 2·(n mod 2) 个字符,约为输入长度的 150%。
问:为什么二维码中 Base45 优于 Base64?
答:二维码字母数字模式每字符约 5.5 位,而字节模式(Base64 的 +、/ 需要)为 8 位,因此同一个码能容纳更多数据。欧盟新冠证书流程为 CBOR → COSE → zlib → Base45 → 前缀 HC1: → 二维码。