UUID generatorius

Generuokite standartinius UUID internetu. Šiame puslapyje naudojamas atsitiktinis UUID v4 su 122 atsitiktiniais bitais ir pažįstamu 36 simbolių pavidalu.

Formatas
Sugeneruoti ID
Paruošta. Generuokite UUID savo naršyklėje.

Kaip sukuriamas šis ID

Struktūra
UUID v4: 8-4-4-4-12 šešioliktainės grupės su RFC varianto bitais.
Entropija
122 atsitiktiniai bitai; versija ir variantas sunaudoja 6 bitus iš 128 bitų reikšmės.
Laikas
Laiko žymos ar įrenginio duomenų nekoduojama.
Kolizijos rizika
Gimtadienio riba (birthday bound) 122 atsitiktiniams bitams yra nereikšminga įprastiems programų, testų ir duomenų bazių ID.
Pavyzdys
dd4ee5e3-ddbe-44bb-85df-1b119c2bb948

Jūsų ID generuojami lokaliai, naudojant stiprų naršyklės atsitiktinių skaičių generatorių. Nieko nesiunčiama į „BroBroGo“.

DUK

Kokio tipo UUID generuoja šis puslapis?

Jis generuoja UUID v4 reikšmes: atsitiktinius UUID su standartiniu brūkšneliais atskirtu pavidalu. Naudokite UUID v4 puslapį, jei norite to paties variklio su specifine v4 informacija.

Ar UUID siunčiami į serverį?

Ne. Generavimas vyksta jūsų naršyklėje naudojant Web Crypto API, todėl reikšmės lieka jūsų įrenginyje.

Kas yra UUID v4 ir kaip šis įrankis jį generuoja

UUID v4 (angl. Universally Unique Identifier, 4 versija) yra 36 simbolių ilgio eilutė, sudaryta iš 16 oktetų, kuriuose 122 bitai yra atsitiktiniai, o likę 6 bitai fiksuoti pagal RFC 4122 specifikaciją. Standartinis formatas yra 8-4-4-4-12 – keturios brūkšneliais atskirtos šešioliktainių skaitmenų grupės. Šis puslapis leidžia akimirksniu sugeneruoti nuo 1 iki 100 tokių identifikatorių tiesiai naršyklėje, nesiunčiant jokių duomenų į serverį.

Pagrindinis šio puslapio skirtumas nuo daugumos kitų UUID generatorių yra tai, kad jis suteikia visišką kontrolę trimis parametrais: kiekį, didžiąsias ir mažąsias raides bei brūkšnelių įtraukimą. Keisdamas bet kurį iš šių nustatymų, vartotojas iš karto mato naują identifikatorių rinkinį. Numatytasis variantas yra mažosios raidės su brūkšneliais, tačiau perjungus į didžiąsias raides arba pašalinus brūkšnelius, formatas prisitaiko akimirksniu.

Skirtingai nei UUID v7 ar ULID, UUID v4 identifikatoriai neturi jokios chronologinės informacijos. Tai reiškia, kad jie rūšiuojasi atsitiktine tvarka, o ne pagal sukūrimo laiką. Ši savybė yra tiek privalumas, tiek trūkumas, priklausomai nuo naudojimo konteksto.

Kaip veikia atsitiktinumas – 122 bitai ir naršyklės kriptografija

UUID v4 naudoja 122 atsitiktinius bitus iš 128 bitų bendro ilgio. Likę 6 bitai yra fiksuoti: pagal RFC 4122, 13-asis šešioliktainis skaitmuo visada yra „4“ (nurodo versiją), o 17-asis šešioliktainis skaitmuo yra „8“, „9“, „a“ arba „b“ (nurodo variantą). Tai reiškia, kad iš 32 šešioliktainių skaitmenų 30 yra atsitiktiniai, o 2 yra fiksuoti.

Naršyklės atveju atsitiktinumui užtikrinti naudojamas crypto.getRandomValues() metodas, kuris remiasi operacinės sistemos kriptografiniu pseudoatsitiktinių skaičių generatoriumi (CSPRNG). Šis šaltinis yra pakankamai stiprus saugumo kryptografijai, todėl jo generuojami UUID v4 identifikatoriai yra praktiškai nenuspėjami. Tai nėra Math.random(), kuris yra greitas, bet ne kriptografiškai saugus.

