Generator UUID Online Gratis - Buat ID Unik (v1-v7)
Apa itu UUID?
UUID (Universally Unique Identifier) adalah pengidentifikasi 128-bit yang digunakan dalam sistem komputer untuk identifikasi informasi yang unik. UUID distandarisasi menurut RFC 4122 dan, berkat entropinya yang besar, menjamin kemungkinan tabrakan yang hampir nol – artinya, dua UUID yang dihasilkan secara independen hampir pasti akan unik.
UUID memiliki format standar: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, di mana setiap x adalah digit heksadesimal (0-9, a-f), M menunjukkan versi UUID, dan N menunjukkan varian.
Versi UUID
UUID v1 (Timestamp + Alamat MAC)
UUID v1 didasarkan pada timestamp saat ini dan nilai acak (di browser, sebagai pengganti alamat MAC). Ini menggunakan interval 100-nanodetik sejak 15 Oktober 1582 (Kalender Gregorian).
Penggunaan:
- Situasi di mana Anda memerlukan pengurutan UUID secara kronologis
- Debugging dan logging (UUID berisi informasi waktu pembuatan)
- Sistem terdistribusi dengan sinkronisasi waktu
Contoh: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Keuntungan:
- UUID dapat diurutkan secara kronologis berdasarkan waktu pembuatan
- Berguna untuk audit dan debugging
- Mengandung informasi timestamp
Kekurangan:
- Risiko keamanan potensial – mengandung timestamp
- Di browser, tidak mengandung alamat MAC yang sebenarnya (digantikan oleh nilai acak)
- Lokalitas DB yang buruk (timestamp berada di bit urutan rendah)
UUID v3 (Hash MD5)
UUID v3 dihasilkan menggunakan hash MD5 dari namespace UUID dan nama. Deterministik – namespace + nama yang sama akan selalu menghasilkan UUID yang sama.
Penggunaan:
- Konversi URL, nama DNS, atau pengidentifikasi lain ke UUID
- Situasi di mana Anda memerlukan UUID yang dapat direproduksi
- Pemetaan antara berbagai sistem identifikasi
Contoh: a3bb189e-8bf9-3888-9912-ace4e6543002
Keuntungan:
- Deterministik (input sama = output sama)
- Ideal untuk mengonversi pengidentifikasi yang dikenal
- Tidak ada tabrakan untuk input yang berbeda
Kekurangan:
- MD5 adalah algoritma usang (utamakan v5)
- Membutuhkan namespace dan nama
- Input asli tidak dapat dipulihkan
UUID v4 (Acak) - DIREKOMENDASIKAN
Versi UUID yang paling banyak digunakan. UUID v4 dihasilkan secara murni acak menggunakan generator angka acak yang aman secara kriptografis (crypto.getRandomValues()).
Penggunaan:
- Kunci primer database
- Pengidentifikasi sesi (session IDs)
- Nama file yang unik
- Token API
- Tujuan umum, di mana Anda memerlukan ID yang dijamin unik
Contoh: f47ac10b-58cc-4372-a567-0e02b2c3d479
Keuntungan:
- Entropi dan keamanan maksimum
- Tidak ada ketergantungan pada waktu atau parameter sistem
- Implementasi paling sederhana
Peluang tabrakan: Saat menghasilkan 1 miliar UUID per detik selama 100 tahun, peluang tabrakan adalah sekitar 0,00000006%.
UUID v5 (Hash SHA-1)
UUID v5 sama dengan v3, tetapi menggunakan SHA-1 sebagai pengganti MD5. Alternatif yang lebih modern dan aman untuk v3.
Penggunaan:
- Sama dengan v3, tetapi dengan keamanan yang lebih baik
- Diutamakan daripada v3 untuk proyek baru
- Menghasilkan UUID dari URL, nama DNS, OID, X.500 DN
Contoh: 886313e1-3b8a-5372-9b90-0c9aee199e5d
Keuntungan:
- Deterministik
- SHA-1 lebih kuat dari MD5
- Cocok untuk pemetaan antar sistem
Kekurangan:
- SHA-1 juga dianggap usang (tetapi masih lebih aman daripada MD5)
- Membutuhkan namespace dan nama
UUID v6 (Timestamp Terurut)
UUID v6 adalah versi v1 yang ditingkatkan dengan bit waktu yang diatur ulang untuk pengindeksan DB yang lebih baik. Dirancang untuk mengatasi masalah lokalitas dalam database.
Penggunaan:
- Kunci primer database dengan pengurutan waktu
- Sistem yang memerlukan pengurutan kronologis dan kinerja DB
- Alternatif yang lebih modern untuk v1
Contoh: 1ec9414c-232a-6b00-b3c8-9e6bdeced846
Keuntungan:
- Lokalitas DB lebih baik daripada v1 (timestamp di bit urutan tinggi)
- Pengurutan kronologis
- Kompatibel dengan standar UUID
Kekurangan:
- Kurang umum digunakan daripada v1/v4
- Masih mengandung informasi waktu (risiko keamanan)
UUID v7 (Timestamp Unix)
UUID v7 menggunakan timestamp Unix (milidetik sejak 1970) + bit acak. Versi UUID terbaru dengan lokalitas DB terbaik.
Penggunaan:
- Kunci primer database modern
- Sistem yang memerlukan kinerja + pengurutan waktu
- Pengganti v1/v6 dalam proyek baru
Contoh: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
Keuntungan:
- Lokalitas DB terbaik dari semua versi
- Timestamp Unix adalah standar
- Menggabungkan keuntungan keacakan dan pengurutan waktu
Kekurangan:
- Spesifikasi relatif baru (RFC 4122bis)
- Kurang didukung dalam sistem lama
Versi UUID Mana yang Harus Digunakan?
Panduan Keputusan
Membutuhkan keamanan dan keacakan maksimum? → Gunakan UUID v4 (pilihan paling umum)
Membutuhkan pengurutan waktu dan kinerja DB? → Gunakan UUID v7 (modern) atau UUID v6 (standar)
Membutuhkan UUID yang dapat direproduksi dari pengidentifikasi yang ada? → Gunakan UUID v5 (SHA-1) atau UUID v3 (MD5, lawas)
Membutuhkan timestamp dan jejak audit? → Gunakan UUID v1 (lawas, kinerja DB lebih buruk)
Database
Untuk proyek baru: UUID v7 atau v4
- v7 ideal untuk pengurutan waktu + kinerja
- v4 untuk keacakan maksimum tanpa informasi waktu
Untuk sistem lawas: UUID v1 atau v6
- v6 memiliki lokalitas DB yang lebih baik daripada v1
- v1 didukung secara luas
Keuntungan UUID sebagai kunci primer:
- Keunikan Global – Anda dapat menggabungkan data dari berbagai database tanpa konflik
- Keamanan – Berbeda dengan ID berurutan (1, 2, 3…), nilai berikutnya tidak dapat ditebak
- Sistem Terdistribusi – UUID dapat dihasilkan secara independen di beberapa server tanpa koordinasi
- Penggabungan Database – Konflik tidak muncul saat menggabungkan dua database
Kekurangan:
- Ukuran lebih besar (16 byte vs 4-8 byte untuk integer)
- Pengindeksan lebih lambat di beberapa database (gunakan v6/v7 untuk kinerja lebih baik)
- Kurang mudah dibaca manusia
API dan Layanan Web
- REST API – Pengidentifikasi unik untuk sumber daya
- GraphQL – Pengidentifikasi global untuk node
- Webhook – Melacak permintaan dan respons
- Token – ID Sesi, token refresh
File dan Penyimpanan
- Nama File – Pencegahan tabrakan saat mengunggah
- S3/Cloud Storage – Jalur objek yang unik
- Kunci Cache – Pengidentifikasi dalam sistem cache
Aplikasi Frontend
- Komponen React/Vue – Kunci unik untuk daftar
- ID Sementara – ID sebelum disimpan ke database
- Local storage – Kunci untuk data yang disimpan
- Aplikasi Offline-first – Menghasilkan ID tanpa koneksi ke server
Fitur Lanjut Generator
Menghasilkan UUID dengan Waktu Kustom
Untuk versi berbasis waktu (v1, v6, v7), Anda dapat memilih timestamp apa pun menggunakan pemilih tanggal-waktu. Ini berguna untuk:
Pengujian:
- Simulasi UUID yang dibuat di masa lalu
- Menguji pengurutan waktu dalam database
- Reproduksi UUID untuk debugging
Migrasi Data:
- Menghasilkan UUID dengan timestamp historis
- Mengisi ulang data dengan nilai timestamp yang benar
- Mengimpor data dari periode waktu yang berbeda
Audit dan Kepatuhan:
- Rekonstruksi UUID berdasarkan waktu pembuatan catatan
- Pembuatan pengidentifikasi retroaktif
Contoh Penggunaan:
- Pilih versi v1, v6, atau v7
- Atur tanggal dan waktu menggunakan pemilih tanggal-waktu
- Hasilkan UUID dengan timestamp kustom Anda
UUID Berbasis Hash (v3, v5)
Untuk UUID deterministik, Anda dapat menggunakan versi v3 (MD5) atau v5 (SHA-1):
Cara Menggunakan:
- Pilih namespace sesuai jenis pengidentifikasi Anda
- Masukkan nama/nilai
- Hasilkan UUID
Contoh:
| Namespace | Nama (Input) | Penggunaan |
|---|---|---|
| DNS | example.com | Mengonversi nama domain ke UUID |
| DNS | google.com | Setiap situs web memiliki UUID unik |
| URL | https://example.com/page | Mengonversi URL ke UUID |
| URL | https://api.example.com/users/123 | Titik akhir API sebagai UUID |
| OID | 1.3.6.1.4.1.343 | Pengidentifikasi Objek ke UUID |
| X.500 | CN=John Doe,O=Company | Nama Terkemuka ke UUID |
Properti Penting:
- ✅ Deterministik: Input yang sama = selalu UUID yang sama
- ✅ Dapat Direproduksi: Anda dapat membuat ulang UUID kapan saja
- ✅ Konsisten: UUID yang sama di berbagai sistem
- ❌ Tidak Dapat Didekode: Nama asli tidak dapat dipulihkan dari UUID
- ℹ️ Satu UUID: Untuk v3/v5, hanya satu UUID yang selalu dihasilkan (input yang sama = output yang sama)
Penggunaan Praktis:
// Contoh: Konversi URL ke UUID v5
Namespace: URL
Nama: https://example.com/api/users/123
Hasil: 886313e1-3b8a-5372-9b90-0c9aee199e5d
// Input yang sama = selalu UUID yang sama
Namespace: DNS
Nama: google.com
Hasil: selalu UUID yang sama untuk google.com
Bagaimana Cara Menggunakan UUID dengan Aman?
Keamanan Kriptografis
Generator kami menggunakan crypto.getRandomValues(), yang merupakan generator angka acak yang aman secara kriptografis. Berbeda dengan Math.random(), yang dapat diprediksi dan tidak cocok untuk tujuan keamanan, crypto.getRandomValues() menyediakan entropi sejati yang cocok untuk:
- Menghasilkan token keamanan
- ID Sesi
- Kunci API
- Aplikasi kriptografis
Perbandingan Versi UUID
| Versi | Dasar | Tabrakan | Pengurutan Waktu | Kinerja DB | Penggunaan |
|---|---|---|---|---|---|
| v1 | Timestamp + MAC | Rendah | ✅ Ya | ❌ Lebih Buruk | Lawas, audit |
| v3 | Hash MD5 | Tidak Ada (deterministik) | ❌ Tidak | ⚠️ Sedang | Konversi (lawas) |
| v4 | Acak | Sangat Rendah | ❌ Tidak | ⚠️ Sedang | Penggunaan umum |
| v5 | Hash SHA-1 | Tidak Ada (deterministik) | ❌ Tidak | ⚠️ Sedang | Konversi (direkomendasikan) |
| v6 | Timestamp Terurut | Rendah | ✅ Ya | ✅ Lebih Baik | DB modern dengan waktu |
| v7 | Timestamp Unix | Rendah | ✅ Ya | ✅ Terbaik | Proyek baru |
UUID vs Pengidentifikasi Lain
| Tipe | Ukuran | Tabrakan | Pengurutan Waktu | Penggunaan |
|---|---|---|---|---|
| ID Auto-increment | 4-8 byte | Dijamin unik dalam tabel | ❌ | Aplikasi sederhana, DB lokal |
| UUID v4 | 16 byte | Praktis tidak mungkin | ❌ | Sistem terdistribusi, API |
| UUID v7 | 16 byte | Praktis tidak mungkin | ✅ | DB modern dengan kinerja |
| ULID | 16 byte | Praktis tidak mungkin | ✅ | UUID + pengurutan leksikografis |
| Snowflake ID | 8 byte | Dijamin unik dengan konfigurasi yang benar | ✅ | Twitter, sistem terdistribusi |
| NanoID | Dapat dikonfigurasi | Bergantung pada panjang | ❌ | ID ramah-URL |
Implementasi dalam Berbagai Bahasa
JavaScript/TypeScript
// UUID v4 - Cara termudah (browser modern)
const uuid = crypto.randomUUID();
// UUID v4 - Implementasi manual
function generateUUIDv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> (c === 'x' ? 0 : 2);
const v = c === 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
}
// UUID v7 - Direkomendasikan untuk database
function generateUUIDv7() {
const timestamp = Date.now();
const timeHi = (timestamp >> 16).toString(16).padStart(8, '0');
const timeLow = (timestamp & 0xFFFF).toString(16).padStart(4, '0');
const randomBytes = crypto.getRandomValues(new Uint8Array(10));
const randomHex = Array.from(randomBytes)
.map(b => b.toString(16).padStart(2, '0'))
.join('');
return `${timeHi}-${timeLow}-7${randomHex.substr(0, 3)}-${randomHex.substr(3, 4)}-${randomHex.substr(7)}`;
}
Python
import uuid
# UUID v4
uuid_v4 = str(uuid.uuid4())
# Output: '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
# UUID v1
uuid_v1 = str(uuid.uuid1())
Java
import java.util.UUID;
// UUID v4
String uuidV4 = UUID.randomUUID().toString();
PHP
// UUID v4 (PHP 7+)
function generateUUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
C#
using System;
// UUID v4
Guid uuid = Guid.NewGuid();
string uuidString = uuid.ToString();
Praktik Terbaik
Menyimpan UUID di Database
PostgreSQL:
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
MySQL 8.0+:
CREATE TABLE users (
id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Tips: Di MySQL, simpan UUID sebagai BINARY(16) daripada CHAR(36) untuk menghemat ruang dan pengindeksan yang lebih cepat.
Validasi UUID
function isValidUUID(uuid) {
const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
return regex.test(uuid);
}
Konversi UUID
// Menghapus tanda hubung
const compact = uuid.replace(/-/g, '');
// Menambahkan tanda hubung kembali
function formatUUID(compactUuid) {
return [
compactUuid.substring(0, 8),
compactUuid.substring(8, 12),
compactUuid.substring(12, 16),
compactUuid.substring(16, 20),
compactUuid.substring(20, 32)
].join('-');
}
Pemecahan Masalah (Troubleshooting)
UUID v3/v5 Tidak Berfungsi
Masalah: Setelah memilih v3 atau v5, tidak ada yang dihasilkan
Solusi:
- ✅ Pastikan Anda telah mengisi kolom “Nama” - ini wajib!
- ✅ Pilih namespace yang benar sesuai dengan jenis input Anda
- ✅ Contoh input yang valid:
- DNS:
example.com,google.com - URL:
https://example.com/page - Teks apa pun:
aplikasi-saya-v1
- DNS:
Tips: Coba nilai sederhana seperti test dan namespace DNS terlebih dahulu.
UUID Berbasis Waktu (v1, v6, v7) Memiliki Waktu yang Aneh
Masalah: UUID yang dihasilkan memiliki timestamp yang tidak terduga
Solusi:
- ✅ Periksa pemilih tanggal-waktu - apakah waktu diatur dengan benar?
- ✅ Pemilih tanggal-waktu menggunakan zona waktu lokal Anda
- ✅ Biarkan pemilih tanggal-waktu kosong untuk waktu saat ini
UUID Tidak Dapat Disalin
Masalah: Tombol “Salin Semua” tidak berfungsi
Solusi:
- ✅ Pastikan Anda telah menghasilkan UUID (tidak kosong)
- ✅ Beberapa browser memerlukan HTTPS untuk API clipboard
- ✅ Alternatifnya, pilih teks di textarea dan salin secara manual (Ctrl+C)
Pertanyaan Umum (FAQ)
Bisakah terjadi tabrakan UUID?
Secara teori ya, tetapi kemungkinannya sangat kecil. Saat menghasilkan 1 miliar UUID v4 per detik selama 100 tahun, peluang tabrakan adalah sekitar 0,00000006%. Dalam praktiknya, tabrakan tidak akan pernah terjadi.Apakah UUID cocok sebagai kunci primer dalam database?
Tergantung pada kasus penggunaan. UUID ideal untuk sistem terdistribusi dan situasi di mana Anda memerlukan keunikan global. Untuk aplikasi sederhana dengan satu database, auto-increment mungkin lebih efisien.Apakah UUID yang dihasilkan oleh alat ini aman?
Ya, kami menggunakan Web Crypto API (`crypto.getRandomValues()`), yang menyediakan nilai acak yang aman secara kriptografis. Semuanya terjadi secara lokal di browser Anda.Apa perbedaan antara versi UUID?
- **v1**: Timestamp + MAC/acak - pengurutan kronologis, kinerja DB lebih buruk - **v3/v5**: Berbasis Hash - deterministik, untuk mengonversi pengidentifikasi yang dikenal - **v4**: Acak - paling aman, paling sering digunakan - **v6**: Timestamp yang diatur ulang - kinerja DB lebih baik daripada v1 - **v7**: Timestamp Unix - kinerja DB terbaik + pengurutan waktuVersi UUID mana yang harus saya gunakan?
Untuk sebagian besar kasus, gunakan **v4** (acak). Untuk database dengan pengurutan waktu, gunakan **v7** (modern) atau **v6** (standar). Untuk mengonversi pengidentifikasi yang dikenal (URL, DNS), gunakan **v5** (SHA-1).Bisakah saya menggunakan UUID untuk token dan kunci API?
UUID v4 cocok untuk ID sesi dan token serupa. Untuk kunci API, pertimbangkan untuk menggunakan string acak yang lebih panjang (misalnya, nilai 256-bit) atau pustaka khusus.Seberapa besar UUID?
UUID memiliki 128 bit (16 byte). Dalam format string dengan tanda hubung, membutuhkan 36 karakter. Tanpa tanda hubung, 32 karakter heksadesimal.Alternatif untuk UUID
ULID (Universally Unique Lexicographically Sortable Identifier)
- ID 128-bit (sama seperti UUID)
- Dapat diurutkan secara leksikografis berdasarkan waktu pembuatan
- Representasi yang lebih ringkas (26 karakter, bukan 36)
- Pengodean base32 tidak peka huruf besar/kecil
Contoh: 01ARZ3NDEKTSV4RRFFQ69G5FAV
NanoID
- Ukuran lebih kecil dari UUID (standarnya 21 karakter)
- Ramah-URL (tanpa karakter khusus)
- Generasi lebih cepat
- Panjang dan alfabet yang dapat dikonfigurasi
Contoh: V1StGXR8_Z5jdHi6B-myT
Snowflake ID (Twitter)
- ID 64-bit (lebih kecil dari UUID)
- Dapat diurutkan berdasarkan waktu
- Berisi ID pekerja dan nomor urut
- Membutuhkan konfigurasi terpusat
Contoh: 1234567890123456789
Kinerja dan Optimalisasi
Kecepatan Generasi
Generator kami dapat menghasilkan:
- 1 UUID: < 1 ms
- 100 UUID: ~10-20 ms
- 1000 UUID: ~100-200 ms
Tips Kinerja
- Generasi Batch – Jika Anda membutuhkan banyak UUID, hasilkan secara bersamaan daripada satu per satu
- Penyimpanan di DB – Indeks kolom UUID untuk pencarian cepat
- Kompresi – Simpan UUID dalam bentuk biner (16 byte) daripada string (36 byte)
- Caching – Dalam beberapa kasus, Anda dapat pra-generasi dan melakukan cache UUID
Untuk Pengembang
Struktur UUID v4
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
| | | | |
| | | | └─ 48 bit data acak (node)
| | | └────── 16 bit data acak dengan varian (clock_seq)
| | └─────────── 12 bit data acak + 4 bit versi (time_hi_and_version)
| └──────────────── 16 bit data acak (time_mid)
└───────────────────────── 32 bit data acak (time_low)
- Versi (4 bit): selalu
0100(biner) =4(hex) - Varian (2-3 bit): selalu
10(biner) untuk RFC 4122
Pengujian UUID
// Jest test
describe('UUID Generator', () => {
test('generates valid UUID v4', () => {
const uuid = generateUUIDv4();
const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
expect(regex.test(uuid)).toBe(true);
});
test('generates unique UUIDs', () => {
const uuid1 = generateUUIDv4();
const uuid2 = generateUUIDv4();
expect(uuid1).not.toBe(uuid2);
});
});
Aspek Keamanan
Hal yang Tidak Boleh Dilakukan dengan UUID
❌ Jangan gunakan UUID v1 untuk aplikasi sensitif – Mengandung timestamp, yang dapat menjadi risiko keamanan
❌ Jangan gunakan Math.random() untuk menghasilkan UUID – Ini tidak aman secara kriptografis
❌ Jangan mengandalkan UUID untuk otorisasi – UUID dapat ditebak (meskipun dengan kemungkinan yang sangat kecil)
❌ Jangan menyimpan UUID di cookie tanpa enkripsi – Gunakan cookie bertanda tangan atau JWT
Hal yang Harus Dilakukan
✅ Gunakan UUID v4 untuk sebagian besar kasus – Entropi dan keamanan tertinggi
✅ Kombinasikan UUID dengan langkah-langkah keamanan lainnya – Untuk manajemen sesi, gunakan HTTPS, cookie HttpOnly, dan kedaluwarsa singkat
✅ Validasi UUID di server – Selalu periksa format dan versi UUID
✅ Gunakan sumber keacakan yang aman secara kriptografis – crypto.getRandomValues() di browser, /dev/urandom di Linux
Fakta Menarik
- Jumlah kemungkinan UUID v4: 2^122 ≈ 5.3 × 10^36 (340 undecillion)
- Tabrakan yang diperlukan: Untuk peluang tabrakan 50%, Anda harus menghasilkan 2.71 × 10^18 UUID (2.71 quintillion)
- Ukuran semua kemungkinan UUID: Jika kita menyimpan setiap UUID sebagai 16 byte, seluruh ruang akan membutuhkan 85 zettabyte (85 miliar terabyte)
- Asal: UUID distandarisasi sebagai bagian dari DCE (Distributed Computing Environment) pada tahun 1990