UUID Generatoru

Brauzerinizdə UUID-lər yaradın: tam təsadüfi v4, verilənlər bazası açarları üçün zamana görə sıralanmış v7 və ya deterministik v5. Eyni anda 1000-ə qədər və heç nə cihazınızı tərk etmir.

Seçmək üçün Yarat düyməsini basın
Versiya
Əlavə Seçimlər

Başqa birinin yaratdığı, adını belə eşitmədiyiniz bir maşında olan və heç kimdən icazə almadan yarada biləcəyiniz, heç nə ilə toqquşmayacaq bir identifikatora ehtiyacınız var? Bu, məhz UUID-nin gördüyü işdir. O, tanış 8-4-4-4-12 şablonunda 36 simvol kimi yazılan 128 bitlik bir rəqəmdir və bütün dizaynı elə qurulub ki, heç nə kimin nəyi alacağını əlaqələndirməsə belə, onlardan ikisi heç vaxt eyni olmayacaq. Bu pulsuz generator onları birbaşa brauzerinizdə yaradır: "Versiya" bölməsində versiyanı seçin, "Say" bölməsində neçə ədəd lazım olduğunu bildirin və "Yarat" düyməsini basın. Səhifə bir çox layihələrin istədiyi versiya olan tək bir v4 ilə açılır, beləliklə ilk identifikatorunuz sadəcə bir klik uzaqlıqdadır.

Hər bir identifikator brauzeriniz tərəfindən Web Crypto API vasitəsilə qurulur. Versiya 4 brauzerin təmin etdiyi yerdə crypto.randomUUID(), əks halda isə crypto.getRandomValues() istifadə edir — Math.random() kimi yalançı təsadüfi JavaScript funksiyası əvəzinə kriptoqrafik cəhətdən güclü bir təsadüfilik mənbəyidir. Versiya 7 əvvələ 48 bitlik millisaniyə vaxt damğasını, sonra eyni millisaniyə daxilində artan 12 bitlik sayğacı, daha sonra isə RFC 9562-də təsvir olunan sıralama üsulu olan 62 təsadüfi biti yerləşdirir; məhz o sayğac sayəsində minlik partiya qarışıq deyil, sıra ilə çıxır. Versiya 1 vaxt damğasını multicast biti təyin edilmiş təsadüfi bir qovşaq identifikatoru ilə birləşdirir, ona görə də o, orijinal 1990-cı illərin tətbiqləri kimi şəbəkə kartınızın ünvanını heç vaxt daşımır. Versiyalar 3 və 5 heç də təsadüfi deyil: onlar müvafiq olaraq MD5 və SHA-1 istifadə edərək bir ad fəzasını və adı birlikdə heşləyirlər və bu heşləmə də sizin cihazınızda baş verir. Serverə heç nə göndərilmir, heç nə qeydə alınmır və səhifə yükləndikdən sonra o, əlaqə kəsildikdə belə işləməyə davam edir.

"Versiya" hər şeyi həll edən sahədir. Versiya 4 heç bir strukturu olmayan 122 təsadüfi bitdən ibarətdir — standartdır və identifikatorun sadəcə unikal olması lazım olduqda ən doğru cavabdır. Versiya 7 62 təsadüfi biti saxlayır, lakin yaradıldığı vaxtla başlayır, buna görə də onların bir qrupu yaradılma ardıcıllığına görə sıralanır; identifikator verilənlər bazası açarı olacaqsa, bu versiyanı seçmək lazımdır. Versiya 1 hələ də onu tələb edən sistemlər üçün burada saxlanılan, vaxta əsaslanan orijinal sxemdir. Versiyalar 3 və 5 fərqli bir cütdür: onlar deterministikdir, yəni eyni girişlər həmişə eyni identifikatoru yaradır və onlar iki əlavə sahə tələb edirlər — standart DNS, URL, OID və X.500 fəzalarından biri və ya öz "Fərdi ad fəzası (UUID)" olan "Ad fəzası" və müəyyən ediləcək sətir olan "Ad". v5-ə URL ad fəzasını və https://example.com/a sətrini verin, bu gün, sabah və başqasının maşınında eyni UUID-ni alacaqsınız. Məhz buna görə v3 və ya v5 seçildikdə "Say" yox olur: bir deterministik dəyərin min nüsxəsi sadəcə eyni deterministik dəyərin min nüsxəsi olardı. Qalan hər bir versiya üçün "Say" 1-dən 1000-ə qədərdir.