122 atsitiktiniai bitai suteikia 2^122 galimų kombinacijų – maždaug 5,3 × 10^36. Jei kas sekundę sugeneruotumėte vieną milijardą UUID v4 identifikatorių, prireiktų maždaug 10^19 metų, kad tikimybė susidurti su dublikatu pasiektų 50 procentų. Praktiškai ši tikimybė yra tokia maža, kad kasdieniuose scenarijuose galima laikyti, jog dublikatų nebus.

Kadangi visa generacija vyksta lokaliai naršyklėje, jokie duomenys nepalieka vartotojo įrenginio. Tai reiškia, kad jautriems identifikatoriams, pvz., seanso raktams ar saugumo tokenams, šis metodas yra saugus ir nekelia papildomų privatumo rizikų.

UUID v4 struktūra: formatas, raidės ir brūkšneliai

Standartinis UUID v4 atrodo taip: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx, kur kiekvienas „x“ yra atsitiktinis šešioliktainis skaitmuo (0–9 arba a–f), o „y“ yra vienas iš 8, 9, a, b. Pavyzdžiui: f47ac10b-58cc-4372-a567-0e02b2c3d479.

Brūkšneliai nėra informaciniai – jie tik pagerina žmogaus skaitomumą. Pašalinus brūkšnelius, gaunama 32 šešioliktainių skaitmenų eilutė, pvz., f47ac10b58cc4372a5670e02b2c3d479. Šis formatas dažnai naudojamas ten, kur identifikatorius saugomas kaip 16 baitų masyvas, o ne kaip eilutė.

Didžiosios raidės keitimas (f47aF47A) neturi jokios įtakos UUID vertei. Tai tik vizualinis pasirinkimas. Kai kurios sistemos (pvz., Windows registro raktai) naudoja didžiąsias raides pagal nutylėjimą, o kitos (pvz., dauguma Unix įrankių) – mažąsias. Šis puslapis leidžia pasirinkti bet kurį variantą, o pasikeitus nustatymui iškart sugeneruojamas naujas identifikatorių rinkinys.

Kiekio reguliavimas nuo 1 iki 100 leidžia vienu metu sukurti nedidelį arba vidutinį kiekį identifikatorių. Kiekvienas iš jų generuojamas nepriklausomai nuo kitų, todėl jie neturi jokio statistinio ryšio tarpusavyje.

Susidūrimų tikimybė ir kodėl ji nereikšminga

Kolizija – tai situacija, kai du skirtingi objektai gauna tą patį UUID. UUID v4 atveju, esant 122 atsitiktiniams bitams, kolizijos tikimybė apskaičiuojama pagal gimtadienio paradoksą. Formulė apytikslė: tikimybė, kad tarp n identifikatorių atsiras dublikatas, yra maždaug 1 – e^(-n^2 / (2 * 2^122)).

Praktiniai pavyzdžiai:

Identifikatorių skaičius (n) Apytikslė kolizijos tikimybė
1 milijardas (10^9) ~ 5 × 10^-16
1 trilijonas (10^12) ~ 5 × 10^-10
1 kvadrilijonas (10^15) ~ 5 × 10^-4 (0,05 %)

Kitaip tariant, norint pasiekti 50 % kolizijos tikimybę, reikėtų sugeneruoti maždaug 2,7 × 10^18 identifikatorių. Tai daugiau nei žvaigždžių Paukščių Tako galaktikoje. Kasdienėse programose – nuo duomenų bazių įrašų iki vartotojų sesijų – kolizijos tikimybė yra tokia maža, kad praktiškai jos galima nepaisyti.

Ši matematinė garantija galioja tik tuo atveju, jei atsitiktinumo šaltinis yra tikrai atsitiktinis. Naršyklės CSPRNG suteikia tokį atsitiktinumą, todėl šis generatorius yra patikimas.

UUID v4 poveikis duomenų bazių indeksams

Nors UUID v4 yra puikus saugumo ir unikalumo požiūriu, jis turi aiškų trūkumą, kai naudojamas kaip pagrindinis raktas (angl. primary key) reliacinėse duomenų bazėse. Kadangi identifikatoriai yra atsitiktiniai, jie nesirūšiuoja chronologine tvarka. Tai reiškia, kad įterpiant naują įrašą, jį reikia patalpinti praktiškai atsitiktinėje indekso vietoje, o ne pabaigoje, kaip būtų su automatiškai didėjančiais sveikaisiais skaičiais.

