Crockford Base32 adalah skema pengkodean representasi data biner ke dalam format teks berbasis 32 karakter alfanumerik yang dirancang agar mudah dibaca manusia, tidak ambigu saat diketik, dan tahan terhadap kesalahan visual maupun transkripsi. Dibuat oleh Douglas Crockford pada tahun 2001, standar ini secara spesifik menghilangkan karakter yang sering tertukar seperti huruf 'I', 'L', 'O', dan angka '1' atau '0' untuk mencegah salah interpretasi.
Standar ini banyak diadopsi dalam berbagai sistem modern yang membutuhkan representasi string pendek namun aman dari kesalahan manusia, seperti penanganan ID unik, kunci lisensi perangkat lunak, sistem keamanan OTP, hingga representasi UUID (Universally Unique Identifier). Crockford Base32 memetakan setiap 5 bit data biner ke dalam satu dari 32 karakter yang telah ditentukan, menghasilkan efisiensi kompresi data string yang lebih baik dibandingkan heksadesimal sekaligus lebih mudah diucapkan dan dibaca dibandingkan Base64.
Alfabet Resmi Crockford Base32
Alfabet Crockford Base32 hanya terdiri dari 32 karakter spesifik. Huruf vokal (I, L, O, U) sengaja dibuang sepenuhnya untuk menghindari pembentukan kata-kata yang tidak senonoh atau membingungkan secara visual, serta meminimalisir risiko kesalahan pengetikan antara huruf mirip angka.
| Nilai (Desimal) | Bit (Biner) | Karakter Standar | Karakter Alias / Alternatif Saat Dekode |
|---|---|---|---|
| 0 | 00000 | 0 | O, o |
| 1 | 00001 | 1 | I, i, L, l |
| 2 | 00010 | 2 | - |
| 3 | 00011 | 3 | - |
| 4 | 00100 | 4 | - |
| 5 | 00101 | 5 | - |
| 6 | 00110 | 6 | - |
| 7 | 00111 | 7 | - |
| 8 | 01000 | 8 | - |
| 9 | 01001 | 9 | - |
| 10 | 01010 | A | a |
| 11 | 01011 | B | b |
| 12 | 01100 | C | c |
| 13 | 01101 | D | d |
| 14 | 01110 | E | e |
| 15 | 01111 | F | f |
| 16 | 10000 | G | g |
| 17 | 10001 | H | h |
| 18 | 10010 | J | j |
| 19 | 10011 | K | k |
| 20 | 10100 | M | m |
| 21 | 10101 | N | n |
| 22 | 10110 | P | p |
| 23 | 10111 | Q | q |
| 24 | 11000 | R | r |
| 25 | 11001 | S | s |
| 26 | 11010 | T | t |
| 27 | 11011 | V | v |
| 28 | 11100 | W | w |
| 29 | 11101 | X | x |
| 30 | 11110 | Y | y |
| 31 | 11111 | Z | z |
Aturan Parsing dan Dekode Karakter
Dalam implementasi dekode (decoding) Crockford Base32, terdapat beberapa aturan toleransi input untuk memudahkan pengguna manusia:
- Case-Insensitive: Input huruf kecil otomatis dikonversi menjadi huruf kapital (kecuali jika diabaikan sebagai pemisah).
- Karakter Pengganti (Aliases): Huruf
Idanlotomatis dianggap sebagai angka1. HurufOotomatis dianggap sebagai angka0. - Tanda Pemisah (Hyphens): Karakter tanda hubung (
-) dapat dimasukkan di antara string untuk meningkatkan keterbacaan (misalnya1234-5678) dan harus diabaikan oleh mesin parser. - Checksum Opsional: Standar ini mendukung karakter cek (checksum) tambahan di akhir string menggunakan simbol bintang (
*), tanda tilde (~), atau karakter khusus lainnya untuk validasi integritas data berbasis modulo 37.
Perbedaan Utama dengan RFC 4648 Base32
Meskipun sama-sama menggunakan basis 32 bit, Crockford Base32 memiliki perbedaan fundamental dibandingkan standar RFC 4648 yang biasa digunakan pada aplikasi kriptografi seperti TOTP (Google Authenticator).
| Fitur | Crockford Base32 | RFC 4648 Base32 |
|---|---|---|
| Set Karakter | 0-9, A-Z (tanpa I, L, O, U) | A-Z, 2-7 |
| Padding (=) | Tidak menggunakan padding | Menggunakan padding '=' di akhir |
| Toleransi Ketik | Tinggi (konversi otomatis huruf mirip) | Rendah (Strict case/karakter) |
| Penggunaan Umum | URL, Serial Number, UUID, Token | Kriptografi, RFC Compliant Systems |
Implementasi Teknis Pemrograman
Dalam pemrosesan string, enkode integer atau byte array ke Crockford Base32 membutuhkan pergeseran bit (bitwise shift) dari blok 8-bit byte menjadi blok 5-bit karakter. Berikut adalah ilustrasi logika dasar dalam penanganan string:
# Contoh pemetaan string Crockford Base32 sederhana (Python Style)
ALPHABET = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"
def encode_integer(n):
if n == 0:
return "0"
res = []
while n > 0:
res.append(ALPHABET[n & 31])
n >>= 5
return "".join(reversed(res))
Pastikan sistem validasi Anda mengabaikan spasi atau karakter tanda hubung jika menerima input langsung dari pengguna akhir untuk mencegah error parsing data.