Dörd açar, altındakı 128 biti dəyişdirmədən çıxışın formasını dəyişdirir. "Böyük hərflər" onaltılıq rəqəmləri majuskulla yazır, "Defissiz" bəzi sütunların və fayl adlarının üstünlük verdiyi yığcam 32 simvollu formanı təqdim edir və "Fiqurlu mötərizələr" dəyəri { } mötərizələrinə salır — bu, Windows və .NET aləminin GUID adlandırdığı formadır. "Əlavə Seçimlər" altında urn:uuid: onu rəsmi bir URN edən prefiksi əlavə edir; o açıq olduqda "Fiqurlu mötərizələr" və "Defissiz" seçimlərini söndürür, çünki standart yalnız bir URN formasına icazə verir və bu, defisli qanuni formadır. "Kopyalama formatı" siz onları götürəndə partiyanın necə birləşdiriləcəyini müəyyən edir: hər sətirdə biri, vergüllərlə ayrılmış və ya koddakı massivə birbaşa yapışdırıla bilməsi üçün hər bir dəyər dırnaq içində və sonunda vergül olmaqla. Nəticənin altında bitlərlə təsadüfiliyi — v4 üçün 122, v7 üçün 62 — və v7 üçün partiyanın ilk identifikatorunda kodlanmış vaxt damğasını bildirən bir sətir yerləşir, beləliklə dəyərin içindəki vaxt yalnız nəzərdə tutulmur, həm də görünür. "Hamısını kopyala" və "Faylda saxla" hər ikisi "Kopyalama formatı"na əməl edir. "Tarixçə" son 10 partiyanızı öz brauzerinizdə saxlayır: birini geri qaytarmaq üçün üzərinə klikləyin, tək bir qeydi kopyalayın və ya silin, yaxud da hamısını təmizləyin. "Təmizlə" nəticəni boşaldır və parametrlərinizə toxunmur; 50 identifikatordan sonra isə siyahı əlli sətir əvəzinə sürüşdürülə bilən tək bir bloka çevrilir.

Bu səhifədəki ən vacib məqam ilkin açar (primary key) olaraq v4 və v7 arasındakı fərqdir və bu, zövq məsələsi deyil. Verilənlər bazası indeksləri çeşidlənmiş qaydada saxlanılan B-tree strukturlarıdır və yeni bir açarın bu ardıcıllıqda hara düşəcəyi daxiletmənin nə qədər iş tələb edəcəyini müəyyənləşdirir. v4 açarı təsadüfidir, ona görə də ardıcıl daxiletmələr indeksin bir-biri ilə əlaqəsiz künclərinə düşür: dolu olan səhifələr bölünür (page split), verilənlər bazasının yaddaşda saxladığı ağac hissələri nadir hallarda növbəti daxiletmənin ehtiyac duyduğu hissələr olur və indeks göstərdiyi sətirlərin tələb etdiyindən daha böyük və fraqmentləşdirilmiş olur. v7 açarı cari millisaniyə ilə başlayır, beləliklə ardıcıl daxiletmələr ağacın sağ kənarında bir-birinin yanına düşür, hansı ki bu, avtomatik artan tam ədədin yaratdığı şablondur və indeks strukturlarının ətrafında qurulduğu modeldir. Bütün mübadilə də məhz budur: v7 ardıcıl bir açarın daxiletmə davranışını sizə qazandırır, eyni zamanda UUID-ləri seçməyinizə səbəb olan o xüsusiyyəti — hər kəsin serverdən soruşmadan onu yarada bilməsi xüsusiyyətini qoruyub saxlayır. Bunun bədəli isə yaradılma vaxtının indi identifikatorun içində oxuna bilən olmasıdır və bunun əhəmiyyətli olub-olmaması formata deyil, sizin məlumatlarınıza aid bir sualdır.

