Setiap versi UUID — v1 hingga v8 — dengan diagram struktur, kasus penggunaan, risiko tabrakan, dan contoh kode JavaScript.
Struktur
timestamp (60-bit) + clock seq (14-bit) + MAC (48-bit)
Risiko tabrakan
Very low
Keuntungan
Kerugian
Paling cocok untuk
Legacy systems. Avoid in new projects due to MAC address exposure.
Struktur
MD5(namespace UUID + name) → UUID
Risiko tabrakan
MD5 collision risk (low for UUIDs)
Keuntungan
Kerugian
Paling cocok untuk
Generating UUIDs from URLs, email addresses, or other stable identifiers. Use v5 instead.
Struktur
122 random bits + 4-bit version + 2-bit variant
Risiko tabrakan
Negligible (2^122 possibilities)
Keuntungan
Kerugian
Paling cocok untuk
Default choice for most applications. IDs for records, sessions, tokens.
Struktur
SHA-1(namespace UUID + name) → UUID (top 128 bits)
Risiko tabrakan
SHA-1 — extremely low for UUID purposes
Keuntungan
Kerugian
Paling cocok untuk
Deterministic IDs from a namespace + name. Example: UUID for 'https://example.com' is always the same.
Struktur
Unix ms timestamp (48-bit) + version (4-bit) + random (74-bit)
Risiko tabrakan
Very low (74 random bits)
Keuntungan
Kerugian
Paling cocok untuk
Database primary keys where sort order matters. Replaces v1 for time-ordered UUIDs.
Struktur
128 bits, content defined by the implementation
Risiko tabrakan
Depends on implementation
Keuntungan
Kerugian
Paling cocok untuk
Experimental or vendor-specific use cases where v1–v7 don't fit.
| Version | Method | Sortable | Privacy-safe | Deterministic |
|---|---|---|---|---|
| v1 | Time + MAC | ✅ | ❌ (MAC leak) | ❌ |
| v3 | MD5 hash | ❌ | ✅ | ✅ |
| v4 | Random | ❌ | ✅ | ❌ |
| v5 | SHA-1 hash | ❌ | ✅ | ✅ |
| v7 | Time + Random | ✅ | ✅ | ❌ |
| v8 | Custom | — | — | — |
// JavaScript / Node.js (built-in, Node 15+)
import { randomUUID } from 'crypto';
const v4 = randomUUID(); // → "550e8400-e29b-41d4-a716-446655440000"
// Browser
const v4 = crypto.randomUUID();
// UUID v7 (npm: uuid package v10+)
import { v7 as uuidv7 } from 'uuid';
const v7 = uuidv7(); // → "018f0b2d-4c9e-7abc-89de-f012345678ab"
// Python
import uuid
v4 = str(uuid.uuid4()) # Random
v5 = str(uuid.uuid5(uuid.NAMESPACE_URL, 'https://example.com'))
# PostgreSQL
SELECT gen_random_uuid(); -- v4 (pg 13+)
SELECT uuid_generate_v4(); -- v4 (uuid-ossp extension)
SELECT gen_random_uuid()::text; -- as textUUID (Universally Unique Identifier) adalah pengidentifikasi 128-bit yang distandarisasi dalam RFC 4122. Diformat sebagai 8-4-4-4-12 karakter heksadesimal yang dipisahkan oleh tanda hubung. Dirancang unik di seluruh ruang dan waktu tanpa otoritas pusat.
Gunakan v4 untuk sebagian besar tujuan umum — dibuat secara acak dan memiliki probabilitas tabrakan yang sangat rendah. Gunakan v7 jika Anda memerlukan UUID terurut waktu untuk kunci utama database. Gunakan v5 untuk UUID deterministik dari pasangan namespace+nama.
UUID v4 sepenuhnya acak (122 bit acak). UUID v7 mengkodekan timestamp Unix di 48 bit pertama diikuti oleh bit acak. Ini membuat UUID v7 dapat diurutkan berdasarkan waktu pembuatan, yang secara signifikan meningkatkan kinerja indeks B-tree.
Secara praktis ya. UUID v4 memiliki 122 bit acak, memberikan 2^122 ≈ 5,3 × 10^36 nilai yang mungkin. Untuk memiliki peluang 50% tabrakan, Anda perlu menghasilkan sekitar 2,7 × 10^18 UUID.