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 textULID adalah alternatif yang ringkas: timestamp 48-bit + acak 80-bit, dikodekan sebagai 26 karakter Crockford Base32. Mereka diurutkan secara leksikografis berdasarkan waktu pembuatan.
ID sekuensial lebih sederhana dan lebih efisien untuk aplikasi basis data tunggal. Gunakan UUID ketika Anda memerlukan:
-- PostgreSQL: native UUID type (16 bytes, efficient)
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL
);
-- MySQL: store as BINARY(16) for performance
CREATE TABLE users (
id BINARY(16) PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
UUID v4 menggunakan 122 bit keacakan dari sumber kriptografi, yang memberikan entropi yang baik. Namun, untuk token keamanan (API key, session ID), lebih baik menggunakan format token yang dirancang khusus dengan properti tambahan seperti checksum, pengkodean kedaluwarsa, atau identifikasi prefiks. UUID untuk identitas, bukan autentikasi.
UUID (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.