Heç nə heç vaxt UUID-nin unikal olub-olmadığını yoxlamır; onun ölçüsü zəmanətidir. Heç bir reyestr, heç bir server gediş-gəlişi, heç bir axtarış yoxdur — generator bir rəqəm istehsal edir və onu təhvil verir, onlardan ikisinin toqquşmamasının səbəbi isə sadəcə v4 üçün 2^122, yəni təxminən 5,3 × 10^36 mümkün dəyərin olmasıdır. Ad günü problemi (birthday problem) bunu qiymətləndirməyin dürüst yoludur: hər hansı ikisinin uyğunlaşması ehtimalının 50% olması üçün sizə təxminən 2,7 × 10^18 identifikator lazım olacaqdır, bu isə 86 il ərzində hər saniyə bir milyard yeni UUID deməkdir. Bunun nəyə söz verib nəyə söz vermədiyi barədə dəqiq olmaq lazımdır. Bu, hesab zəmanəti deyil, statistik zəmanətdir və o, yalnız altındakı təsadüfilik real olduqda etibarlıdır — pis toxumlanmış bir generator (seed) və ya entropiya hovuzu ilə birlikdə klonlanmış virtual maşın, onu formatın aşkarlaya bilməyəcəyi bir şəkildə pozur. Versiya 7 sualı daha da daraldır: tək bir millisaniyə ərzində bir generator heç vaxt özünü təkrarlaya bilməz, çünki sayğac zər atmaq əvəzinə artır və müstəqil generatorlar arasında 62 təsadüfi bit bu işi görür.

UUID bir identifikatordur, parol deyil. Versiya 4 gözlənilməzdir və bu, insanları onu bir sirr kimi — parol sıfırlama linki, təxmin edilə bilməyən URL, sessiya tokeni, API açarı kimi istifadə etməyə şirnikləndirir. Gözlənilməzlik reallıqdır, lakin məxfilik dəyərlə necə rəftar edilməsinin xüsusiyyətidir və identifikatorlarla qəsdən ehtiyatsız davranılır: onlar URL-lərdə otururlar, brauzer tarixçəsinə, server jurnallarına, referrer başlıqlarına və analitikaya düşürlər və tez-tez söhbət mesajlarına yapışdırılırlar. Digər versiyalar daha pis namizədlərdir. Həm versiya 1, həm də versiya 7 yaradılma anını kodlayır, ona görə də onu əlində saxlayan hər kəs onun təxminən nə vaxt edildiyini bilir və onunla birlikdə yaradılmış hər şeyin əhatə dairəsini daralda bilər. Versiya 3 və 5 qəsdən deterministikdir: e-poçt ünvanının v5 UUID-si heşlənmiş bir sirr deyil, eyni ünvana malik hər kəsin bir saniyədə hesablaya biləcəyi bir dəyərdir. Bir şeyi adlandırmaq üçün UUID istifadə edin. Dəyərin bilinməməsi lazım olduqda parol generatoru və ya sirlər üçün qurulmuş kitabxanadan bir token istifadə edin.

Niyə bu UUID generatorunu seçməlisiniz?

