UUID-ის გენერატორი

დააგენერირეთ UUID ბრაუზერში: სრულად შემთხვევითი v4, დროით დალაგებული v7 მონაცემთა ბაზისთვის, ან დეტერმინისტული v5. 1000-მდე ერთდროულად, მონაცემები არსად იგზავნება.

დააჭირეთ «გენერაციას» არჩევისთვის
ვერსია
დამატებითი პარამეტრები

გჭირდებათ იდენტიფიკატორი, რომელიც არ დაემთხვევა სხვის მიერ შექმნილს, მანქანაზე, რომლის შესახებაც არასოდეს გსმენიათ და არავისგან ნებართვის აღებას არ მოითხოვს? ეს სწორედ ის ამოცანაა, რასაც UUID ასრულებს. ის არის 128-ბიტიანი რიცხვი, ჩაწერილი 36 სიმბოლოდ ნაცნობი 8-4-4-4-12 შაბლონით და მისი მთლიანი დიზაინი იმაში მდგომარეობს, რომ ორი მათგანი არასოდეს იქნება ერთნაირი, თუნდაც არავინ აკონტროლებდეს ვინ რომელს იღებს. ეს უფასო გენერატორი ქმნის მათ პირდაპირ თქვენს ბრაუზერში: აირჩიეთ ვერსია ველში „ვერსია“, მიუთითეთ რამდენი გჭირდებათ ველში „რაოდენობა“ და დააჭირეთ ღილაკს „გენერაცია“. გვერდი იხსნება ერთი v4-ით — ვერსიით, რომელსაც პროექტების უმეტესობა ითხოვს, ასე რომ, პირველ იდენტიფიკატორამდე მხოლოდ ერთი დაწკაპუნება გაშორებთ.

ყველა იდენტიფიკატორი იქმნება თქვენი ბრაუზერის მიერ Web Crypto API-ს მეშვეობით. ვერსია 4 იყენებს crypto.randomUUID()-ს, სადაც ბრაუზერი უზრუნველყოფს მას, სხვა შემთხვევაში კი crypto.getRandomValues()-ს — კრიპტოგრაფიულად ძლიერ შემთხვევითობის წყაროს და არა JavaScript-ის ისეთ ფსევდო-შემთხვევით ფუნქციას, როგორიცაა Math.random(). ვერსია 7 წინა პლანზე სვამს 48-ბიტიან მილიწამების დროის შტამპს, შემდეგ 12-ბიტიან მთვლელს, რომელიც იზრდება იმავე მილიწამის ფარგლებში და ბოლოს 62 შემთხვევით ბიტს — ეს არის დალაგების მეთოდი, რომელიც აღწერილია RFC 9562-ში; სწორედ ამ მთვლელის დამსახურებაა, რომ ათასობით მნიშვნელობა მიმდევრობით გამოდის და არა არეულად. ვერსია 1 აერთიანებს დროის შტამპს შემთხვევითი კვანძის (node) იდენტიფიკატორთან, რომელსაც ჩართული აქვს მულტიკასტ ბიტი, ამიტომ ის არასოდეს ატარებს თქვენი ქსელის ბარათის მისამართს, როგორც ამას 1990-იანი წლების ორიგინალური იმპლემენტაციები აკეთებდნენ. ვერსიები 3 და 5 საერთოდ არ არის შემთხვევითი: ისინი ჰეშავენ სახელთა სივრცეს (namespace) სახელთან ერთად შესაბამისად MD5-ისა და SHA-1-ის გამოყენებით და ეს ჰეშირებაც თქვენს მოწყობილობაზე ხდება. სერვერზე არაფერი იგზავნება, არაფერი ილოგება და გვერდის ჩატვირთვის შემდეგ, ის ინტერნეტთან კავშირის გარეშეც აგრძელებს მუშაობას.

