Perlu pengidentifikasi yang tidak akan bentrok dengan pengidentifikasi yang dibuat orang lain, pada mesin yang belum pernah Anda dengar, tanpa meminta izin kepada siapa pun? Itulah tugas yang dilakukan oleh UUID. Ini adalah angka 128-bit, yang ditulis sebagai 36 karakter dalam pola 8-4-4-4-12 yang sudah dikenal, dan seluruh desainnya adalah bahwa tidak akan ada dua UUID yang sama meskipun tidak ada yang mengoordinasikan siapa yang mendapatkan yang mana. Generator gratis ini membuatnya langsung di browser Anda: pilih sebuah versi pada 'Versi', tentukan berapa banyak yang Anda butuhkan pada 'Jumlah pilihan', dan tekan 'Hasilkan'. Halaman ini terbuka pada satu v4, versi yang paling sering diinginkan oleh sebagian besar proyek, sehingga pengidentifikasi pertama hanya berjarak satu klik saja.
Setiap pengidentifikasi dibuat oleh browser Anda melalui Web Crypto API. Versi 4 menggunakan crypto.randomUUID() jika browser menyediakannya dan crypto.getRandomValues() jika tidak — sebuah sumber keacakan yang kuat secara kriptografis daripada menggunakan fungsi pseudo-acak JavaScript seperti Math.random(). Versi 7 meletakkan stempel waktu milidetik 48-bit di depan, kemudian penghitung 12-bit yang bertambah dalam milidetik yang sama, lalu 62 bit acak, yang merupakan metode pengurutan yang dijelaskan dalam RFC 9562; penghitung itulah yang membuat sekumpulan seribu UUID keluar secara berurutan dan bukan diacak. Versi 1 menggabungkan stempel waktu dengan pengidentifikasi node acak yang memiliki bit multicast yang disetel, sehingga versi ini tidak pernah membawa alamat kartu jaringan Anda seperti yang dilakukan oleh implementasi aslinya di tahun 1990-an. Versi 3 dan 5 sama sekali tidak acak: keduanya me-hash sebuah namespace bersama-sama dengan sebuah nama, menggunakan MD5 dan SHA-1 masing-masing, dan hashing tersebut juga terjadi di perangkat Anda. Tidak ada yang dikirim ke server, tidak ada yang dicatat, dan setelah halaman dimuat, ia tetap berfungsi dengan koneksi mati.
'Versi' adalah bidang yang menentukan semua hal lainnya. Versi 4 adalah 122 bit acak dan tidak memiliki struktur — ini adalah default, dan jawaban yang tepat ketika sebuah pengidentifikasi hanya harus unik. Versi 7 mempertahankan 62 bit acak tetapi diawali dengan waktu pembuatannya, sehingga sekumpulan darinya mengurutkan diri sesuai urutan pembuatannya; itulah yang menjadikannya versi yang tepat untuk dipilih ketika pengidentifikasi akan menjadi kunci database. Versi 1 adalah skema berbasis waktu yang asli, disimpan di sini untuk sistem yang masih memintanya. Versi 3 dan 5 adalah pasangan yang aneh: keduanya deterministik, yang berarti input yang sama selalu menghasilkan pengidentifikasi yang sama, dan keduanya mengambil dua bidang tambahan — 'Namespace', yang merupakan salah satu dari ruang standar DNS, URL, OID dan X.500 atau sebuah ruang 'Kustom' milik Anda sendiri, dan 'Nama', yaitu string yang sedang diidentifikasi. Berikan v5 namespace URL dan https://example.com/a dan Anda mendapatkan UUID yang sama hari ini, besok, dan pada mesin orang lain. Karena itu, 'Jumlah pilihan' menghilang ketika v3 atau v5 dipilih: seribu salinan dari satu nilai deterministik hanya akan menjadi seribu salinan dari satu nilai deterministik. Untuk setiap versi lainnya, 'Jumlah pilihan' berjalan dari 1 hingga 1000.
Empat sakelar mengubah bentuk output tanpa mengubah 128 bit di bawahnya. 'Huruf kapital' mencetak digit heksadesimal sebagai huruf besar, 'Tanpa tanda hubung' memberikan bentuk ringkas 32-karakter yang lebih disukai beberapa kolom dan nama file, dan 'Kurung kurawal' membungkus nilainya di dalam tanda { } — bentuk yang disebut GUID oleh Windows dan dunia .NET. Di bawah 'Opsi lanjutan', urn:uuid: menambahkan awalan yang membuatnya menjadi URN resmi; opsi ini mematikan 'Kurung kurawal' dan 'Tanpa tanda hubung' saat sedang aktif, karena standar hanya mengizinkan tepat satu bentuk URN dan itu adalah bentuk kanonikal yang memiliki tanda hubung. 'Format salin' memutuskan bagaimana sekumpulan UUID digabungkan saat Anda mengambilnya: satu per baris, dipisahkan dengan koma, atau setiap nilai di dalam tanda kutip dengan koma di akhir, yang menempel langsung ke dalam array pada kode. Di bawah hasilnya terdapat baris yang melaporkan keacakan dalam bit — 122 untuk v4, 62 untuk v7 — dan, untuk v7, stempel waktu yang dienkode dalam pengidentifikasi pertama dari kumpulan tersebut, sehingga waktu di dalam nilainya terlihat daripada tersirat. 'Salin Semua' dan 'Simpan ke file' keduanya mematuhi 'Format salin'. 'Riwayat' menyimpan 10 batch terakhir Anda di browser Anda sendiri: klik salah satu untuk membawanya kembali, salin atau hapus satu entri tunggal, atau hapus semuanya. 'Hapus' mengosongkan hasil dan membiarkan pengaturan Anda tetap sama, dan setelah 50 pengidentifikasi, daftar tersebut menjadi satu blok yang dapat digulir alih-alih lima puluh baris.
Hal yang paling berdampak pada halaman ini adalah perbedaan antara v4 dan v7 sebagai primary key, dan ini bukan masalah selera. Indeks database adalah pohon yang disimpan dalam urutan yang disortir, dan di mana kunci baru mendarat dalam urutan itu menentukan seberapa banyak pekerjaan yang dibutuhkan untuk melakukan penyisipan. Kunci v4 itu acak, jadi penyisipan yang berurutan mendarat di sudut-sudut indeks yang tidak terkait: halaman yang tadinya penuh menjadi terbelah, bagian-bagian pohon yang disimpan database di dalam memori jarang merupakan bagian yang dibutuhkan penyisipan berikutnya, dan akhirnya indeks tersebut berakhir lebih besar dan lebih terfragmentasi daripada yang dijustifikasi oleh baris-baris yang ditunjukkannya. Kunci v7 diawali dengan milidetik saat ini, jadi penyisipan yang berurutan mendarat saling berdekatan di tepi kanan pohon, yang merupakan pola yang dihasilkan oleh bilangan bulat yang bertambah secara otomatis dan merupakan pola yang dijadikan dasar pembuatan struktur indeks. Itulah inti dari pertukaran ini: v7 memberi Anda perilaku penyisipan dari kunci berurutan sambil mempertahankan sifat yang pertama kali membuat Anda memilih UUID, yaitu bahwa siapa pun dapat mencetaknya tanpa bertanya kepada server. Konsekuensinya adalah bahwa waktu pembuatan sekarang dapat dibaca di dalam pengidentifikasi tersebut, dan apakah hal itu menjadi masalah adalah pertanyaan tentang data Anda, bukan tentang formatnya.
Tidak ada yang pernah memeriksa UUID untuk memastikan keunikannya; ukurannya adalah jaminannya. Tidak ada registri, tidak ada bolak-balik server, tidak ada pencarian — sebuah generator menghasilkan sebuah angka dan menyerahkannya, dan alasan mengapa dua di antaranya tidak bertabrakan hanyalah karena ada 2^122 kemungkinan nilai v4, yaitu sekitar 5,3 × 10^36. Masalah ulang tahun adalah cara jujur untuk mengukurnya: Anda akan membutuhkan sekitar 2,7 × 10^18 pengidentifikasi sebelum ada kemungkinan 50% bagi dua di antaranya untuk cocok, yang berarti satu miliar UUID baru setiap detik selama 86 tahun. Penting untuk bersikap tepat tentang apa yang dijanjikan dan apa yang tidak dijanjikan olehnya. Ini adalah jaminan statistik, bukan jaminan aritmatika, dan hal ini hanya berlaku selama keacakan di bawahnya benar-benar asli — sebuah generator yang tidak disemai dengan baik, atau sebuah mesin virtual yang dikloning bersama dengan kumpulan entropinya, melanggarnya dengan cara yang tidak dapat dideteksi oleh formatnya. Versi 7 mempersempit pertanyaan ini lebih jauh lagi: di dalam satu milidetik, satu generator tidak dapat mengulang dirinya sendiri sama sekali, karena penghitungnya bertambah alih-alih melempar dadu, dan di antara generator yang independen, ke-62 bit acaklah yang melakukan tugasnya.
Sebuah UUID adalah pengidentifikasi, bukan kata sandi. Versi 4 tidak dapat diprediksi, dan itu menggoda orang untuk memperlakukannya sebagai sebuah rahasia — tautan pengaturan ulang kata sandi, URL yang tidak dapat ditebak, token sesi, kunci API. Ketidakpastian tersebut nyata, tetapi kerahasiaan adalah sifat dari bagaimana suatu nilai ditangani, dan pengidentifikasi dengan sengaja ditangani secara sembrono: mereka berada di URL, yang mendarat di riwayat browser, log server, header perujuk dan analitik, dan sering kali ditempel ke dalam pesan obrolan. Versi yang lain adalah kandidat yang bahkan lebih buruk. Versi 1 dan versi 7 keduanya mengenkode momen pembuatannya, jadi siapa pun yang memegangnya tahu kira-kira kapan UUID itu dibuat dan dapat mempersempit lingkup dari semua hal yang dibuat bersamanya. Versi 3 dan 5 sengaja dibuat deterministik: UUID v5 dari alamat email bukanlah rahasia yang di-hash, melainkan sebuah nilai yang dapat dihitung dalam hitungan detik oleh siapa pun yang memiliki alamat email yang sama. Gunakan UUID untuk menamai suatu benda. Gunakan generator kata sandi, atau token dari pustaka yang dibuat khusus untuk rahasia, ketika nilainya harus tetap tidak diketahui.
Mengapa memilih generator UUID ini?
- Pembuatan khusus-browser: pengidentifikasi dibuat di perangkat Anda dan tidak pernah dikirim ke mana pun
- Keacakan Web Crypto API: aman secara kriptografis, bukan Math.random()
- Lima versi di satu tempat: v1, v3, v4, v5 dan v7, tanpa harus mengganti alat
- v7 yang benar-benar terurut: penghitung di dalam milidetik, seperti yang dijelaskan RFC 9562
- v3 dan v5 yang deterministik dengan empat namespace standar atau milik Anda sendiri
- Hingga 1000 sekaligus, dengan daftar ringkas yang dapat digulir setelah lima puluh nilai
- Setiap bentuk umum: dengan tanda hubung, polos, huruf kapital, kurung kurawal atau URN urn:uuid:
- Salin sebagai baris, dipisah koma atau nilai dalam kutipan yang ditempel langsung ke dalam kode
- Tidak terbatas dan gratis: tanpa pendaftaran, tanpa batas penggunaan, tidak ada apa pun di server kami
UUID muncul di mana pun sesuatu harus diberi nama sebelum ada pihak yang dapat mengonfirmasi bahwa nama tersebut tersedia. Kode aplikasi mencetaknya untuk baris-baris yang akan disisipkannya, sehingga objek memiliki identitas sebelum ia mencapai database dan klien dapat merujuk kepadanya sementara penulisan tersebut masih berlangsung. Sistem terdistribusi lebih bergantung pada mereka: beberapa layanan yang menulis ke dalam satu tabel, klien seluler offline yang membuat catatan di pesawat, antrean yang harus mengenali pesan yang sudah diprosesnya — tidak satu pun dari mereka dapat menunggu giliran untuk mendapatkan penghitung bersama. Versi 5 mencakup kebutuhan yang berbeda, yang merupakan pengidentifikasi stabil yang berasal dari sesuatu yang sudah Anda miliki: dokumen yang sama, URL yang sama, atau akun yang sama selalu memetakan ke UUID yang sama, sehingga sebuah proses impor dapat berjalan dua kali tanpa menduplikasi apa pun. Di tempat lain, mereka hanyalah sekadar format yang diminta oleh suatu sistem — pengidentifikasi korelasi yang dijalin di dalam log dan trace, nama file yang tidak akan bertabrakan ketika unggahan dari seribu pengguna mendarat dalam satu wadah, kunci registri Windows, perlengkapan pengujian yang harus terlihat seperti data asli.
Beberapa batasan yang jujur patut diketahui. Satu batch adalah satu versi: nilai pada 'Versi' berlaku untuk semua yang ada di dalamnya, jadi sekumpulan v4 dan sekumpulan v7 adalah dua batch yang berbeda. Ini adalah sebuah generator, bukan inspektur — menempelkan UUID untuk membaca versi atau stempel waktunya bukanlah sesuatu yang dilakukan halaman ini. 'Simpan ke file' menulis file teks biasa alih-alih CSV atau JSON. Versi 7 secara terbuka mengungkapkan kapan ia dibuat, hingga tingkat milidetik, yang merupakan pertukaran yang nyata daripada sebuah kelemahan, dan versi 1 membocorkan waktu dengan cara yang sama; jika itu menjadi masalah bagi data Anda, versi 4 adalah versi yang tidak memberi tahu apa-apa kepada siapa pun. Dua nilai khusus dari standar bukanlah sebuah versi dan karena itu bukan opsi pada 'Versi', namun Anda dapat menyalinnya dari sini: UUID nil, 00000000-0000-0000-0000-000000000000, dan UUID max, ffffffff-ffff-ffff-ffff-ffffffffffff. Segala sesuatu pada halaman ini mengikuti RFC 9562, spesifikasi yang menggantikan RFC 4122 pada tahun 2024, sehingga outputnya diterima oleh pustaka, database, atau API apa pun yang menangani UUID secara keseluruhan. Di dalam batasan-batasan tersebut, jaminannya sangat kuat: setiap pengidentifikasi dibuat sesuai standar, dari keacakan yang aman secara kriptografis, pada mesin Anda sendiri, dan tidak ada orang lain yang pernah melihatnya.