UUID-lər, adın boş olduğunu təsdiqləmədən əvvəl bir şeyin adlandırılmalı olduğu hər yerdə ortaya çıxır. Tətbiq kodu onları daxil edəcəyi sətirlər üçün yaradır, beləliklə obyekt verilənlər bazasına çatmamışdan əvvəl bir şəxsiyyətə malik olur və yazma əməliyyatı davam edərkən belə müştəri ona istinad edə bilir. Paylanmış sistemlər onlara daha çox arxalanır: eyni cədvələ yazan bir neçə xidmət, təyyarədə olarkən qeydlər yaradan oflayn mobil müştəri, artıq işlədiyi mesajı tanımalı olan növbə (queue) — bunların heç biri paylaşılan sayğac üçün öz növbəsini gözləyə bilməz. Versiya 5 fərqli bir ehtiyacı ödəyir, yəni əlinizdə olan bir şeydən əldə edilən sabit identifikator ehtiyacını: eyni sənəd, eyni URL və ya eyni hesab həmişə tamamilə eyni UUID-yə xəritələnir, beləliklə hər hansı bir idxal əməliyyatı heç nəyi dublikatlaşdırmadan iki dəfə icra oluna bilər. Başqa yerlərdə isə onlar sadəcə olaraq sistemin tələb etdiyi formatdır — jurnallar və izləmələrdən keçən korrelyasiya identifikatoru, minlərlə istifadəçinin yükləməsi tək bir qovluğa düşəndə toqquşmayacaq bir fayl adı, Windows registr açarı, real məlumat kimi görünməli olan test datası.

Bir neçə dürüst məhdudiyyəti bilməyə dəyər. Bir partiya bir versiyadır: "Versiya"dakı dəyər onun içindəki hər şeyə aiddir, buna görə də v4-lərin işə salınması və v7-lərin işə salınması iki fərqli partiyadır. Bu bir generatordur, müfəttiş deyil — versiyasını və ya vaxt damğasını oxumaq üçün bir UUID-ni yapışdırmaq bu səhifənin etdiyi bir şey deyil. "Faylda saxla" düyməsi CSV və ya JSON əvəzinə sadə mətn faylı yazır. Versiya 7 yaradıldığı vaxtı millisaniyəsinə qədər açıq şəkildə göstərir ki, bu bir qüsur yox, real bir mübadilədir və versiya 1 də zamanı eyni şəkildə sızdırır; əgər bu sizin məlumatlarınız üçün problemdirsə, versiya 4 heç kimə heç nə deməyən versiyadır. Standartdan gələn iki xüsusi dəyər versiya deyil və buna görə də "Versiya" bölməsində seçim kimi yer almır, lakin onları buradan kopyalaya bilərsiniz: nil UUID, 00000000-0000-0000-0000-000000000000 və max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Bu səhifədəki hər şey 2024-cü ildə RFC 4122-ni əvəz edən spesifikasiya olan RFC 9562-ni izləyir, buna görə də çıxış UUID-lərlə ümumiyyətlə işləyən hər hansı bir kitabxana, verilənlər bazası və ya API tərəfindən qəbul edilir. Bu məhdudiyyətlər daxilində zəmanət çox güclüdür: hər bir identifikator standarta uyğun, kriptoqrafik cəhətdən təhlükəsiz təsadüfilikdən, öz maşınınızda qurulur və onu heç vaxt başqa heç kim görmür.

FAQ

UUID-ni necə yarada bilərəm?

"Versiya" bölməsindən bir versiya seçin, "Say" bölməsində neçə dənə lazım olduğunu təyin edin və "Yarat" düyməsini basın. Səhifə, əksər layihələrin istədiyi tək bir versiya 4 identifikatoru ilə açılır, beləliklə sıradan bir UUID bir klik uzaqlığındadır. Hər bir dəyər öz kopyalama düyməsi ilə görünür və "Hamısını kopyala" düyməsi bütün partiyanı eyni anda götürür.

UUID v4 və v7 arasındakı fərq nədir?

Versiya 4 heç bir strukturu olmayan 122 təsadüfi bitdən ibarətdir, ona görə də onlardan ikisinin bir-biri ilə heç bir əlaqəsi yoxdur. Versiya 7 ilk 48 bitini yaradıldığı millisaniyəyə xərcləyir, bir sayğac və 62 təsadüfi bit əlavə edir və buna görə də çeşidlənə biləndir: bir partiya yaradıldığı sıra ilə çıxır. İdentifikatorun yalnız unikal olması lazım olduqda v4-dən, həm də verilənlər bazası açarı olacağı zaman v7-dən istifadə edin.