„ვერსია“ არის ველი, რომელიც წყვეტს ყველაფერ დანარჩენს. ვერსია 4 არის 122 შემთხვევითი ბიტი ყოველგვარი სტრუქტურის გარეშე — ის არის ნაგულისხმევი და სწორი არჩევანი, როდესაც იდენტიფიკატორი უბრალოდ უნიკალური უნდა იყოს. ვერსია 7 ინარჩუნებს 62 შემთხვევით ბიტს, მაგრამ იწყება შექმნის დროით, ამიტომ მათი ნაკრები ილაგება შექმნის დროის მიხედვით; სწორედ ამიტომ უნდა აირჩიოთ ეს ვერსია, თუ იდენტიფიკატორი მონაცემთა ბაზის გასაღები (key) უნდა გახდეს. ვერსია 1 ორიგინალური, დროზე დაფუძნებული სქემაა და აქ მხოლოდ იმ სისტემებისთვისაა შენარჩუნებული, რომლებიც მას ჯერ კიდევ ითხოვენ. ვერსიები 3 და 5 უცნაური წყვილია: ისინი დეტერმინისტულია, რაც ნიშნავს, რომ ერთი და იგივე შეყვანილი მონაცემები ყოველთვის ერთსა და იმავე იდენტიფიკატორს იძლევა. ისინი ითხოვენ ორ დამატებით ველს — ველს „სახელთა სივრცე“, რომელიც არის ერთ-ერთი სტანდარტული სივრცე (DNS, URL, OID, X.500) ან თქვენ მიერ მითითებული „მორგებული“, და ველს „სახელი“, რომელიც არის იდენტიფიცირებული სტრიქონი (string). მიაწოდეთ v5-ს URL სახელთა სივრცე და https://example.com/a და მიიღებთ ერთსა და იმავე UUID-ს დღეს, ხვალ და სხვის მოწყობილობაზეც. ამის გამო, ველი „რაოდენობა“ ქრება v3 ან v5-ის არჩევისას: ერთი დეტერმინისტული მნიშვნელობის ათასი ასლი მაინც ერთი დეტერმინისტული მნიშვნელობის ათასი ასლი იქნება. ყველა სხვა ვერსიისთვის „რაოდენობა“ 1-დან 1000-მდეა.

ოთხი გადამრთველი ცვლის შედეგის ვიზუალს 128 ბიტის შეცვლის გარეშე. გადამრთველი „მთავრული“ ბეჭდავს თექვსმეტობით ციფრებს დიდი ასოებით, გადამრთველი „დეფისების გარეშე“ იძლევა კომპაქტურ 32-სიმბოლოიან ფორმას, რომელსაც ზოგიერთი სვეტი და ფაილის სახელი ანიჭებს უპირატესობას, ხოლო გადამრთველი „ფიგურული ფრჩხილები“ სვამს მნიშვნელობას { }-ში — ეს არის ფორმა, რომელსაც Windows-ი და .NET სამყარო GUID-ს უწოდებს. სექციაში „დამატებითი პარამეტრები“, urn:uuid: ამატებს პრეფიქსს, რომელიც მას ოფიციალურ URN-ად აქცევს; ის თიშავს პარამეტრებს „ფიგურული ფრჩხილები“ და „დეფისების გარეშე“, რადგან სტანდარტი მხოლოდ ერთ URN ფორმას უშვებს და ის არის კანონიკური ფორმა დეფისებით. „კოპირების ფორმატი“ განსაზღვრავს, თუ როგორ ერთიანდება ნაკრები კოპირებისას: თითო თითო ხაზზე, მძიმით გამოყოფილი თუ თითოეული მნიშვნელობა ბრჭყალებში მძიმით ბოლოში, რაც პირდაპირ შეგიძლიათ ჩასვათ მასივში კოდის წერისას. შედეგის ქვეშ არის ხაზი, რომელიც აჩვენებს შემთხვევითობას ბიტებში — 122 v4-სთვის, 62 v7-სთვის — ხოლო v7-სთვის ასევე აჩვენებს დროის შტამპს, რომელიც კოდირებულია ნაკრების პირველ იდენტიფიკატორში, ასე რომ დრო მნიშვნელობის შიგნით თვალსაჩინოა და არა ნაგულისხმევი. ღილაკები „ყველას კოპირება“ და „ფაილში შენახვა“ ითვალისწინებს პარამეტრს „კოპირების ფორმატი“. „ისტორია“ ინახავს თქვენს ბოლო 10 ნაკრებს პირდაპირ თქვენს ბრაუზერში: დააწკაპუნეთ ერთ-ერთზე მის დასაბრუნებლად, დააკოპირეთ ან წაშალეთ კონკრეტული ჩანაწერი, ან გაასუფთავეთ მთლიანად. ღილაკი „გასუფთავება“ ცარიელებს შედეგს და ხელუხლებლად ტოვებს თქვენს პარამეტრებს, ხოლო 50 იდენტიფიკატორის შემდეგ სია იქცევა ერთ სქროლვად ბლოკად 50 ცალკეული ხაზის ნაცვლად.

