Crawford Base32 ULID Format: Spesifikasi & Penjelasan

Kueri mengenai Crawford Base32 ULID Format merujuk pada implementasi spesifik dari Universally Unique Lexicographically Sortable Identifier (ULID) yang menggunakan skema encoding Base32 varian Crockford. Format ini dirancang untuk menghasilkan pengenal unik berukuran 128-bit yang memiliki komponen waktu presisi milidetik, sehingga string yang dihasilkan dapat diurutkan secara leksikografis (berdasarkan abjad/urutan karakter) sekaligus menjaga keunikan global.

Standar ULID standar menggunakan Crockford's Base32 untuk menghindari karakter yang mudah membingungkan manusia saat dibaca (seperti huruf I, L, O, dan U). Dalam konteks implementasi tertentu yang dikaitkan dengan penamaan 'Crawford', ini mengarah langsung pada penggunaan Crockford Base32 encoding pada 48-bit timestamp dan 80-bit nilai acak (randomness) dari spesifikasi asli ULID.

Struktur Anatomi Format ULID Crockford Base32

Panjang total string ULID yang dikodekan dalam Base32 adalah tepat 26 karakter. Karakter-karakter ini terbagi menjadi dua bagian utama: komponen waktu (timestamp) dan komponen keacakan (entropy). Berikut adalah tabel rincian struktur anatomi string ULID berbasis Crockford Base32:

Komponen Panjang Bit Panjang Karakter Base32 Fungsi Utama
Timestamp (Waktu) 48 bit 10 karakter Menyimpan waktu dalam milidetik sejak Unix Epoch (UTC), menjamin pengurutan waktu.
Randomness (Keacakan) 80 bit 16 karakter Menghindari bentrok (collision) pada milidetik yang sama menggunakan angka acak kriptografis.
Total ULID 128 bit 26 karakter Menghasilkan string tunggal yang unik, ramah URL, dan mudah diindeks database.

Aturan Karakter Crockford Base32

Skema encoding yang digunakan oleh ULID bukanlah Base32 standar RFC 4648, melainkan varian yang diciptakan oleh Douglas Crockford. Alfabet yang digunakan terdiri dari 32 karakter spesifik:

0123456789ABCDEFGHJKMNPQRSTVWXYZ (huruf besar dan kecil biasanya dianggap sama atau dinormalisasi ke huruf besar).

Aturan Substitusi Penting:

  • Huruf I dan i dianggap sama dengan angka 1.
  • Huruf L dan l juga dianggap sama dengan angka 1.
  • Huruf O dan o dianggap sama dengan angka 0.
  • Huruf U dan u dihilangkan dari alfabet untuk mencegah pembentukan kata-kata kotor atau tidak senonoh (profanity filter) secara tidak sengaja.

Keunggulan Penggunaan Format Ini

Dibandingkan dengan UUID v4 standar atau Auto Increment Integer pada basis data relasional, format ULID dengan Crockford Base32 menawarkan berbagai keunggulan teknis yang signifikan bagi arsitektur sistem terdistribusi:

  • Lexicographically Sortable: String yang dihasilkan dapat diurutkan secara alfabetis berdasarkan waktu pembuatan. Ini membuat pengindeksan B-Tree pada database jauh lebih efisien dibandingkan UUID acak.
  • Ramah URL & Manusia: Panjangnya pas 26 karakter tanpa simbol khusus (seperti tanda hubung pada UUID), sehingga aman digunakan dalam URL, path API, dan mudah disalin-tempel.
  • Kompatibilitas Tinggi: Karena merepresentasikan 128-bit, ULID dapat disimpan dalam kolom tipe data BINARY(16), UUID, atau VARCHAR(26) pada database modern seperti PostgreSQL, MySQL, dan SQLite.

Contoh Implementasi dan Representasi

Contoh nyata dari string ULID yang valid menggunakan aturan pengkodean ini adalah:

01ARZ3NDEKTSV4RRFFQ69G5FAV

Bila diuraikan secara mendalam:

  • Karakter 01ARZ3NDEK merepresentasikan nilai timestamp 48-bit.
  • Karakter TSV4RRFFQ69G5FAV merepresentasikan nilai acak 80-bit.

Kesimpulan Teknis

Format yang sering dicari sebagai "Crawford Base32 ULID" sebenarnya adalah penerapan Crockford's Base32 pada standar ULID. Kombinasi ini memberikan solusi ideal bagi sistem skala besar yang membutuhkan ID unik berbasis waktu tanpa mengorbankan performa indeks basis data.