Langkau ke kandungan

Penjana UUID Percuma - Hasilkan V1 & V4 UUID Serta-merta

Hasilkan pengecam unik serta-merta dengan penjana UUID percuma kami. Hasilkan UUID Versi 1 (berdasarkan masa) dan Versi 4 (rawak) untuk pangkalan data, API, dan sistem teragih.

Penjana UUID

Versi UUID
UUID Dijana
Kalkulator Pemuatan...
📚

Dokumentasi

Penjana UUID

Penjana UUID ialah alat yang mencipta Pengecam Unik Sejagat, atau UUID: kod 128-bit yang digunakan untuk melabel sekeping data supaya tiada item lain di mana-mana berkemungkinan berkongsi label yang sama. Halaman ini menjana UUID Versi 1 (berasaskan masa) dan Versi 4 (rawak).

Apakah UUID?

UUID ialah nombor 128-bit yang ditulis sebagai 32 digit heksadesimal (aksara 0–9 dan a-f). Nombor ini dibahagikan kepada lima kumpulan yang dipisahkan oleh tanda sempang, mengikut corak 8-4-4-4-12, dengan jumlah keseluruhan 36 aksara. Contoh UUID kelihatan seperti ini:

1550e8400-e29b-41d4-a716-446655440000
2

UUID ditakrifkan oleh RFC 9562, yang diterbitkan oleh Pasukan Petugas Kejuruteraan Internet pada bulan Mei 2024 dan menggantikan RFC lama 4122 dari 2005. Kedua-dua dokumen menerangkan format 128-bit yang sama. Perisian menggunakannya untuk mengenal pasti baris pangkalan data, fail, sesi pengguna dan rekod lain tanpa memerlukan pihak berkuasa pusat untuk mengagihkan nombor. Oleh sebab ruang UUID yang mungkin sangat besar, dua komputer boleh menjana UUID secara berasingan pada masa yang sama dan hampir tidak pernah menghasilkan UUID yang sama.

Format dan struktur UUID

128 bit UUID dibahagikan kepada medan bernama. Setiap medan menggunakan bilangan bit yang tetap:

  • time_low - 32 bit
  • time_mid - 16 bit
  • time_hi_and_version - 16 bit
  • clock_seq_hi_and_reserved - 8 bit
  • clock_seq_low - 8 bit
  • node - 48 bit
Susun atur medan UUID time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

Empat bit dalam time_hi_and_version menyimpan nombor versi UUID, manakala dua bit dalam clock_seq_hi_and_reserved menyimpan varian, yang memberitahu perisian cara membaca medan yang selebihnya. Lapan versi ditakrifkan.

Nama medan di atas berasal daripada Versi 1, yang sememangnya menyimpan nilai masa dan nod. Versi lain mengekalkan susun atur 8-4-4-4-12 serta sempadan medan yang sama, tetapi mengisi kebanyakan bit dengan data rawak. Dalam UUID Versi 4, kumpulan yang dilabelkan time_low adalah rawak, bukan masa.

Cara menjana UUID dengan alat ini

  1. Pilih versi: Versi 1 (berasaskan masa) atau Versi 4 (rawak).
  2. Baca UUID daripada kotak hasil. UUID baharu muncul sebaik sahaja halaman dimuatkan atau versi berubah.
  3. Pilih "Generate" untuk menjana UUID yang lain.
  4. Pilih "Copy" untuk menyalin hasil ke papan klip, kemudian tampalkannya ke dalam kod, pangkalan data atau fail konfigurasi.

Panel di bawah hasil membahagikan UUID kepada lima medannya dan menamakan setiap medan, supaya digit versi dan digit varian mudah ditemui.

Versi 4 sesuai untuk kebanyakan tugas, termasuk kunci pangkalan data dan token sesi, kerana ia tidak membawa maklumat tentang masa atau tempat ia dicipta. Versi 1 sesuai untuk rekod yang masa penciptaannya perlu dipulihkan daripada pengecam itu sendiri, seperti entri log.

UUID versi 1 berbanding versi 4

Versi 1 mengekod cap waktu semasa, bersama jujukan jam dan nilai nod yang dipilih secara rawak. Piawaian membenarkan nilai nod berupa alamat rangkaian sebenar (MAC) komputer, tetapi turut membenarkan nilai nod yang dijana secara rawak sebagai pilihan yang melindungi privasi. Alat ini sentiasa menggunakan pilihan rawak: UUID Versi 1nya tidak pernah membaca atau mendedahkan alamat MAC sebenar. Piawaian juga menghendaki bit terendah bait pertama medan nod ditetapkan kepada 1 bagi nilai nod rawak, dan alat ini menetapkannya. Kad rangkaian sebenar tidak pernah mempunyai bit tersebut, jadi nod rawak tidak boleh disalah anggap sebagai nod sebenar. Itulah sebabnya digit perenambelasan kedua bagi kumpulan kelima sentiasa ganjil dalam UUID Versi 1 daripada halaman ini: 1, 3, 5, 7, 9, b, d atau f.

