Generator UUID

Hasilkan UUID di browser Anda: v4 yang sepenuhnya acak, v7 yang terurut waktu, atau v5 deterministik. Buat hingga 1000 sekaligus, dan data tidak pernah meninggalkan perangkat Anda.

Tekan 'Hasilkan' untuk memilih
Versi
Opsi lanjutan

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?

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.

FAQ

Bagaimana cara saya menghasilkan UUID?

Pilih sebuah versi pada 'Versi', atur berapa banyak yang Anda butuhkan pada 'Jumlah pilihan', dan tekan 'Hasilkan'. Halaman ini terbuka pada satu pengidentifikasi versi 4, yang merupakan apa yang diinginkan oleh sebagian besar proyek, sehingga UUID biasa hanya berjarak satu klik. Setiap nilai muncul dengan tombol salinnya sendiri, dan 'Salin Semua' mengambil seluruh batch sekaligus.

Apa perbedaan antara UUID v4 dan v7?

Versi 4 adalah 122 bit acak yang tidak memiliki struktur sama sekali, sehingga dua di antaranya tidak memiliki hubungan satu sama lain. Versi 7 menghabiskan 48 bit pertama untuk milidetik saat dibuat, menambahkan penghitung dan 62 bit acak, dan oleh karena itu dapat disortir: satu batch keluar sesuai urutan pembuatannya. Gunakan v4 bila pengidentifikasi hanya harus unik, dan v7 bila ia juga akan menjadi primary key database.

Versi UUID mana yang harus saya gunakan?

Versi 4 kecuali Anda memiliki alasan untuk memilih yang lain. Pilih versi 7 jika pengidentifikasi menjadi primary key dan kinerja penyisipan penting, versi 5 jika Anda memerlukan input yang sama untuk selalu menghasilkan pengidentifikasi yang sama, dan versi 1 hanya jika sistem yang harus Anda ajak bicara secara khusus memintanya. Versi 3 adalah versi 5 dengan MD5 dan bukan SHA-1, dan ada demi kompatibilitas.

Apakah UUID yang dihasilkan benar-benar acak dan aman?

Keacakannya aman secara kriptografis: ia berasal dari Web Crypto API browser Anda, melalui crypto.randomUUID() atau crypto.getRandomValues(), bukan dari Math.random(). Aman dalam arti tidak dapat ditebak adalah pertanyaan yang berbeda dari aman dalam arti rahasia — UUID adalah sebuah pengidentifikasi, dan ia tidak boleh digunakan sebagai kata sandi, token sesi, atau kunci API.

Bisakah saya menghasilkan banyak UUID sekaligus?

Ya, hingga 1000 dalam sekali jalan. Atur 'Jumlah pilihan' dan tekan 'Hasilkan'; melewati lima puluh nilai, hasilnya menjadi satu blok tunggal yang dapat digulir dan bukannya daftar baris yang panjang. 'Salin Semua' dan 'Simpan ke file' mengambil seluruh batch, digabungkan dengan cara yang disebutkan 'Format salin' — satu per baris, dipisahkan dengan koma, atau diberi tanda kutip untuk menempel ke dalam array.

Mengapa v3 dan v5 memberi saya UUID yang sama setiap saat?

Karena untuk itulah mereka dibuat. Versi 3 dan 5 adalah deterministik: keduanya me-hash namespace dan nama yang Anda berikan, jadi input yang identik selalu menghasilkan pengidentifikasi yang identik, pada mesin mana pun dan dalam bahasa apa pun. Hal itu membuat keduanya berguna untuk memperoleh pengidentifikasi stabil dari sesuatu yang sudah Anda miliki, dan itu pula sebabnya 'Jumlah pilihan' disembunyikan saat Anda memilihnya.

Apa itu Namespace dan Nama, dan namespace mana yang harus saya pilih?

Itu adalah dua input dari mana UUID versi 3 atau versi 5 dihitung. 'Namespace' menjelaskan nama seperti apa itu — DNS untuk nama host, URL untuk alamat, OID dan X.500 untuk skema direktori tersebut, atau 'Kustom' jika Anda ingin menyediakan UUID namespace Anda sendiri, yang merupakan pilihan umum di dalam sebuah aplikasi. 'Nama' adalah string-nya itu sendiri. Namespace yang berbeda memberikan hasil yang sama sekali berbeda untuk nama yang sama, dan itulah inti dari memilikinya.