Hansı UUID versiyasından istifadə etməliyəm?

Başqasını seçmək üçün bir səbəbiniz yoxdursa, versiya 4. İdentifikator ilkin açar (primary key) olacaqsa və daxiletmə performansı vacibdirsə versiya 7-ni, eyni girişin həmişə eyni identifikatoru yaratmasına ehtiyacınız varsa versiya 5-i və yalnız əlaqə qurmalı olduğunuz sistem bunu xüsusi olaraq tələb edirsə versiya 1-i seçin. Versiya 3 SHA-1 əvəzinə MD5 ilə versiya 5-dir və uyğunluq üçün mövcuddur.

Yaradılan UUID-lər həqiqətən təsadüfi və təhlükəsizdirmi?

Təsadüfilik kriptoqrafik cəhətdən təhlükəsizdir: o, Math.random()-dan deyil, crypto.randomUUID() və ya crypto.getRandomValues() vasitəsilə brauzerinizin Web Crypto API-sindən gəlir. Təxmin edilə bilməyən mənasında təhlükəsiz olmaq, gizlilik mənasında təhlükəsiz olmaqdan fərqli bir sualdır — UUID bir identifikatordur və o, parol, sessiya tokeni və ya API açarı kimi istifadə edilməməlidir.

Eyni anda çoxlu UUID yarada bilərəmmi?

Bəli, bir dəfəyə 1000-ə qədər. "Say"ı təyin edin və "Yarat" düyməsini basın; əlli dəyərdən sonra nəticə uzun sətirlər siyahısı əvəzinə tək bir sürüşdürülə bilən bloka çevrilir. "Hamısını kopyala" və "Faylda saxla" "Kopyalama formatı"nın dediyi kimi birləşdirilmiş bütün partiyanı götürür — hər sətirdə biri, vergüllə ayrılmış və ya koddakı massivə yapışdırılması üçün dırnaq içində.

Niyə v3 və v5 mənə hər dəfə eyni UUID-ni verir?

Çünki onların məqsədi budur. Versiyalar 3 və 5 deterministikdir: onlar onlara verdiyiniz ad fəzasını və adı heşləyirlər, beləliklə eyni girişlər həmişə hər hansı bir maşında və hər hansı bir dildə eyni identifikatoru yaradır. Bu, onları artıq sahib olduğunuz bir şeydən sabit bir identifikator əldə etmək üçün faydalı edir və onları seçdiyiniz zaman "Say" sahəsinin gizlədilməsinin səbəbi də budur.

Ad fəzası və Ad nədir və hansı ad fəzasını seçməliyəm?

Onlar versiya 3 və ya versiya 5 UUID-nin hesablandığı iki girişdir. "Ad fəzası" adın hansı növ bir şey olduğunu bildirir — host adları üçün DNS, ünvanlar üçün URL, həmin qovluq sxemləri üçün OID və X.500 və ya öz ad fəzası UUID-nizi təqdim etmək istəyirsinizsə "Fərdi" ("Fərdi ad fəzası (UUID)"), hansı ki bu da tətbiq daxilindəki adi seçimdir. "Ad" isə sətrin özüdür. Fərqli ad fəzaları eyni ad üçün tamamilə fərqli nəticələr verir, onların mövcud olmasının əsas məqsədi də budur.

Niyə UUID v7 verilənlər bazasının ilkin açarı üçün v4-dən daha yaxşıdır?

Dəyərlərin indeksdə düşdüyü yerə görə. İndeks çeşidlənmiş qaydada saxlanılır və təsadüfi v4 açarı onun hər hansı bir yerinə düşür, ona görə də daxiletmələr ağacın hər yerindəki səhifələri bölür və yaddaşda saxlanılan hissələr nadir hallarda növbəti ehtiyac duyulan hissələr olur. v7 açarı isə cari millisaniyə ilə başlayır, ona görə də ardıcıl daxiletmələr birlikdə indeksin sonuna düşür, bu isə ardıcıl bir tam ədəd açarının davranış formasıdır — eyni zamanda hər hansı bir xidmətin mərkəzi sayğacdan soruşmadan identifikator yaratmasına icazə verməyə davam edir.

