Generator CUID Efisien untuk Pengidentifikasi Unik dalam Sistem
Hasilkan pengidentifikasi unik yang tahan terhadap tabrakan (CUID) untuk sistem terdistribusi, basis data, dan aplikasi web. Buat ID yang dapat diskalakan dan dapat diurutkan secara instan.
Generator CUID
Hasilkan ID yang tahan terhadap tabrakan dengan cepat dan mudah.
Dokumentasi
Apa Itu CUID?
CUID (pengidentifikasi unik yang tahan tabrakan) adalah string pendek yang terdiri dari huruf dan angka, digunakan untuk memberi label pada rekaman, berkas, atau peristiwa agar tidak ada dua item yang memiliki nama sama. Alat ini menghasilkan CUID2, versi format saat ini, menggunakan pustaka @paralleldrive/cuid2. Setiap ID memiliki panjang 25 karakter, hanya berisi huruf kecil dan angka, serta dibuat sepenuhnya di peramban—tidak ada yang dikirim ke server.
Cara Menggunakan Generator CUID Ini
- Klik Generate New CUID untuk membuat ID.
- Klik Copy to Clipboard untuk menyalinnya.
- Tempelkan ID ke dalam basis data, nama berkas, atau aplikasi.
- Klik generate lagi untuk mendapatkan ID lain. Tabrakan antara nilai CUID2 yang terpisah sangat kecil kemungkinannya, meskipun secara matematis bukan mustahil.
- Klik Reset untuk menghapus hasil.
ID yang dihasilkan juga disimpan di URL halaman, sehingga tautan ke hasil tersebut dapat dibagikan atau disimpan sebagai penanda.
Struktur dan Rumus CUID2
CUID2 dibentuk sebagai berikut:
1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2Fungsi hash mencampurkan empat masukan privat: waktu saat ini, penghitung per sesi, sidik jari mesin host, dan entropi acak. Masukan tersebut diproses melalui SHA3-512, hasilnya dikonversi ke basis 36 (digit 0–9 dan huruf a-z), lalu 24 karakter dari hasil tersebut dipertahankan. Huruf awal acak membuat panjang ID akhir menjadi 25 karakter, sesuai panjang yang ditetapkan untuk alat ini.
Hanya karakter pertama yang berdiri sendiri: huruf acak yang ditempatkan di bagian depan agar setiap ID dimulai dengan huruf, bukan angka. Banyak sistem, seperti nama tabel dan kolom SQL, mengharuskan pengidentifikasi dimulai dengan huruf, sehingga CUID2 aman digunakan sebagai nama di hampir semua tempat. Setiap karakter setelah huruf pertama merupakan bagian dari satu badan hash berkesinambungan yang tidak dapat dibaca—tidak ada bagian terpisah di dalamnya.
Karena hash hanya berjalan satu arah, tidak ada masukan yang dapat diambil kembali dari ID akhir. CUID2 tidak memiliki stempel waktu, penghitung, atau sidik jari yang dapat dipulihkan. Ini merupakan pilihan yang disengaja untuk privasi dan keamanan: ID saja tidak dapat mengungkapkan kapan atau di mana ID tersebut dibuat.
Contoh perhitungan
Pembuatan ID dengan alat ini dapat menghasilkan:
1vcpuhcj51eomj1o31dnlqopu0
2Di sini, v adalah huruf awal acak, sedangkan cpuhcj51eomj1o31dnlqopu0 (24 karakter) adalah badan hash. Kedua bagian tersebut tampak berbeda hanya karena karakter pertama dijamin berupa huruf—badan hash dapat berisi campuran huruf dan angka.
Mengapa Sistem Menggunakan CUID2
- Tidak memerlukan koordinasi. Mesin mana pun dapat membuat ID yang valid secara mandiri, tanpa meminta nilai berikutnya kepada server pusat atau basis data.
- Tahan terhadap tabrakan. Campuran waktu, penghitung, sidik jari host, dan entropi acak membuat kemungkinan dua mesin menghasilkan ID yang sama sangat kecil, bahkan saat menghasilkan banyak ID per detik.
- Ramah URL. CUID2 hanya menggunakan huruf kecil dan angka, sehingga tidak perlu dikodekan untuk digunakan dalam alamat web.
- Pembuatan cepat dan privat. Karena alat ini menjalankan generator di peramban, ID dibuat seketika dan tidak pernah meninggalkan perangkat.
ID CUID2 tidak dapat diurutkan berdasarkan waktu pembuatan. Berbeda dari angka kenaikan otomatis pada basis data atau format CUID lama (versi 1), CUID2 menyembunyikan stempel waktunya di dalam hash, bukan menyimpannya secara terbuka. Aplikasi yang perlu mengurutkan rekaman berdasarkan urutan pembuatan harus menyimpan kolom stempel waktu terpisah di samping ID.
CUID2 vs. UUID vs. ID Kenaikan Otomatis
| Fitur | CUID2 | UUID v4 | Kenaikan otomatis |
|---|---|---|---|
| Panjang | 25 karakter | 36 karakter (dengan tanda hubung) | Bervariasi (biasanya berupa angka pendek) |
| Kumpulan karakter | Huruf kecil dan angka | Digit heksadesimal dan tanda hubung | Digit |
| Memerlukan koordinasi pusat | Tidak | Tidak | Ya (urutan basis data) |
| Dapat diurutkan berdasarkan waktu pembuatan | Tidak | Tidak | Ya |
| Ramah URL tanpa pengodean | Ya | Ya | Ya |
CUID2 dan UUID v4 menyelesaikan masalah yang sama: menghasilkan ID tanpa koordinasi pusat. CUID2 lebih pendek dan menggunakan kumpulan karakter yang lebih kecil, sehingga lebih mudah dibaca dan ditempelkan ke URL. UUID juga aman digunakan dalam alamat web karena tanda hubung merupakan karakter yang tidak dicadangkan dalam URL, tetapi panjangnya 11 karakter lebih banyak.
Kegunaan Umum
- Kunci utama dalam basis data terdistribusi, tempat beberapa server menyisipkan baris secara independen
- ID permintaan atau pelacakan yang digunakan untuk mengikuti satu tindakan di beberapa layanan mikro
- Nama berkas untuk unggahan, agar dua berkas tidak pernah saling menimpa
- ID sesi atau token untuk aplikasi web
- ID pesan dalam antrean seperti Kafka atau RabbitMQ
Sejarah Singkat
Format CUID asli dirilis oleh Eric Elliott pada 2012 sebagai alternatif untuk UUID dalam aplikasi terdistribusi. CUID2, yang diterbitkan oleh proyek Paralleldrive yang sama, merancang ulang format tersebut dengan hash kriptografis dan menghapus stempel waktu serta penghitung yang dapat dipulihkan dan sebelumnya terekspos oleh versi asli. Alat ini hanya menghasilkan ID CUID2.
Pertanyaan yang sering diajukan
Apa perbedaan antara CUID (v1) dan CUID2? CUID v1 menyimpan stempel waktu dan penghitung yang terlihat di dalam ID, sehingga ID dapat diurutkan, tetapi juga membocorkan kapan dan berapa banyak ID yang telah dibuat. CUID2 mengganti bidang yang terlihat tersebut dengan hash satu arah, sehingga tidak ada informasi yang dapat dibaca kembali dari ID.
Apakah CUID dari alat ini dapat diurutkan berdasarkan waktu pembuatan? Tidak. CUID2 tidak memiliki stempel waktu yang dapat dipulihkan, sehingga ID tidak dapat diurutkan berdasarkan waktu pembuatannya hanya dengan melihat string tersebut.
Berapa panjang ID yang dihasilkan, dan apakah panjangnya dapat diubah? Alat ini selalu menghasilkan ID dengan panjang 25 karakter. Alat ini tidak menyediakan opsi untuk meminta panjang yang berbeda.
Dapatkah dua mesin berbeda menghasilkan CUID2 yang sama pada waktu yang sama? Secara teori mungkin, tetapi dalam praktiknya sangat kecil kemungkinannya. Setiap ID mencampurkan sidik jari khusus host dengan entropi acak, sehingga mesin yang independen sangat kecil kemungkinannya menghasilkan hash yang sama.
Apakah alat ini mengirimkan data ke server? Tidak. ID dibuat oleh JavaScript yang berjalan di peramban menggunakan jam sistem lokal dan keacakan yang disediakan peramban. Tidak ada data yang dikirimkan.
Dapatkah saya menggunakan CUID2 sebagai kunci utama basis data?
Ya. ID CUID2 berfungsi baik sebagai kunci utama dalam basis data terdistribusi karena setiap node dapat membuatnya tanpa memeriksa urutan pusat. ID tersebut tidak secara alami terurut berdasarkan waktu penyisipan, sehingga aplikasi yang memerlukan urutan itu harus menyimpan kolom created_at terpisah.