Alat pembangun · UUID penjana
GUID lwn UUID: Pendakap, Susunan Bait dan Varian Microsoft Diterangkan
· Latar belakang
uuid kriptografi pelayar-apis
GUID ialah nama Microsoft untuk UUID, tetapi susunan pendakap, huruf besar dan bait boleh menjadikan pengecam yang sama kelihatan berbeza di seluruh platform. Siaran ini menerangkan setiap perbezaan dan cara membandingkan dengan selamat.
ID yang sama yang gagal dipadankan merentas sistem — perkhidmatan .NET dan perkhidmatan Java tidak bersetuju dengan satu rekod
Perkhidmatan .NET menjana GUID dan menghantarnya ke perkhidmatan Java, yang cuba memadankan nilai dengan UUID daripada PostgreSQL. Perbandingan rentetan gagal dan sistem melaporkan bahawa pengecam tidak sepadan, walaupun ketiga-tiga perkhidmatan berfungsi dengan asas yang sama 16 bytes. Perbezaan itu nampaknya kosmetik—pendakap, selongsong, tertib bait—tetapi ia menyebabkan perbandingan rentetan gagal dan mengelirukan titik integrasi yang tidak normal di sempadan. GUID ialah istilah Microsoft untuk apa yang RFC 9562 memanggil UUID: pengecam 128-bit dengan susun atur bit yang sama. Kedua-dua nama merujuk kepada struktur asas yang sama, tetapi perwakilan berbeza dalam cara yang mengejutkan pembangun. Memahami tempat asal kekeliruan menghalang pepijat integrasi.
GUID ialah UUID — format 128-bit yang dikongsi dan dari mana asal perbezaan penamaan
GUID bermaksud Pengecam Unik Global dan Pengecam Unik Global dan merupakan nama yang digunakan oleh Microsoft untuk apa yang dipanggil piawaian RFC sebagai UUID. Susun atur 128-bit dan sistem versi/variant adalah sama. RFC 4122 dan RFC 9562 nyatakan format dan makna UUID; Microsoft melaksanakannya dan menggunakan istilah GUID. Perbezaan penamaan adalah sejarah: Microsoft menggunakan GUID sebelum UUID diseragamkan oleh IETF dan istilah Microsoft telah terperangkap dalam ekosistem .NET. Pada peringkat bit, GUID dan UUID boleh ditukar ganti sepenuhnya. Pada peringkat pemformatan, ia berbeza dalam pembentangan: .NET kod sering menulis GUID dengan pendakap dan huruf besar, manakala RFC UUID berkanun menggunakan huruf kecil dan tanpa pendakap.
Pendakap dan huruf besar — borang {XXXXXXXX-...} gaya pendaftaran dan cara menormalkannya
A UUID dalam bentuk RFC kanonik ditulis sebagai lapan, empat, empat, empat, dan dua belas aksara heksadesimal huruf kecil yang dipisahkan oleh tanda sempang: 550e8400-e29b-41d4-a716-446655440000. A .NET GUID secara konvensional dipaparkan dengan pendakap dan huruf besar: {550E8400-E29B-41D4-A716-446655440000}. Pendakap datang daripada format Windows Registry; huruf besar ialah konvensyen paparan. Kedua-dua borang mewakili 128 bits yang serupa. Untuk memadankan GUID daripada .NET dengan UUID daripada PostgreSQL, tanggalkan pendakap dan normalkan selongsong, kemudian bandingkan rentetan. ToolAcre cek yang terbentuk dengan baik menerima borang kanonik dan menanggalkan pendakap secara automatik. Normalisasi ialah transformasi teks kecil yang mengekalkan semua makna.
Tertib bait endian bercampur — cara tiga medan pertama disimpan endian kecil dalam struktur GUID dan mengapa Guid.ToByteArray berbeza daripada tertib RFC bait
Perbezaan berbahaya antara GUID dan UUID ialah susunan bait. RFC 9562 menyatakan bahawa tiga medan pertama (8, 4, dan 4 kumpulan perenambelasan) disimpan dalam susunan byte big-endian (rangkaian). .NET Struktur panduan menyimpan tiga medan pertama dalam little-endian: bait diterbalikkan sebelum menulis ke storan. yang sama 16 bytes, apabila ditulis oleh .NET Guid.ToByteArray() dan ditafsirkan oleh RFC-kod patuh, menghasilkan perwakilan teks yang sama sekali berbeza. A UUID 550e8400-e29b-41d4-a716-446655440000 dalam RFC pesanan bait disimpan sebagai bait 55 0e 84 00 e2 9b 41 d4 a7 16 44 66 55 44 00 00.
Varian Microsoft legasi — maksud a c atau d dalam aksara pertama kumpulan keempat
Selain tertib bait, pengecam Microsoft warisan kadangkala menggunakan medan varian bukan standard. Di mana RFC 9562 menentukan bahawa aksara pertama kumpulan keempat mestilah 8, 9, a, atau b, GUID Microsoft warisan mungkin menggunakan c, d, e, atau f. Ini masih UUID yang sah, tetapi ia mematuhi varian lama yang mendahului penyeragaman RFC. Jika anda menemui GUID dengan c atau d dalam aksara pertama kumpulan keempat, anda mempunyai nilai 128-bit yang sah yang tidak mematuhi RFC bit varian. Moden .NET menjana RFC-GUID yang mematuhi, jadi pengecam baharu tidak seharusnya mempamerkan isu ini. Bit varian lama jarang berlaku tetapi penting untuk dikenali.
Contoh yang berkesan — 16 bytes yang sama diberikan dalam susunan RFC dan dalam susunan struktur GUID, menunjukkan dengan tepat aksara yang bertukar
Ambil UUID 550e8400-e29b-41d4-a716-446655440000 dan tukarkan kepada .NET GUID bentuk tatasusunan bait menggunakan konvensyen little-endian. Dalam RFC tertib, bait ialah: medan pertama (550e8400) sama 55 0e 84 00, medan kedua (e29b) bersamaan dengan e2 9b, medan ketiga (41d4) bersamaan 41 d4, keempat dan kelima sama dengan a7 16 44 66 55 44 00 00. Dalam .NET little-endian: medan pertama menjadi 00 84 0e 55, kedua menjadi 9b e2, ketiga menjadi d4 41, dan selebihnya kekal dalam big-endian. Tatasusunan bait penuh ialah 00 84 0e 55 9b e2 d4 41 a7 16 44 66 55 44 00 00. Jika sistem Java membaca bait ini mengharapkan RFC pesanan, ia mentafsirkannya sebagai 00840e55-9be2-d441-a716-446655440000.
Perkara ini tidak meliputi — SQL NEWSEQUENTIALID dan pesanan pelayan, yang merupakan topik storan mereka sendiri
SQL Tingkah laku fungsi NEWSEQUENTIALID Pelayan dan sifat pesanan pengecam khususnya ialah lapisan storan dan topik khusus pangkalan data. Siaran ini memfokuskan pada perbezaan format dan pesanan bait pada peringkat aplikasi dan siri. Isu pengendalian dan pesanan bait khusus pangkalan data mendalam UUID paling baik ditangani dalam dokumentasi khusus untuk platform pangkalan data tersebut. Sistem pangkalan data yang berbeza mempunyai pendekatan dan pendekatan yang berbeza untuk UUID storan, pengindeksan, pengisihan dan sokongan asli. Sesetengah pangkalan data mengesan versi dan bit varian secara automatik, manakala yang lain memerlukan pengisytiharan jenis eksplisit dan pengendalian tertib bait di sempadan antara sistem dan storan.
Bawa pulang: normalisasi di sempadan — semakan ToolAcre menerima bentuk kanonik, yang merupakan bentuk untuk diseragamkan apabila bertukar ID
Normalkan di sempadan apabila pengecam melintasi sempadan sistem .NET/non-.NET. Strip pendakap, normalkan selongsong secara konsisten dan bait-tukar tiga medan pertama jika bait datang daripada .NET Guid.ToByteArray(). Borang RFC kanonik ialah piawai rujukan: lapan, empat, empat, empat dan dua belas aksara heksadesimal huruf kecil dengan sempang, tanpa pendakap, susunan bait besar-endian. Apabila bertukar dengan sistem .NET, bersetuju dengan bentuk yang dinormalkan dan gunakan penukaran secara eksplisit dalam kod penyepaduan. Dokumen pengendalian pesanan bait dan uji penukaran dengan teliti. Persamaan asas teras antara GUID dan UUID bermakna kebanyakan 128 bits adalah sama.