İki UUID heç vaxt eyni ola bilərmi?

Prinsipcə bəli, praktikada xeyr və bunun səbəbini bilməyə dəyər. Heç nə unikal olmağı yoxlamır: versiya 4 üçün sadəcə olaraq 2^122 mümkün dəyər var, təxminən 5,3 × 10^36 və tək bir toqquşma ehtimalının belə 50% olması üçün sizə təxminən 2,7 × 10^18 onlardan — yəni 86 il ərzində hər saniyədə bir milyard — lazım olacaqdır. Zəmanət mütləq deyil, statistikdir və o, təsadüfiliyin həqiqi olmasından asılıdır, bu generatorun adi yalançı təsadüfi funksiya əvəzinə Web Crypto API istifadə etməsinin səbəbi də budur.

UUID-ni parol, API açarı və ya sessiya tokeni kimi istifadə edə bilərəmmi?

Xeyr və bu, ən baha başa gələn səhvdir. Versiya 4 UUID gözlənilməzdir, lakin identifikatorlarla sanki ictimai imiş kimi rəftar edilir: onlar URL-lərdə, brauzer tarixçəsində, server jurnallarında, referrer başlıqlarında və analitikada görünürlər. Versiyalar 1 və 7 əlavə olaraq nə vaxt yaradıldıqlarını da aşkar edirlər, versiya 3 və 5 isə girişləri bilən hər kəs tərəfindən yenidən hesablana bilər. Gizli qalmalı olan hər hansı bir şey üçün parol generatoru və ya sirlər üçün nəzərdə tutulmuş bir kitabxanadan token istifadə edin.

UUID v7 nə vaxt yaradıldığını aşkar edirmi?

Bəli, millisaniyəsinə qədər və bu, bir diqqətsizlik yox, qəsdən edilmiş dizayndır — vaxt damğası v7-ni çeşidlənə bilən edən xüsusiyyətdir. Nəticənin altındakı sətir sizə partiyanın ilk dəyərində kodlanmış vaxtı göstərir ki, siz tam olaraq nəyin ifşa edildiyini görəsiniz. Versiya 1 də özündə vaxt damğası daşıyır. Əgər yaradılma vaxtı paylaşmaq istəmədiyiniz bir şeydirsə, versiya 4 ümumiyyətlə heç bir vaxt ehtiva etmir.

UUID v1 mənim MAC ünvanımı ifşa edirmi?

Burada yox. Orijinal sxem maşının şəbəkə kartı ünvanını qovşaq (node) sahəsi olaraq istifadə edirdi, hansı ki v1-in reputasiyası da buradan gəlir, lakin standart həmçinin multicast biti ilə işarələnmiş təsadüfi qovşaq identifikatoruna da icazə verir və bu generatorun yaratdığı da budur. Sizin avadanlıq ünvanınız heç vaxt oxunmur və heç vaxt çıxışda görünmür.

Böyük hərflər, Defissiz, Fiqurlu mötərizələr və urn:uuid: nəyi dəyişdirir?

Yalnız təqdimatı — altındakı 128 bit hər bir formada tamamilə eynidir. "Böyük hərflər" onaltılıq rəqəmləri majuskulla yazır, "Defissiz" 32 simvollu yığcam versiyanı təqdim edir, "Fiqurlu mötərizələr" dəyəri Windows və .NET-in GUID yazma tərzinə uyğun olaraq { } mötərizələrinin içinə salır və urn:uuid: onu rəsmi URN edən prefiksi əlavə edir. urn:uuid: açıq olduğu müddətcə digər ikisini söndürür, çünki standart yalnız bir dənə URN forması təyin edir və bu da qanuni defisli formadır.