Generator ULID

Hasilkan pengidentifikasi yang dapat diurutkan secara leksikografis dengan timestamp dan keacakan

Coba contoh ini:

Apa itu ULID?

ULID (Universally Unique Lexicographically Sortable Identifier) adalah format pengenal 128-bit yang dirancang untuk mengatasi keterbatasan UUID. Ini terdiri dari:

  • Timestamp: 48 bit waktu Unix dengan presisi milidetik
  • Randomness: 80 bit data acak yang aman secara kriptografis
  • Encoding: Representasi Base32 (26 karakter)

Contoh format: 01ARZ3NDEKTSV4RRFFQ69G5FAV

Cara kerja ULID

  1. Hasilkan 48 bit untuk timestamp (waktu Unix dalam milidetik)
  2. Hasilkan 80 bit data acak yang aman secara kriptografis
  3. Gabungkan timestamp (paling signifikan) dengan randomness (paling tidak signifikan)
  4. Encode seluruh nilai 128-bit menggunakan alfabet Base32 Crockford
  5. Hasilnya adalah string 26 karakter (10 karakter pertama adalah timestamp, 16 terakhir adalah randomness)

Keuntungan & Pertimbangan

AdvantagesConsiderations
  • Dapat diurutkan secara leksikografis
  • Set karakter aman URL
  • Tidak perlu encoding khusus
  • Case-insensitive
  • Tidak ada kekhawatiran privasi
  • Lebih baru, kurang banyak digunakan
  • Dukungan pustaka terbatas
  • Tidak kompatibel dengan UUID
  • Tidak bisa kembali sebelum tahun 1970

Struktur ULID

ComponentBitsCharactersDescription
Timestamp48 bit10 karakterUnix timestamp (ms) yang di-encode dalam Base32
Randomness80 bit16 karakterByte acak yang di-encode dalam Base32

Perbandingan ULID vs. UUID

FeatureULIDUUID v1UUID v4UUID v7
Size128 bit128 bit128 bit128 bit
Panjang string26 karakter36 karakter36 karakter36 karakter
Time-based
Pengurutan alami
Aman untuk URL
Eksposur alamat MAC
Komponen acak
Standar kanonik⚠️ Draft

Kasus Penggunaan Umum

  • Kunci utama database: Indeks yang dioptimalkan untuk performa
  • Sistem terdistribusi: Pembuatan tanpa koordinasi
  • APIs: Pengidentifikasi bersih dan aman untuk URL
  • Data deret waktu: Pengurutan kronologis asli
  • Sistem log: Pengidentifikasi acara yang dapat diurutkan
  • Aplikasi modern: Tempat keterbatasan UUID menjadi masalah

Mengapa Memilih ULID?

  • Sortability: Mengurutkan secara leksikografis berdasarkan waktu pembuatan
  • Keamanan URL: Tidak perlu encoding URL (berbeda dengan UUID yang menggunakan tanda hubung)
  • Compactness: 26 karakter vs 36 untuk UUID
  • Tidak peka huruf besar/kecil: Mengurangi kesalahan input pengguna
  • Monotonicity: Pengurutan monoton opsional dalam milidetik yang sama
  • Tidak ada karakter khusus: Format sederhana hanya alfanumerik

Pertanyaan yang Sering Diajukan

Bagaimana ULID dibandingkan dengan UUID v7?

Keduanya menggunakan Unix timestamps untuk pengurutan dan memiliki komponen acak. Perbedaan utama adalah encoding (Base32 vs hex), format (26 karakter vs 36), dan standardisasi (UUID v7 masih dalam spesifikasi RFC draft).

Bisakah saya mengekstrak waktu pembuatan dari ULID?

Ya. 10 karakter pertama mewakili Unix timestamp dengan presisi milidetik yang dapat didekode dan diubah menjadi datetime standar.

Apakah ULID kompatibel dengan field database UUID?

Tidak. ULID menggunakan format berbeda dan harus disimpan sebagai string atau data biner, bukan dalam tipe database UUID asli.

Apa itu monotonicity dalam ULID?

Beberapa implementasi ULID menawarkan opsi monotonik yang memastikan urutan pengurutan berurutan bahkan dalam milidetik yang sama dengan menambah komponen acak untuk ULID yang dibuat dalam timestamp yang sama.

Set karakter apa yang digunakan ULID?

ULID menggunakan encoding Base32 Crockford (0-9, A-Z kecuali I, L, O, U) yang dirancang untuk meminimalkan kebingungan dan kesalahan transkripsi saat ID dibaca atau dimasukkan secara manual.

Resources

Alfabet Base32 Crockford

Nilai EncodingCharacterNotes
0-90-9Digit desimal
10-31A-ZMengecualikan I, L, O, U untuk keterbacaan

Karakter: 0123456789ABCDEFGHJKMNPQRSTVWXYZ

Encoding ini tidak peka huruf besar/kecil untuk decoding (tetapi ULID biasanya dihasilkan dalam huruf besar).