CUID Generator

Menghasilkan ID unik yang tahan terhadap tabrakan (CUID v1)

Jumlah

CUID yang Dibuat

Klik Buat untuk membuat CUID

CUID v1 adalah format lama. Untuk proyek baru, gunakan CUID2.

Apa itu CUID?

CUID (Collision-resistant Unique IDentifier) adalah ID unik global yang dirancang untuk aplikasi horizontal scalable.

Selalu dimulai dengan huruf c, diikuti timestamp, counter, fingerprint host, dan segmen acak — semuanya dienkodekan dalam base36.

ID bersifat URL-safe, ringkas, dan mudah dibaca, sehingga cocok untuk ID database, URL, dan pembuatan sesi.

Struktur CUID

Setiap CUID terdiri dari lima bagian yang berbeda untuk memastikan keunikan di seluruh mesin, proses, dan waktu:

Contoh:: clrc4gkwz001ag2hs3k7f9m2q
cPrefixKarakter tetap 'c' sebagai penanda tipe
lrc4gkwzTimestampUnix time dalam milidetik, dienkodekan base36
001aCounterCounter sekuensial untuk mencegah tabrakan dalam waktu bersamaan
g2hsFingerprintFingerprint host unik dari PID dan hostname
3k7f9m2qAcakSegmen acak untuk keunikan tambahan

Desain hierarki ini memastikan ID terurut secara kronologis sambil mempertahankan keacakan yang cukup untuk sistem terdistribusi.

Resistansi Tabrakan

CUID menggabungkan beberapa mekanisme untuk menjamin keunikan:

Presisi Waktu
Presisi milidetik berarti ID yang dibuat di thread eksekusi berbeda biasanya dimulai dengan nilai yang berbeda.
Counter Sekuensial
Bahkan jika dua ID dibuat dalam milidetik yang sama, counter naik untuk menjamin keunikan dalam satu proses.
Fingerprint Host
Fingerprint yang berasal dari PID dan hostname membedakan ID yang diterbitkan dari server berbeda.
Entropi Acak
Segmen acak menambahkan lapisan pertahanan ekstra terhadap tabrakan yang tersisa.

CUID vs UUID

Baik CUID maupun UUID memecahkan masalah keunikan tetapi dengan pendekatan yang berbeda:

FiturCUID v1UUID v4
FormatAlfanumerik huruf kecilHex dengan tanda hubung
SortableSebagian (timestamp pertama)Tidak (v4 acak)
URL-safeYaYa (dengan tanda hubung)
Resistansi TabrakanTinggi (struktural)Tinggi (statistik)
PrediktabilitasRendah (timestamp terlihat)Sangat rendah
Panjang25 karakter36 karakter
Memerlukan koordinasiTidakTidak

CUID lebih baik untuk ID database yang terlihat dan URL; UUID lebih umum digunakan dan memiliki dukungan lebih luas.

CUID v1 vs CUID v2

CUID v2 adalah penulisan ulang algoritma lengkap yang mengatasi masalah keamanan di CUID v1:

AspekCUID v1CUID v2
AlgoritmaKustomSHA3 + CSPRNG
KriptografiTidak (prediktabel)Ya (aman secara kriptografi)
TimestampTerlihat jelasTersembunyi dalam hash
FormatSelalu dimulai dengan 'c'Prefix yang dapat dikustomisasi
Package npmcuid@paralleldrive/cuid2
Panjang25 karakter tetapDapat dikustomisasi (default 24)

Untuk proyek baru, CUID v2 direkomendasikan karena memberikan jaminan keamanan yang lebih kuat sambil mempertahankan kemudahan penggunaan.

Kasus Penggunaan Umum

ID Database
Ideal sebagai primary key — mudah dibaca, ringkas, URL-safe tanpa encoding.
Manajemen Sesi
Menghasilkan ID sesi unik untuk aplikasi web dengan resistansi terhadap tebakan.
ID Permintaan
Melacak permintaan di seluruh sistem terdistribusi dengan ID unik yang dapat dicatat dan dilacak.
ID File
Membuat nama file unik untuk konten yang diunggah atau file sementara.
Sinkronisasi Data
Menyinkronkan data di beberapa perangkat atau database terdistribusi dengan kepercayaan keunikan.
ID URL
Membuat tautan pendek atau ID video dengan jaminan tabrakan yang minimal.