Cap waktu dalam UUID Versi 1 boleh dibaca semula, jadi rekod boleh disusun mengikut masa penciptaan. Mengisih teks UUID itu sendiri tidak menghasilkan susunan tersebut kerana kumpulan pertama menyimpan 32 bit terendah cap waktu, yang berulang kira-kira setiap 7 minit. Versi 6, yang ditambah dalam RFC 9562, menyimpan cap waktu yang sama dengan bit tertinggi di hadapan supaya pengisihan teks biasa berfungsi.

Versi 4 dibina daripada bit rawak, dengan beberapa bit ditetapkan untuk menandakan versi dan varian. Versi ini tidak membawa cap waktu atau data khusus mesin, jadi ia tidak mendedahkan bila atau di mana ia dicipta. UUID ini tidak boleh diisih mengikut susunan penciptaan.

Enam versi lain wujud dalam piawaian tetapi tidak dijana oleh alat ini: Versi 2 (Keselamatan DCE, jarang digunakan); Versi 3 dan 5, yang dibina melalui pencincangan ruang nama dan nama menggunakan MD5 atau SHA-1, supaya masukan yang sama sentiasa menghasilkan UUID yang sama; serta Versi 6, 7 dan 8, yang ditambah oleh RFC 9562 pada (24,300 cm) 2024 untuk pengecam yang boleh diisih dan tersuai.

Cara mengira UUID (rumus)

Versi 4:

  1. Jana 128 bit rawak.
  2. Tetapkan empat bit versi, iaitu digit perenambelasan pertama kumpulan ketiga, kepada 0100 (heks 4).
  3. Tetapkan dua bit teratas kumpulan keempat kepada 10 (maka digit perenambelasan pertama kumpulan itu ialah 8, 9, a atau b).

Hanya 122 daripada 128 bit yang benar-benar rawak kerana 6 bit ditetapkan oleh langkah 2 dan 3. Ini memberikan 2^122, atau kira-kira 5.3 × 10^36, UUID Versi 4 yang mungkin.

Versi 1:

  1. Ambil masa semasa sebagai bilangan selang 100-nanosaat sejak 15 Oktober 1582, iaitu tarikh pembaharuan kalendar Gregorian. Dalam amalan, ini ialah masa Unix biasa dalam milisaat ditambah 12,219,292,800,000, kemudian semuanya didarab dengan 10,000.
  2. Bahagikan kiraan 60-bit itu merentasi tiga medan: 32 bit terendah dimasukkan ke dalam time_low, 16 bit berikutnya ke dalam time_mid dan 12 bit teratas ke dalam time_hi_and_version.
  3. Jana jujukan jam 14-bit, yang digunakan untuk mengelakkan perlanggaran jika jam sistem ditetapkan ke belakang.
  4. Jana nilai nod 48-bit, dengan bit terendah bait pertamanya ditetapkan kepada 1.
  5. Tetapkan bit versi kepada 0001 dan bit varian kepada 10.

Merentasi semua versi UUID, ruang penuh 128-bit mengandungi 2^128, atau kira-kira 3.4 × 10^38, nilai yang mungkin. Bilangan itu sangat besar sehingga perlanggaran rawak bukanlah kebimbangan praktikal.

Contoh pengiraan

Membaca UUID Versi 4. Ambil contoh sebelum ini: 550e8400-e29b-41d4-a716-446655440000.

  • Kumpulan ketiga, 41d4: digit pertama ialah 4, yang menandakan ini UUID Versi 4.
  • Kumpulan keempat, a716: digit pertama, a (binari 1010), bermula dengan 10, iaitu bit varian yang diperlukan.
  • Digit perenambelasan yang selebihnya ialah muatan rawak.

Program yang membaca UUID ini menyemak corak 4 dan 10 untuk mengesahkan format, kemudian menganggap bahagian selebihnya sebagai nilai rawak legap.

Membina UUID Versi 1. Andaikan jam menunjukkan 1,700,000,000,000 milisaat masa Unix, iaitu 14 November 2023, 22:13:20 UTC.

  1. Tambah ofset: 1,700,000,000,000 + 12,219,292,800,000 = 13,919,292,800,000 ms.
  2. Darabkan dengan 10,000 untuk mendapatkan selang 100-nanosaat: 139,192,928,000,000,000. Dalam heks, nilainya ialah 01EE833B04AFC000.
  3. Potong nilai itu: time_low = 04AFC000 (8 digit heks terendah), time_mid = 833B (4 digit berikutnya), dan 12 bit teratas ialah 1EE.
  4. Letakkan digit versi 1 di hadapan 1EE, lalu menghasilkan time_hi_and_version = 11EE.

UUID itu kemudiannya berbunyi 04afc000-833b-11ee- diikuti jujukan jam dan nilai nod. Perisian boleh membalikkan empat langkah ini untuk mendapatkan semula 14 November 2023 daripada pengecam tersebut.