Šis elgesys sukelia keletą pasekmių:

  • Indekso fragmentacija – B-medžio indeksas nuolat persitvarko, kai nauji įrašai patenka tarp esamų.
  • Puslapių skilimai – kai puslapis tampa per pilnas, duomenų bazė turi jį padalinti į du, o tai lėtina rašymo operacijas.
  • Blogesnis lokalumas – dažnai kartu pasiekiami įrašai nėra saugomi fiziškai greta, todėl skaitymo greitis sumažėja.

Dėl šių priežasčių daugelis duomenų bazių administratorių renkasi laiko pagrindu rūšiuojamus identifikatorius, pvz., UUID v7, ULID arba Twitter Snowflake, kai tvarkingas rūšiavimas yra svarbesnis už absoliutų nenuspėjamumą. Vis dėlto, jei saugumo reikalavimai nusveria indeksavimo efektyvumą – pvz., kai identifikatoriai naudojami kaip seanso raktai arba išoriniai identifikatoriai, kurių neturi būti įmanoma atspėti – UUID v4 išlieka geriausiu pasirinkimu.

Argumentų sąrašo kopijavimas ir naudojimo scenarijai

Sugeneravus identifikatorius, juos galima kopijuoti dviem būdais: paspaudus ant konkretaus UUID, nukopijuojamas vienas identifikatorius, o paspaudus „Copy all“ – visi sugeneruoti identifikatoriai vienu metu. Kopijavimo metu pasirodo būsenos pranešimai: pradinis „Ready.“, po generavimo „Generated.“, o po visų kopijavimo „Copied all!“.

Praktiniai naudojimo atvejai:

  • Saugumo tokenai – UUID v4 tinka kaip atsitiktiniai seanso raktai arba CSRF tokenai, nes jie yra nenuspėjami.
  • Išoriniai identifikatoriai – kai objektas turi būti identifikuojamas viešai, bet nenorima atskleisti vidinio, nuoseklaus rakto (pvz., REST API URL).
  • Testavimo duomenys – generuojant didelius testinių duomenų kiekius, UUID v4 užtikrina, kad kiekvienas įrašas būtų unikalus nereikalaujant centrinio koordinatoriaus.
  • Anoniminės sistemos – kai vartotojų ar objektų tapatybė neturi būti susieta su chronologine tvarka.

Kadangi visi identifikatoriai generuojami naršyklėje, įrankis veikia ir neprisijungus prie interneto, kai puslapis jau yra įkeltas. Tai naudinga kūrėjams, dirbantiems saugiose arba izoliuotose aplinkose.

Dažnai užduodami klausimai

Ar UUID v4 yra 128 bitai? Taip, UUID iš viso yra 128 bitai, tačiau 6 iš jų yra fiksuoti, todėl atsitiktinė dalis yra 122 bitai. 2 bitai nurodo variantą, 4 bitai – versiją.

Kuo skiriasi UUID v4 ir UUID v7? UUID v7 naudoja laiko žymą pirmuosiuose 48 bituose, todėl jie yra rūšiuojami chronologine tvarka. UUID v4 neturi jokios laiko informacijos, todėl yra visiškai atsitiktiniai, bet blogiau veikia duomenų bazių indeksuose.

Ar galiu generuoti daugiau nei 100 identifikatorių vienu metu? Šis puslapis leidžia generuoti nuo 1 iki 100 identifikatorių vienu metu. Viršutinė riba yra 100.

Ar brūkšnelių pašalinimas turi įtakos unikalumui? Ne. Brūkšneliai tėra formatavimo elementas – jie neturi įtakos pagrindinei UUID vertei. Pašalinus brūkšnelius gaunama 32 šešioliktainių skaitmenų eilutė, kuri yra lygiavertė originalui.

Ar šis generatorius veikia be interneto? Taip, kai puslapis yra įkeltas naršyklėje, visa generacija vyksta lokaliai, naudojant crypto.getRandomValues(). Jokie duomenys nesiunčiami į serverį, todėl įrankis veikia ir neprisijungus.

Kodėl kartais gaunu du vienodus UUID? Tai nėra įmanoma naudojant šį generatorių, jei jis veikia teisingai. Kiekvienas UUID v4 generuojamas nepriklausomai, o 122 bitų atsitiktinumas užtikrina, kad dublikatų tikimybė yra astronomiškai maža. Jei matote du vienodus identifikatorius, problema gali būti naršyklės CSPRNG implementacijoje arba rankiniame kopijavime.