ამ გვერდზე ყველაზე მნიშვნელოვანი რამ v4 და v7-ის, როგორც პირველადი გასაღების (primary key), შორის სხვაობაა და ეს გემოვნების საკითხი არ არის. მონაცემთა ბაზის ინდექსები არის დალაგებული სახით შენახული ხეები და ის, თუ სად მოხვდება ახალი გასაღები ამ მიმდევრობაში, წყვეტს, თუ რამდენ მუშაობას მოითხოვს მისი ჩამატება (insert). v4 გასაღები შემთხვევითია, ამიტომ მიმდევრობითი ჩამატებები ხვდება ინდექსის ერთმანეთთან დაუკავშირებელ კუთხეებში: გვერდები, რომლებიც სავსე იყო, იყოფა, ხის ის ნაწილები, რომლებსაც ბაზა მეხსიერებაში ინახავს, იშვიათად არის ის ნაწილები, რომლებიც შემდეგი ჩამატებისთვისაა საჭირო და ინდექსი საბოლოოდ იმაზე დიდი და ფრაგმენტირებული გამოდის, ვიდრე ეს მასში არსებულ რიგებს შეეფერება. v7 გასაღები იწყება მიმდინარე მილიწამით, ამიტომ მიმდევრობითი ჩამატებები თავს იყრის ერთად ხის მარჯვენა კიდეში. სწორედ ამ შაბლონს წარმოქმნის ავტომატურად მზარდი მთელი რიცხვი (auto-incrementing integer) და სწორედ ამ შაბლონზეა აგებული ინდექსის სტრუქტურები. ეს არის მთელი კომპრომისი: v7 გაძლევთ მიმდევრობითი გასაღების ჩამატების ქცევას, ამავდროულად ინარჩუნებს იმ თვისებას, რის გამოც თავდაპირველად UUID აირჩიეთ — ნებისმიერს შეუძლია შექმნას ის სერვერის გარეშე. ამის ფასი ისაა, რომ შექმნის დრო ახლა იკითხება იდენტიფიკატორის შიგნით და არის თუ არა ეს პრობლემა, დამოკიდებულია თქვენს მონაცემებზე და არა ფორმატზე.

არაფერი არასოდეს ამოწმებს UUID-ს უნიკალურობაზე; მისი ზომა თავად არის გარანტია. არ არსებობს რეესტრი, არ ხდება სერვერზე მოთხოვნის გაგზავნა-მიღება, არ ხდება ძიება — გენერატორი ქმნის რიცხვს და გაძლევთ მას. ის, რომ ორი მათგანი ერთმანეთს არ ემთხვევა, განპირობებულია იმით, რომ არსებობს 2^122 შესაძლო v4 მნიშვნელობა, დაახლოებით 5,3 × 10^36. დაბადების დღის პარადოქსი ამის შეფასების საუკეთესო გზაა: თქვენ დაგჭირდებათ დაახლოებით 2,7 × 10^18 იდენტიფიკატორი, რათა გქონდეთ 50%-იანი შანსი, რომ ნებისმიერი ორი მათგანი ერთმანეთს დაემთხვევა, რაც ნიშნავს წამში მილიარდ ახალ UUID-ს 86 წლის განმავლობაში. მნიშვნელოვანია ზუსტად განვსაზღვროთ, რას გვპირდება და რას არა ეს სტატისტიკა. ეს არის სტატისტიკური გარანტია და არა არითმეტიკული, და ის ძალაშია მხოლოდ მანამ, სანამ მის მიღმა არსებული შემთხვევითობა რეალურია — ცუდად ინიციალიზებული (seeded) გენერატორი, ან ვირტუალური მანქანა, რომელიც კლონირებულია მის ენტროპიის პულთან ერთად, არღვევს მას ისე, რომ ფორმატი ამას ვერ ამჩნევს. ვერსია 7 კიდევ უფრო ავიწროებს ამ საკითხს: ერთი მილიწამის ფარგლებში ერთი გენერატორი საერთოდ ვერ გაიმეორებს საკუთარ თავს, რადგან მთვლელი იზრდება და არა შემთხვევით რიცხვებს იძლევა, ხოლო დამოუკიდებელ გენერატორებს შორის საქმეს 62 შემთხვევითი ბიტი აკეთებს.

