Alat pembangun · UUID penjana
Daripada 128 Bits kepada 36 Aksara: Cara UUID Pengekodan Teks Berfungsi
· Bagaimana ia berfungsi
uuid kriptografi pelayar-apis
A UUID ialah 16 bytes, namun bentuk biasa ialah 36 aksara. Siaran ini menerangkan penggandaan heks, tanda sempang, peraturan kes dan pengekodan yang lebih pendek yang digunakan orang apabila borang standard terlalu panjang.
Mengapa lajur lebih lebar daripada nilai — nilai 16-bait yang berharga 36 aksara dalam teks dan maksudnya untuk URL dan storan
Lebar lajur storan meletup apabila anda memilih format UUID. Nilai 128-bit ialah 16 bytes, tetapi perwakilan teksnya bergantung pada pengekodan: perenambelasan (36 aksara dengan sempang, 32 tanpa), base64url (22 aksara), base58 (22–23 aksara), Crockford base32 (26 aksara). Jika skema anda menyimpan UUID sebagai VARCHAR(36), anda membelanjakan 36 aksara dalam setiap baris. Dalam jadual dengan 1 bilion baris dan tiada lajur lain, iaitu 36 gigabait teks overhed berbanding 16 gigabait binari. Pilihannya bukan sahaja kosmetik; ia mempengaruhi saiz pertanyaan, perjalanan pergi balik rangkaian dan tekanan cache. Format kanonik ialah 36 aksara: lapan digit hex, sempang, empat digit hex, sempang, empat digit hex, sempang, empat digit hex, sempang, dua belas digit hex.
Hex menggandakan segala-galanya — setiap bait menjadi dua aksara dan empat sempang melengkapkan 36
Setiap bait menjadi betul-betul dua aksara perenambelasan (0–9, a–f). Tanda sempang ada untuk sebab kebolehbacaan dan warisan sejak UUID pertama kali dinyatakan. Pengekodan perenambelasan menggandakan kiraan bait: 16 bytes menjadi 32 digit heks ditambah 4 sempang. Ia adalah pengekodan paling perlahan dan paling lama, tetapi boleh dibaca oleh manusia dan disokong di mana-mana sahaja. Peraturan kes: RFC 9562 mewajibkan huruf kecil untuk keluaran kanonik, tetapi input tidak peka huruf besar-kecil. Menyimpan huruf besar membuang peluang untuk menormalkan, jadi simpan huruf kecil dan bandingkan secara tidak sensitif huruf besar pada input. Pengekodan Base64url mewakili tiga bait sebagai empat aksara menggunakan abjad aksara 64 (A–Z, a–z, 0–9, tolak, garis bawah). Enam belas bait menjadi 21 aksara ditambah satu aksara padding, berjumlah 22 aksara. Base64url mengalih keluar padding dan aksara standard (tambah dan slash) yang dikhaskan dalam URL.
Peraturan kes — huruf kecil pada output, tidak sensitif huruf besar pada input dan sebab perbandingan huruf bercampur menyebabkan ketidakpadanan senyap
UUID dalam format base64url menyimpan 14 aksara berbanding hex dan sah dalam URL tanpa pengekodan peratus. Tukar ganti: ia kurang boleh dibaca (huruf kecil kelihatan seperti digit; b, 8, B dan 8 mudah dikelirukan). Base58 digunakan oleh Bitcoin dan blok blok lain dan mengalih keluar aksara samar-samar (0, O, I, l), menjadikan hasil 22–23 aksara sambil kekal boleh dibaca. Crockford base32 (direka bentuk untuk format seperti ISBN) menggunakan 26 aksara dan mengutamakan ketepatan daripada ringkasan. Perangkap pesanan bait GUID Microsoft digunakan pada UUID storan dalam sesetengah pangkalan data. RFC 9562 menentukan susunan bait rangkaian (big-endian) untuk semua bait. Beberapa konfigurasi pelayan Microsoft SQL menyimpan GUID dengan susunan bait kecil-endian dalam tiga medan pertama.
Pengekodan yang lebih pendek — base64url di 22 aksara, base58 dan Crockford base32, dengan pertukarannya dalam kebolehbacaan dan keselamatan salin-tampal
yang sama 128-nilai bit yang disimpan dalam big-endian dan little-endian menghasilkan rentetan hex yang berbeza. A UUID 550e8400-e29b-41d4-a716-446655440000 disimpan sebagai Microsoft GUID mungkin boleh diambil semula sebagai 00840e55-9be2-d441-a716-446655440000 (bait 0–3 dan 4–5 dan 6–7 terbalik). Jika sistem anda menghubungkan antara RFC-sistem patuh dan Microsoft, anda mesti sedar tentang perkara ini dan sama ada normalkan di sempadan atau dokumen format yang anda gunakan dalam setiap lajur. Contoh yang berfungsi: v4 UUID 9b2e4f1a-4f3e-4c1a-8a7d-1b2c3d4e5f60 dalam menduduki perenambelasan 36 watak. Sebagai 16 bytes ia ialah 9b 2e 4f 1a 4f 3e 4c 1a 8a 7d 1b 2c 3d 4e 5f 60. Dalam base64url: pecahkan kepada ketulan tiga bait, tukar kepada base64, padding jalur: my5PGk8-TBqKfRssPTRPX2A. Dalam perenambelasan tanpa tanda sempang: 9b2e4f1a4f3e4c1a8a7d1b2c3d4e5f60 (32 watak).
Perangkap pesanan bait Microsoft — bagaimana tiga medan pertama GUID disimpan sedikit-endian, jadi bait yang sama boleh mencetak sebagai dua rentetan berbeza
Base64url menyimpan 14 aksara; base58 akan menjimatkan kira-kira sama; heksadesimal ialah piawai. Pilih berdasarkan kes penggunaan anda: jika pengecam muncul dalam URL dan setiap aksara penting, gunakan base64url; jika ia muncul dalam log dan UI tempat manusia membacanya, gunakan bentuk kanonik heksadesimal; jika anda sedang membina sistem blockchain atau sistem teragih di mana checksumming penting, gunakan base58 atau Crockford base32. Apabila memilih jenis lajur, simpan nilai yang dioptimumkan untuk corak akses sebenar anda. Jika anda kerap menanyakan UUID dan memerlukan padanan tidak sensitif huruf besar-besaran, simpan binari(16) dan biarkan pangkalan data mengendalikan perwakilan. Jika anda bertanya dengan subrentetan (mencari UUID yang bermula dengan awalan), perenambelasan lebih mudah dibaca dalam output nyahpepijat.
Contoh yang berfungsi — satu pengecam ditulis sebagai bait, heks kanonik dan bentuk yang dipendekkan, menunjukkan setiap langkah penukaran
Jika anda mengeksport ke CSV dan menghantar e-mel kepada pengguna bukan teknikal, perenambelasan lebih dikenali. Jika anda kekangan ruang (apl mudah alih dengan cache setempat), base64url atau base58 menjimatkan lebar jalur. Penjana ToolAcre mengeluarkan format heksadesimal aksara 36 berkanun; jika anda memerlukan pengekodan yang berbeza, semakan yang dibentuk dengan baik masih berfungsi kerana ia menormalkan sebarang perwakilan yang sah sebelum menyemak format. Pertimbangan prestasi penting apabila mengekod atau menyahkod jutaan UUID. Pengekodan perenambelasan adalah mudah: tukar setiap bait kepada dua aksara dalam masa O(1) setiap bait. Penyahkodan adalah sama mudah. Pengekodan dan penyahkodan Base64 menggunakan jadual carian dan lebih perlahan sedikit (kira-kira 2–3x lebih perlahan daripada hex setiap bait, bergantung pada perkakasan dan pelaksanaan). Base58 adalah lebih perlahan kerana ia pada asasnya adalah penukaran asas dan memerlukan aritmetik modular.
Perkara ini tidak meliputi — pilihan lajur pangkalan data seperti jenis uuid asli berbanding binari(16), diliputi secara berasingan
Jika sistem anda mengekod atau menyahkod UUID dalam gelung panas (penjanaan pengecam frekuensi tinggi, eksport pukal), perenambelasan adalah lebih pantas. Jika pengekodan jarang berlaku dan penjimatan 14 penting, base64url ialah pertukaran yang munasabah. Penjana ToolAcre mengeluarkan hex, jadi anda mendapat kelebihan prestasi tanpa mengorbankan keserasian. Semantik perbandingan rentetan berbeza mengikut pengekodan. UUID perenambelasan boleh dibandingkan sebagai rentetan: 550e8400-e29b-41d4-a716-446655440000 < 550e8400-e29b-41d4-a716-446655440001 (kerja perbandingan leksikografi). UUID binari boleh dibandingkan sebagai bait: perbandingan bait demi bait adalah sama dengan perbandingan berangka. UUID yang dikodkan Base64url dan base58, bagaimanapun, tidak mengekalkan susunan angka dalam perbandingan rentetan leksikografi. Jika sistem anda bergantung pada pengisihan leksikografi UUID (corak biasa yang mengejutkan untuk membina indeks atau kunci pangkalan data), anda mesti sama ada menggunakan heksadesimal, binari atau varian UUID (v6 atau v7) boleh diisih.
Bawa pulang: simpan borang kanonik pada sempadan — penjana ToolAcre mengeluarkan UUID aksara 36 standard dan semakannya menerima rentetan dalam bentuk itu
Penjana ToolAcre pada masa ini menghasilkan UUID v4, yang tidak boleh diisih mengikut susunan pengekodan. Saling kendali memerlukan penyeragaman pada satu pengekodan. Sistem yang menerima UUID dalam hex, base64 dan base58 secara serentak mesti menormalkan semua input kepada bentuk kanonik sebelum diproses. Ini mungkin tetapi menambah kerumitan. API atau pangkalan data luaran mungkin memerlukan pengekodan khusus: sesetengah API menjangkakan urn:uuid: heks awalan, yang lain menjangkakan heks tanpa sempang, yang lain mengharapkan base64url. Dokumenkan jangkaan pengekodan UUID sistem anda dengan jelas dalam kontrak API. Penjana ToolAcre sentiasa mengeluarkan heks berkanun; jika anda memerlukan pengekodan lain, lakukan penukaran secara eksplisit dan dokumentasikan pertukaran (ruang, prestasi, kebolehbacaan, kebolehurutan) kepada pasukan.