Base36

Posted by Adam on August 24, 2022
Base36 是一種**36 進位**的數值編碼系統。它使用 36 個字元來表示數值,包含了 **10 個阿拉伯數字(0-9)** 與 **26 個英文字母(A-Z)**,並且通常**不區分大小寫**。 它的主要目的不是加密,而是將較長的數字「壓縮」成更短的字串,同時維持人類易讀的特性。 ## 📌 核心知識 * **字元集**:`0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, ..., Z`(對應十進位的 0 到 35)。 * **字串長度短**:比傳統的十進位(Base10)更短,能有效縮短網址或 ID。 * **URL 友善**:使用的字元全部屬於 URL 安全字元(不需轉義),非常適合用於網址。 * **不區分大小寫**:與 Base64(區分大小寫)不同,Base36 中的 `a` 與 `A` 代表相同數值,輸入時不易出錯。 ## 🔸 類似概念 * **Base10(十進位)**:僅使用 `0-9`。例如:`1234567`。 * **Base16(十六進位 / Hex)**:使用 `0-9` + `A-F`,經常用於程式碼、顏色碼(如 `#FFFFFF`)。 * **Base36(三十六進位)**:使用 `0-9` + `A-Z`,平衡了長度與可讀性。 * **Base64(六十四進位)**:使用 `0-9` + `a-z` + `A-Z` + `+` + `/`,字串更短但區分大小寫,且包含特殊符號。 ## 📝 範例說明 ### 1. 進位轉換範例 十進位數字 **`46655`** 轉換成 Base36: * $46655 = 35 \times 36^2 + 35 \times 36^1 + 35 \times 36^0$ * 對應字元:$35 \rightarrow Z$ * 轉換結果為 **`ZZZ`**(將 5 位數壓縮成 3 位字元)。 ### 2. 常見實際應用 * **網址縮短服務(URL Shortener)**:將資料庫中的 Auto-increment ID(如 `1000000`)轉成 Base36(`LFL0`),組成短網址 `[https://example.com/LFL0](https://example.com/LFL0)`。 * **Reddit 的 文章 ID**:Reddit 網址中的文章代碼(如 `[https://reddit.com/r/.../comments/18x9y0z/](https://reddit.com/r/.../comments/18x9y0z/)`)其中的 `18x9y0z` 就是 Base36 編碼。 * **訂位碼與序號**:航空公司或票券系統產生的 6 位數英文數字混排序號,常採用類似 Base36 的機制。