UUID არის იდენტიფიკატორი და არა პაროლი. ვერსია 4 არაპროგნოზირებადია და ეს ხალხს უბიძგებს, რომ მას საიდუმლოსავით მოექცნენ — პაროლის აღდგენის ბმული, გამოუცნობი URL, სესიის ტოკენი, API გასაღები. არაპროგნოზირებადობა რეალურია, მაგრამ საიდუმლოება მნიშვნელობის დამუშავების წესზეა დამოკიდებული, იდენტიფიკატორებს კი დიზაინითვე დაუდევრად ეპყრობიან: ისინი ხვდება URL-ებში, რომლებიც ბრაუზერის ისტორიაში, სერვერის ლოგებში, Referrer ჰედერებსა და ანალიტიკაში ილექება და ხშირად ჩატის შეტყობინებებშიც კოპირდება. სხვა ვერსიები კიდევ უფრო ცუდი კანდიდატებია. ვერსია 1 და ვერსია 7 აკოდირებენ შექმნის მომენტს, ასე რომ, ვინც მას ფლობს, დაახლოებით იცის როდის შეიქმნა ის და შეუძლია დაავიწროოს მასთან ერთად შექმნილი ყველაფრის არეალი. ვერსიები 3 და 5 გამიზნულად დეტერმინისტულია: ელფოსტის მისამართის v5 UUID არ არის დაჰეშილი საიდუმლო, ის არის მნიშვნელობა, რომლის გამოთვლაც წამში შეუძლია ნებისმიერს, ვისაც იგივე მისამართი აქვს. გამოიყენეთ UUID ობიექტებისთვის სახელის სარქმევად. გამოიყენეთ პაროლების გენერატორი ან ტოკენი სპეციალურად საიდუმლოებისთვის შექმნილი ბიბლიოთეკიდან, როდესაც მნიშვნელობა უცნობი უნდა დარჩეს.

რატომ უნდა აირჩიოთ ეს UUID გენერატორი?

UUID-ები ჩნდება ყველგან, სადაც რაღაცას უნდა დაერქვას სახელი, სანამ ვინმე დაადასტურებს, რომ ეს სახელი თავისუფალია. აპლიკაციის კოდი ქმნის მათ იმ რიგებისთვის, რომელთა ჩამატებასაც აპირებს, ასე რომ ობიექტს აქვს იდენტობა მონაცემთა ბაზამდე მიღწევამდეც და კლიენტს შეუძლია მასზე მითითება სანამ ჩაწერა ჯერ კიდევ პროცესშია. განაწილებული სისტემები მათ უფრო მეტად ეყრდნობა: რამდენიმე სერვისი, რომლებიც ერთ ცხრილში წერენ, ხაზგარეშე მობილური კლიენტი, რომელიც ქმნის ჩანაწერებს თვითმფრინავში, რიგი, რომელმაც უნდა ამოიცნოს შეტყობინება, რომელიც უკვე დაამუშავა — არცერთ მათგანს არ შეუძლია დაელოდოს საერთო მთვლელს. ვერსია 5 ფარავს განსხვავებულ საჭიროებას, ეს არის სტაბილური იდენტიფიკატორი, რომელიც მიღებულია იმისგან, რაც უკვე გაქვთ: ერთი და იგივე დოკუმენტი, ერთი და იგივე URL ან ერთი და იგივე ანგარიში ყოველთვის ერთი და იმავე UUID-ზე აისახება, ასე რომ იმპორტი შეიძლება ორჯერ გაეშვას დუბლირების გარეშე. სხვაგან ისინი უბრალოდ ფორმატია, რომელსაც სისტემა მოითხოვს — კორელაციის იდენტიფიკატორი, რომელიც გადის ლოგებსა და ტრეისებში, ფაილის სახელი, რომელიც არ დაემთხვევა სხვას, როდესაც ათასი მომხმარებლის ატვირთული ფაილი ერთ ბაკეტში იყრის თავს, Windows-ის რეესტრის გასაღები, სატესტო მონაცემები, რომლებიც რეალურ მონაცემებს უნდა ჰგავდეს.