Kegunaan UUID yang biasa

  • Kunci primer dalam pangkalan data, khususnya apabila berbilang pelayan mencipta rekod pada masa yang sama tanpa berhubung antara satu sama lain.
  • Token sesi dan kunci API, biasanya Versi 4 kerana perlindungan privasinya.
  • Pengecam untuk fail, peristiwa dan sumber dalam sistem teragih seperti perkhidmatan mikro.
  • ID peranti dalam rangkaian IoT yang besar, apabila setiap peranti boleh menjana ID sendiri secara luar talian.

Pertukaran utama ialah saiz: UUID memerlukan 16 bait storan, berbanding 4 atau 8 bait untuk pembilang integer mudah, dan sesetengah pangkalan data mengindeks UUID lebih perlahan daripada integer berjujukan.

Alternatif kepada UUID

Integer peningkatan automatik lebih kecil dan mudah tetapi tidak berfungsi dengan baik apabila lebih daripada satu pelayan perlu mengagihkan ID secara bebas. ID Snowflake, yang dibangunkan di Twitter, menggabungkan cap waktu dengan ID pekerja untuk menghasilkan pengecam padat dan boleh diisih merentasi sistem teragih. ULID (Pengecam Unik Sejagat Boleh Diisih Secara Leksikografi) ialah format lebih baharu yang direka supaya rawak dan boleh diisih mengikut masa penciptaan, tidak seperti UUID Versi 4 standard.

Sejarah piawaian UUID

Konsep UUID bermula pada tahun 1980-an di Apollo Computer, sebagai sebahagian daripada Network Computing Systemnya. Open Software Foundation kemudiannya menerima pakai format tersebut untuk Distributed Computing Environment. Pasukan Petugas Kejuruteraan Internet menerbitkan RFC 4122 pada (10,500 cm) 2005 dan menggantikannya dengan RFC 9562 pada bulan Mei 2024. RFC 9562 mengekalkan semua versi terdahulu supaya terus berfungsi tanpa perubahan dan menambah Versi 6, 7 dan 8.

Soalan lazim

Untuk apa penjana UUID digunakan? Ia mencipta pengecam unik untuk pangkalan data, sistem teragih, token sesi, kunci API dan ID peranti supaya tiada dua rekod perlu berkongsi pengecam yang sama.

Apakah perbezaan antara UUID v1 dan v4? Versi 1 mengekod cap waktu yang boleh dibaca semula oleh perisian untuk mendapatkan masa penciptaan. Versi 4 sepenuhnya rawak dan tidak membawa cap waktu. Hasil Versi 1 alat ini menggunakan nilai nod yang dijana secara rawak dan bukannya alamat MAC sebenar, jadi ia juga tidak mendedahkan maklumat pengenalan mesin.

Adakah Versi 1 mendedahkan alamat MAC saya? Tidak dengan alat ini. Piawaian membenarkan medan nod UUID Versi 1 menyimpan alamat MAC sebenar, tetapi penjana ini sentiasa mengisi medan tersebut dengan bit rawak dan menetapkan bit yang menandakan nilai itu bukan alamat rangkaian sebenar.

Adakah UUID dijamin unik? Tiada skim pengecam yang boleh menjamin keunikan mutlak, tetapi ruang 128-bit mengandungi kira-kira 3.4 × 10^38 nilai yang mungkin, dan UUID Versi 4 mempunyai kira-kira 5.3 × 10^36 nilai rawak yang mungkin. Kebarangkalian pendua cukup kecil untuk diabaikan bagi hampir semua kegunaan praktikal.

Bolehkah saya menggunakan UUID sebagai kunci primer pangkalan data? Ya. UUID berfungsi dengan baik sebagai kunci primer dalam sistem teragih kerana mana-mana nod boleh menjana satu tanpa berhubung dengan pelayan pusat. Kosnya ialah 16 bait storan bagi setiap kunci, lebih banyak daripada integer biasa, serta prestasi indeks yang mungkin lebih perlahan pada jadual yang sangat besar.

Adakah UUID sama dengan GUID? Ya. GUID (Pengecam Unik Sejagat) ialah nama Microsoft untuk konsep yang sama, yang ditakrifkan oleh RFC 4122 sebagai UUID.

Bolehkah UUID Versi 4 diisih mengikut masa penciptaan? Tidak. UUID Versi 4 adalah rawak, jadi ia tidak membawa rekod tentang masa ia dicipta. UUID Versi 1 memang membawa maklumat tersebut, tetapi ia perlu dinyahkod terlebih dahulu; pengisihan teks tidak menghasilkan susunan penciptaan. Versi 6, Versi 7 dan ULID direka untuk diisih terus sebagai teks.

Rujukan

  1. Davis, K., Peabody, B., & Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
  2. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
  3. Pengecam unik sejagat. Dalam Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. ID Snowflake. Dalam Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. Spesifikasi ULID. GitHub. https://github.com/ulid/spec