> qr-optimized | efficient | modern <
// 針對 QR Code 與數位憑證最佳化的 Base45 編碼
為 QR Code 最佳化
僅使用 QR Code 字母數字模式支援的字元,在維持可讀性的前提下提升資料密度與掃描成功率。
符合 RFC 9285
實作官方 Base45 標準(RFC 9285),廣泛應用於歐盟數位 COVID 憑證等數位健康憑證。
更高的空間效率
在 QR Code 中比 Base32 更有效率,通常也比 Base64 更適合以 QR 形式傳遞資料。
>> 技術說明
Base45 的運作方式:
Base45 使用 45 個與 QR Code 字母數字模式相容的字元。資料通常以每 2 個位元組映射為 3 個 Base45 字元的方式編碼,與 Base64 相比,在 QR Code 中可以更有效率地使用可用空間。
範例:
"Hello" → %69 VD92EX0
為何選擇 Base45:
- >在有限大小的 QR Code 中承載更多結構化資料
- >符合歐盟數位 COVID 憑證等數位憑證標準,方便互通
- >降低 QR Code 版本與模組數,提升紙本與螢幕上的可讀性
- >在光線不足或相機條件不佳時,也較容易被掃描器正確讀取
- >當資料最終要放進 QR Code 時,比 Base64 更合理的選擇
>> 常見問題
什麼是 Base45 編碼?
Base45 是 RFC 9285 中定義的一種編碼方式,使用 45 個特定字元,以便在 QR Code 字母數字模式下有效地表示資料。
為什麼會有 Base45?
Base45 的設計目的是在 QR Code 中高效率地存放資料,特別適合用於數位健康憑證、票券與憑證等需要在小小的 QR 中承載較多資訊的情境。
Base45 與 Base64 等其他編碼有何不同?
與 Base64 不同,Base45 只使用 QR Code 字母數字模式支援的字元,因此在同樣大小的 QR Code 中可以存放更多有效資料。
什麼時候應該使用 Base45?
當你需要將證書、票券、存取權杖或設定資料封裝到 QR Code 中,並且在意大小與掃描穩定性時,就適合使用 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 個字元?
答:正好是 QR 碼英數字模式支援的字元:0–9、A–Z(僅大寫)、空格以及 $ % * + - . / :。字母表由 RFC 9285 規定。
問:Base45 字串相對原始位元組有多長?
答:每 2 個輸入位元組產生 3 個字元,剩餘的 1 個位元組產生 2 個字元。n 個位元組得到 3·⌊n/2⌋ + 2·(n mod 2) 個字元,約為輸入長度的 150%。
問:為什麼 QR 碼中 Base45 優於 Base64?
答:QR 英數字模式每字元約 5.5 位元,而位元組模式(Base64 的 +、/ 需要)為 8 位元,因此同一個碼能容納更多資料。歐盟 COVID 證書流程為 CBOR → COSE → zlib → Base45 → 前綴 HC1: → QR 碼。