ღირს იცოდეთ რამდენიმე რეალური შეზღუდვის შესახებ. ერთი ნაკრები არის ერთი ვერსია: ველში „ვერსია“ მითითებული მნიშვნელობა ეხება ყველაფერს ამ ნაკრებში, ასე რომ v4-ების და v7-ების ნაკრები ორი სხვადასხვა ნაკრებია. ეს არის გენერატორი და არა ინსპექტორი — UUID-ის ჩასმა მისი ვერსიის ან დროის შტამპის წასაკითხად არ არის ის, რასაც ეს გვერდი აკეთებს. ღილაკი „ფაილში შენახვა“ წერს ტექსტურ ფაილს და არა CSV-ს ან JSON-ს. ვერსია 7 ღიად ამჟღავნებს როდის შეიქმნა ის, მილიწამების სიზუსტით, რაც რეალური კომპრომისია და არა ხარვეზი, და ვერსია 1-იც ანალოგიურად ამჟღავნებს დროს; თუ ეს თქვენი მონაცემებისთვის პრობლემას წარმოადგენს, ვერსია 4 არის ის ვერსია, რომელიც არავის არაფერს ეუბნება. ორი სპეციალური მნიშვნელობა სტანდარტიდან არ წარმოადგენს ვერსიას და შესაბამისად არ არის ველში „ვერსია“ არჩევანის სახით, თუმცა მათი კოპირება აქედან შეგიძლიათ: nil UUID, 00000000-0000-0000-0000-000000000000, და max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. ამ გვერდზე ყველაფერი მიჰყვება RFC 9562-ს, სპეციფიკაციას, რომელმაც 2024 წელს შეცვალა RFC 4122, ასე რომ შედეგი მისაღებია ნებისმიერი ბიბლიოთეკისთვის, მონაცემთა ბაზისთვის თუ API-სთვის, რომელიც საერთოდ მუშაობს UUID-ებთან. ამ შეზღუდვების ფარგლებში გარანტია ძლიერია: ყველა იდენტიფიკატორი იქმნება სტანდარტის მიხედვით, კრიპტოგრაფიულად უსაფრთხო შემთხვევითობიდან, თქვენსავე მოწყობილობაზე და მას სხვა ვერავინ ვერასოდეს ნახავს.

FAQ

როგორ დავაგენერირო UUID?

აირჩიეთ ვერსია ველში „ვერსია“, მიუთითეთ რამდენი გჭირდებათ ველში „რაოდენობა“ და დააჭირეთ ღილაკს „გენერაცია“. გვერდი იხსნება ერთი ვერსია 4-ის იდენტიფიკატორით, რაც პროექტების უმეტესობას სჭირდება, ასე რომ ჩვეულებრივი UUID მხოლოდ ერთი დაწკაპუნებითაა ხელმისაწვდომი. თითოეულ მნიშვნელობას თავისი კოპირების ღილაკი აქვს, ხოლო ღილაკი „ყველას კოპირება“ მთლიან ნაკრებს ერთბაშად აკოპირებს.

რა განსხვავებაა UUID v4-სა და v7-ს შორის?

ვერსია 4 არის 122 შემთხვევითი ბიტი ყოველგვარი სტრუქტურის გარეშე, ამიტომ ორ მათგანს ერთმანეთთან არანაირი კავშირი არ აქვს. ვერსია 7 ხარჯავს პირველ 48 ბიტს შექმნის მილიწამზე, ამატებს მთვლელს და 62 შემთხვევით ბიტს, რის გამოც ის დალაგებადია: ნაკრები გამოდის შექმნის მიმდევრობით. გამოიყენეთ v4, როდესაც იდენტიფიკატორი მხოლოდ უნიკალური უნდა იყოს, და v7, როდესაც ის მონაცემთა ბაზის გასაღებიც იქნება.

UUID-ის რომელი ვერსია უნდა გამოვიყენო?

ვერსია 4, თუ არ გაქვთ მიზეზი სხვა აირჩიოთ. აირჩიეთ ვერსია 7, თუ იდენტიფიკატორი ხდება პირველადი გასაღები და ჩამატების (insert) წარმადობა მნიშვნელოვანია, ვერსია 5, თუ გჭირდებათ, რომ ერთმა და იმავე შეყვანილმა მონაცემმა ყოველთვის ერთი და იგივე იდენტიფიკატორი მოგცეთ, და ვერსია 1 მხოლოდ მაშინ, თუ სისტემა, რომელთანაც გიწევთ მუშაობა, კონკრეტულად ამას ითხოვს. ვერსია 3 არის ვერსია 5 MD5-ით SHA-1-ის ნაცვლად და არსებობს მხოლოდ თავსებადობისთვის.

ნამდვილად შემთხვევითი და უსაფრთხოა დაგენერირებული UUID-ები?