Mengapa UUID v7 lebih baik daripada v4 untuk primary key database?

Karena ke mana nilai-nilai tersebut mendarat di dalam indeks. Indeks disimpan dalam urutan yang disortir, dan kunci v4 yang acak mendarat di mana saja di dalamnya, jadi penyisipan akan membelah halaman di seluruh bagian pohon dan bagian-bagian yang disimpan di dalam memori jarang merupakan bagian yang dibutuhkan selanjutnya. Kunci v7 dimulai dengan milidetik saat ini, jadi penyisipan yang berurutan mendarat bersamaan di akhir indeks, begitulah cara kunci bilangan bulat berurutan berperilaku — sambil tetap membiarkan layanan apa pun mencetak pengidentifikasi tanpa bertanya kepada penghitung pusat.

Mungkinkah dua UUID sama persis?

Pada prinsipnya ya, dalam praktiknya tidak, dan patut diketahui yang mana yang berlaku. Tidak ada yang memverifikasi keunikan: hanya ada 2^122 kemungkinan nilai versi 4, yaitu sekitar 5,3 × 10^36, dan Anda akan membutuhkan kira-kira 2,7 × 10^18 darinya — satu miliar per detik selama 86 tahun — sebelum ada kemungkinan 50% terjadinya tabrakan tunggal. Jaminannya bersifat statistik, bukan absolut, dan ini bergantung pada keacakan yang asli, yang menjadi alasan generator ini menggunakan Web Crypto API, bukan fungsi pseudo-acak biasa.

Bisakah saya menggunakan UUID sebagai kata sandi, kunci API, atau token sesi?

Tidak, dan ini adalah kesalahan yang memakan biaya paling besar. UUID versi 4 tidak dapat diprediksi, namun pengidentifikasi ditangani seolah-olah bersifat publik: mereka berakhir di dalam URL, riwayat browser, log server, header perujuk, dan analitik. Versi 1 dan 7 secara tambahan mengungkapkan kapan mereka dibuat, dan versi 3 dan 5 dapat dihitung ulang oleh siapa saja yang mengetahui inputnya. Untuk apa pun yang harus tetap rahasia, gunakan generator kata sandi atau token dari pustaka yang dimaksudkan khusus untuk rahasia.

Apakah UUID v7 mengungkap kapan ia dibuat?

Ya, hingga ke tingkat milidetik, dan itu disengaja, bukan karena kekeliruan — stempel waktulah yang membuat v7 dapat disortir. Baris di bawah hasil menampilkan waktu yang dienkode pada nilai pertama dari batch tersebut, sehingga Anda dapat melihat dengan tepat apa saja yang terungkap. Versi 1 juga memiliki stempel waktu. Jika waktu pembuatan adalah sesuatu yang sebaiknya tidak Anda publikasikan, versi 4 adalah versi yang sama sekali tidak menyimpan informasi waktu.

Apakah UUID v1 membeberkan alamat MAC saya?

Tidak di sini. Skema aslinya menggunakan alamat kartu jaringan mesin sebagai bidang node, dan dari situlah reputasi v1 berasal, tetapi standar ini juga mengizinkan pengidentifikasi node acak yang ditandai dengan bit multicast, dan itulah yang dihasilkan oleh generator ini. Alamat perangkat keras Anda tidak pernah dibaca dan tidak pernah muncul di outputnya.

Apa yang diubah oleh Huruf kapital, Tanpa tanda hubung, Kurung kurawal, dan urn:uuid:?

Hanya pada sisi presentasinya saja — 128 bit di bawahnya adalah sama persis dalam setiap bentuk. 'Huruf kapital' mencetak digit heksadesimal sebagai huruf besar, 'Tanpa tanda hubung' memberikan versi ringkas 32 karakter, 'Kurung kurawal' membungkus nilai di dalam tanda { } seperti cara Windows dan .NET menuliskan GUID, dan urn:uuid: menambahkan awalan yang menjadikannya sebuah URN resmi. Saat diaktifkan, urn:uuid: mematikan kedua opsi lainnya, karena standar mendefinisikan tepat satu bentuk URN dan itu adalah bentuk kanonikal yang memiliki tanda hubung.