Contoh Kode

Instalasi dan penggunaan dasar:

JavaScript / TypeScript
// npm install @paralleldrive/cuid2  (recommended — CUID v2)
import { createId } from '@paralleldrive/cuid2'

const id = createId()
// → 'tz4a98xxat96iws9zmbrgj3a'

// Custom length
import { init } from '@paralleldrive/cuid2'
const createShortId = init({ length: 10 })
createShortId() // → 'zxp1l6mf4c'

Integrasi Node.js dan database umum:

Node.js (no dependencies)
// Pure Node.js — CUID v1 style (no dependencies)
let counter = 0

function pad(str, size) {
  return str.padStart(size, '0').slice(-size)
}

function fingerprint() {
  const os = require('os')
  const source = [process.pid, os.hostname().length].join('')
  let hash = 0
  for (const c of source) {
    hash = ((hash << 5) - hash) + c.charCodeAt(0)
    hash |= 0
  }
  return pad(Math.abs(hash).toString(36), 4)
}

function cuid() {
  const timestamp = Date.now().toString(36)
  const cnt       = pad((counter++ & 0xffff).toString(36), 4)
  const fp        = fingerprint()
  const rnd       = pad(Math.floor(Math.random() * 0xffffffff).toString(36), 4)
              + pad(Math.floor(Math.random() * 0xffffffff).toString(36), 4)
  return 'c' + timestamp + cnt + fp + rnd
}

console.log(cuid()) // → 'clrc4gkwz001ag2hs3k7f9m2q'

Penggunaan constraint database:

Prisma / SQL
-- Use CUID as a primary key in PostgreSQL
CREATE TABLE users (
  id   TEXT        PRIMARY KEY DEFAULT gen_cuid(),
  name TEXT        NOT NULL,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- Prisma schema (auto-generates CUID by default)
model User {
  id        String   @id @default(cuid())
  name      String
  createdAt DateTime @default(now())
}

FAQ

Apakah CUID benar-benar unik di seluruh server berbeda?
Ya — mekanisme fingerprint (PID + hostname) memastikan bahwa ID yang dikeluarkan dari server berbeda bervariasi di bagian fingerprint. Counter berbasis waktu dan segmen acak memberikan perlindungan lebih lanjut.
Bisakah CUID digunakan di browser?
Ya — library CUID kompatibel dengan browser dan Node.js. Di lingkungan browser, fingerprint menggunakan informasi navigator dan beberapa data lainnya sebagai pengganti data proses.
Seberapa besar CUID dibandingkan alternatif?
CUID v1 memiliki panjang tetap 25 karakter. UUID v4 memiliki panjang 36 karakter dengan tanda hubung. NanoID dapat dikustomisasi, biasanya 21 karakter. CUID v2 dapat dikustomisasi, default 24 karakter.
Apakah CUID aman secara kriptografi?
CUID v1 tidak aman secara kriptografi — timestamp terlihat dan beberapa komponen dapat diprediksi. CUID v2 menggunakan SHA3 dan CSPRNG, membuatnya cocok untuk kasus sensitif keamanan.
Apa perbedaan utama antara CUID dan NanoID?
NanoID berfokus pada ukuran kecil dan keamanan kriptografi dengan ukuran sepenuhnya dapat dikustomisasi. CUID memprioritaskan sortabilitas kronologis parsial dan keterbacaan visual. CUID v2 menggabungkan keamanan dengan identitas yang dapat dikenali.
Bagaimana CUID menangani tabrakan?
Tabrakan secara teoritis mungkin tetapi sangat tidak mungkin secara statistik. Counter mencegah tabrakan dalam satu proses; fingerprint memisahkan mesin berbeda; segmen acak menangani kasus tepi. Algoritma dirancang untuk sistem produksi dunia nyata.