შემთხვევითობა კრიპტოგრაფიულად უსაფრთხოა: ის მოდის თქვენი ბრაუზერის Web Crypto API-დან, crypto.randomUUID()-ის ან crypto.getRandomValues()-ის მეშვეობით და არა Math.random()-დან. უსაფრთხო გამოუცნობადობის თვალსაზრისით სხვა საკითხია და უსაფრთხო საიდუმლოების თვალსაზრისით — სხვა. UUID არის იდენტიფიკატორი და ის არ უნდა გამოიყენოთ პაროლად, სესიის ტოკენად ან API გასაღებად.

შემიძლია ბევრი UUID-ის ერთდროულად დაგენერირება?

დიახ, 1000-მდე ერთ ჯერზე. დააყენეთ ველის „რაოდენობა“ მნიშვნელობა და დააჭირეთ ღილაკს „გენერაცია“; 50 მნიშვნელობის შემდეგ შედეგი ხდება ერთი სქროლვადი ბლოკი გრძელი სიის ნაცვლად. ღილაკები „ყველას კოპირება“ და „ფაილში შენახვა“ იღებს მთლიან ნაკრებს, გაერთიანებულს ველში „კოპირების ფორმატი“ მითითებული წესით — თითო ხაზზე, მძიმით გამოყოფილი, ან ბრჭყალებში ჩასმული მასივში ჩასასმელად.

რატომ მაძლევს v3 და v5 ერთსა და იმავე UUID-ს ყოველ ჯერზე?

რადგან სწორედ ამისთვისაა შექმნილი. ვერსიები 3 და 5 დეტერმინისტულია: ისინი ჰეშავენ თქვენ მიერ მიწოდებულ სახელთა სივრცესა და სახელს, ამიტომ იდენტური მონაცემები ყოველთვის ქმნის იდენტურ იდენტიფიკატორს, ნებისმიერ მანქანაზე და ნებისმიერ ენაზე. ეს მათ გამოსადეგს ხდის სტაბილური იდენტიფიკატორის მისაღებად იმისგან, რაც უკვე გაქვთ, და სწორედ ამიტომ ქრება ველი „რაოდენობა“ მათ არჩევისას.

რა არის სახელთა სივრცე (Namespace) და სახელი (Name) და რომელი სივრცე უნდა ავირჩიო?

ეს არის ორი მონაცემი, რომლისგანაც გამოითვლება ვერსია 3 ან ვერსია 5 UUID. ველში „სახელთა სივრცე“ უთითებთ, თუ რა ტიპისაა სახელი — DNS ჰოსტის სახელებისთვის, URL მისამართებისთვის, OID და X.500 დირექტორიის სქემებისთვის, ან „მორგებული“, თუ გსურთ მიაწოდოთ თქვენი საკუთარი სახელთა სივრცის UUID, რაც ჩვეულებრივი არჩევანია აპლიკაციის შიგნით. ველი „სახელი“ თავად სტრიქონია. სხვადასხვა სახელთა სივრცე სრულიად განსხვავებულ შედეგს იძლევა ერთი და იმავე სახელისთვის და სწორედ ეს არის მათი არსებობის მიზანი.

რითი სჯობს UUID v7 v4-ს მონაცემთა ბაზის პირველადი გასაღებისთვის?

იმით, თუ სად ხვდება მნიშვნელობები ინდექსში. ინდექსი ინახება დალაგებული სახით და შემთხვევითი v4 გასაღები მასში ნებისმიერ ადგილას ხვდება, ამიტომ ჩამატებები ყოფს გვერდებს ხის მთელ სივრცეში და მეხსიერებაში შენახული ნაწილები იშვიათად არის ის ნაწილები, რომლებიც შემდეგ იქნება საჭირო. v7 გასაღები იწყება მიმდინარე მილიწამით, ამიტომ მიმდევრობითი ჩამატებები თავს იყრის ერთად ინდექსის ბოლოში, რაც ასახავს მიმდევრობითი მთელი რიცხვის ქცევას — ამავდროულად ნებისმიერ სერვისს აძლევს საშუალებას შექმნას იდენტიფიკატორი ცენტრალური მთვლელის გარეშე.

შეიძლება თუ არა ორი UUID ოდესმე დაემთხვეს ერთმანეთს?

