使用方法
- 選擇「編碼」把文字轉換為 Crockford Base32,或選擇「解碼」把它還原為文字。
- 保持選擇 Crockford 變體,並確認「填充」已關閉。如果需要小寫輸出,可以勾選「小寫」。
- 輸入或貼上內容,也可以開啟檔案。解碼時會忽略連字元和空格。
- 複製結果,或將結果下載為檔案。
什麼是 Crockford Base32?
Douglas Crockford 設計這套 Base32 字母表,是為了讓識別符號便於人工閱讀、輸入和口頭傳達。它由 10 個數字和 22 個大寫字母組成:0123456789ABCDEFGHJKMNPQRSTVWXYZ。去掉 I 和 L 是因為它們像數字 1,去掉 O 是因為它像 0,去掉 U 則是為了降低意外拼出不雅英文單詞的可能。
每個符號承載 5 位,因此 5 個位元組變成 8 個字元,與 RFC 4648 Base32 相同。符號按 ASCII 升序排列,所以大小寫一致、不帶填充的字串,其排序與所編碼的資料一致。Crockford 規範不使用填充,因此請保持「填充」選項關閉。
容錯解碼
Crockford 規範要求解碼器接受人們實際輸入的各種寫法,本工具也是這樣處理的:
- 大寫和小寫字母視為相同。
- 字母 O 讀作數字 0,字母 I 和 L 讀作 1。
- 為方便閱讀長程式碼而插入的連字元會被忽略,空格和換行也一樣。
字母 U 不是合法字元,出現時會連同位置一起報錯。
位元組、數字與 ULID
Crockford 的規範以數字為物件來描述編碼,而本工具按 RFC 4648 的方式把位元組序列切成 5 位一組,再用 Crockford 的符號表示。當總位數不是 5 的倍數時,基於數字的實現會把多出的零位補在前面,本工具則補在末尾,因此結果可能不同。
ULID 就是一個典型例子。它使用 Crockford 字母表,但把 128 位的值當作一個數字編碼成 26 個字元,所以 ULID 的 16 個位元組在這裡編碼出的字串並不相同,而解碼 ULID 得到的位元組會錯開兩位。Crockford 規範中可選的校驗符號(表示模 37 餘數的額外字元)本工具不支援,既不會新增也不會驗證。
編碼規格
| 字母表 | 0-9 A-Z,去掉 I L O U |
|---|---|
| 輸出體積 | 每 5 位元組輸出 8 個字元(160%) |
| 填充 | 無 |
| 標準 | Crockford Base32(2002) |
| 區分大小寫 | 否 |
編碼範例
| 輸入 (UTF-8) | 輸出 |
|---|---|
Hello, World! | 91JPRV3F5GG5EVVJDHJ22 |
Base64.is | 89GQ6S9P6GQ6JWR |
你好 | WJYT1SD5QM |
常見問題
Crockford Base32 區分大小寫嗎?
不區分。輸出預設是大寫,勾選「小寫」可以改為小寫。解碼器兩種寫法都接受,即使在同一個字串中混用也沒問題。
字母表裡為什麼沒有 I、L、O、U?
I 和 L 容易被看成 1,O 容易被看成 0,所以它們被排除在外,解碼時會被當作對應的數字。排除 U 是為了讓隨機生成的程式碼不容易拼出冒犯性的英文單詞。
本工具支援 Crockford 校驗符號嗎?
* ~ $ = U 這幾個符號。本工具不會新增或驗證校驗符號,解碼前請先將其刪除。可以在這裡解碼 ULID 嗎?
無法得到準確的 16 個位元組。ULID 把 128 位當作一個數字編碼,多出的位補在前面,而本工具按位元組分組,把多出的位補在末尾。讀取 ULID 的時間戳和隨機部分請使用專門的 ULID 庫。