პრინციპში კი, პრაქტიკაში არა და ღირს იცოდეთ რომელი რომელია. უნიკალურობას არაფერი ამოწმებს: უბრალოდ არსებობს 2^122 შესაძლო ვერსია 4-ის მნიშვნელობა, დაახლოებით 5,3 × 10^36, და დაგჭირდებათ დაახლოებით 2,7 × 10^18 მათგანი — მილიარდი წამში 86 წლის განმავლობაში — რათა გქონდეთ 50%-იანი შანსი ერთი დამთხვევისა. გარანტია სტატისტიკურია და არა აბსოლუტური, და ის დამოკიდებულია იმაზე, რომ შემთხვევითობა ნამდვილია. სწორედ ამიტომ იყენებს ეს გენერატორი Web Crypto API-ს და არა ჩვეულებრივ ფსევდო-შემთხვევით ფუნქციას.

შემიძლია თუ არა UUID გამოვიყენო როგორც პაროლი, API გასაღები ან სესიის ტოკენი?

არა, და ეს არის შეცდომა, რომელიც ყველაზე ძვირი ჯდება. ვერსია 4 UUID არაპროგნოზირებადია, მაგრამ იდენტიფიკატორებს ისე ეპყრობიან, თითქოს ისინი საჯაროა: ისინი ხვდება URL-ებში, ბრაუზერის ისტორიაში, სერვერის ლოგებში, Referrer ჰედერებსა და ანალიტიკაში. ვერსიები 1 და 7 დამატებით ამჟღავნებენ შექმნის დროს, ხოლო ვერსიები 3 და 5 შეიძლება ხელახლა გამოითვალოს ნებისმიერმა, ვინც იცის შეყვანილი მონაცემები. ყველაფრისთვის, რაც საიდუმლოდ უნდა დარჩეს, გამოიყენეთ პაროლების გენერატორი ან ტოკენი საიდუმლოებისთვის განკუთვნილი ბიბლიოთეკიდან.

ამჟღავნებს თუ არა UUID v7 მისი შექმნის დროს?

დიახ, მილიწამების სიზუსტით და ეს გამიზნულადაა გაკეთებული და არა შეცდომით — დროის შტამპია ის, რაც v7-ს დალაგებადად აქცევს. შედეგის ქვეშ არსებული ხაზი გაჩვენებთ დროს, რომელიც კოდირებულია ნაკრების პირველ მნიშვნელობაში, ასე რომ ზუსტად შეგიძლიათ დაინახოთ რა არის გამჟღავნებული. ვერსია 1 ასევე შეიცავს დროის შტამპს. თუ შექმნის დრო ისეთი რამაა, რისი გასაჯაროებაც არ გსურთ, ვერსია 4 არის ვერსია, რომელიც საერთოდ არ შეიცავს დროს.

ამჟღავნებს თუ არა UUID v1 ჩემს MAC მისამართს?

აქ არა. ორიგინალური სქემა იყენებდა მანქანის ქსელის ბარათის მისამართს, როგორც კვანძის (node) ველს, საიდანაც მოდის v1-ის რეპუტაცია, მაგრამ სტანდარტი ასევე უშვებს შემთხვევითი კვანძის იდენტიფიკატორს, რომელიც მონიშნულია მულტიკასტ ბიტით, და ეს გენერატორი სწორედ ამას აწარმოებს. თქვენი ტექნიკის მისამართი არასოდეს იკითხება და არასოდეს ჩნდება შედეგში.

რას ცვლის პარამეტრები მთავრული, დეფისების გარეშე, ფიგურული ფრჩხილები და urn:uuid:?

მხოლოდ პრეზენტაციას — 128 ბიტი მათ მიღმა იდენტურია ყველა ფორმაში. პარამეტრი „მთავრული“ ბეჭდავს თექვსმეტობით ციფრებს დიდი ასოებით, „დეფისების გარეშე“ იძლევა კომპაქტურ 32-სიმბოლოიან ვერსიას, „ფიგურული ფრჩხილები“ მნიშვნელობას { }-ში სვამს, როგორც ამას Windows-ი და .NET აკეთებენ GUID-სთვის, ხოლო urn:uuid: ამატებს პრეფიქსს, რომელიც მას ოფიციალურ URN-ად აქცევს. პარამეტრი urn:uuid: თიშავს დანარჩენ ორს, რადგან სტანდარტი განსაზღვრავს ზუსტად ერთ URN ფორმას და ის არის კანონიკური ფორმა დეფისებით.