UUID v4 generaator

Genereerige UUID v4 väärtusi veebis: 122 juhuslikku bitti, standardne UUID kuju ja kopeerimisvalmis tulemused otse teie brauseris.

Vorming
Genereeritud ID-d
Valmis. Genereerige UUID v4 väärtusi otse oma brauseris.

Kuidas see ID on üles ehitatud

Struktuur
128-bitine UUID versiooniga 4 ja RFC variandi bittidega, kuvatuna kujul 8-4-4-4-12.
Entroopia
122 juhuslikku bitti funktsioonist crypto.randomUUID().
Aeg
Puudub; v4 ID-d ei paljasta nende loomise aega.
Kollisioonirisk
Kollisioone reguleerib 122 juhuslikku bitti, mis ületab mäekõrguselt tavaliste süsteemide vajadused.
Näide
70304dbc-08c2-4f34-993e-d80b951cc7a9

Teie ID-d genereeritakse kohapeal tugeva brauseri juhuslikkuse abil. BroBroGo serverisse midagi ei saadeta.

KKK

Millal peaksin kasutama UUID v4?

Kasutage UUID v4, kui vajate läbipaistmatuid juhuslikke identifikaatoreid, mida ei sordita loomisaja järgi ja mis ei paljasta ajateavet.

Kas ma saan eemaldada sidekriipsud või muuta väljundi suurtähtedeks?

Jah. UUID v4 tööriistal on valikute paneel, kus saate lülitada sisse või välja sidekriipse ja suurtähti.

UUID v4 genereerija – 122 biti puhast juhuslikkust

Leht genereerib ühe või mitu UUID v4 identifikaatorit – juhuslikku 36 märgi pikkust sõnet standardses 8‑4‑4‑4‑12 kuueteistkümnendsüsteemi formaadis. Erinevalt teistest ID‑generaatoritest kasutab UUID v4 122 biti puhast juhuslikkust (ülejäänud 6 bitti on fikseeritud versiooni- ja variandibitid). See tähendab, et UUID v4 väärtused sorteeruvad suvalises järjekorras – nad ei kanna mingit aja- ega järjestusteavet. Andmebaasis primaarvõtmena kasutades killustavad nad B‑puu indekseid (erinevalt ajapõhistest vormingutest nagu UUID v7 või ULID). Kokkupõrke tõenäosus on tühine kõigis praktilistes rakendustes. Kasutaja saab kontrollida identifikaatorite arvu (1–100), suurtähtede kasutamist (A–F) ja sidekriipsude olemasolu. Kõik ID‑d genereeritakse brauseris koheselt; üksikule ID‑le klõpsates kopeeritakse see, nupuga saab kopeerida kõik korraga.

Lehel kuvatakse olekuteateid: “Ready.” (enne genereerimist), “Generated.” (pärast genereerimist) ja “Copied all!” (pärast kõigi kopeerimist). Iga valiku muutmine (formaat, arv, suurtähed, sidekriipsud) käivitab kohese uue genereerimise.

UUID v4 struktuur ja standard

UUID (Universally Unique Identifier) on 128-bitine väärtus, mida kirjeldab standard RFC 4122. UUID v4 versioonis on 122 bitti eraldatud täiesti juhuslikuks andmeks, ülejäänud 6 bitti on fikseeritud:

  • 4 bitti versiooni jaoks (binaarselt 0100, mis vastab kümnendikule 4)
  • 2 bitti variandi jaoks (binaarselt 10, mis näitab RFC 4122 varianti)

Seega on UUID v4 kanooniline esitus: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx (kus x on juhuslik kuueteistkümnendsüsteemi number ja y on üks neljast väärtusest: 8, 9, a või b). Kõik 8‑4‑4‑4‑12 plokki on standardsed: 8 märki, 4 märki, 4 märki, 4 märki ja 12 märki, kokku 36 märki. Ilma sidekriipsudeta on string 32 kuueteistkümnendsüsteemi märki pikk.

Kuueteistkümnendsüsteemi märgid võivad olla nii väike- kui suurtähed (a–f / A–F). Lehel on lüliti Uppercase, mis muudab kõik tähed suureks (A–F). See mõjutab ainult tähti – numbrid jäävad samaks. Lüliti Include hyphens eemaldab sidekriipsud, kui see on välja lülitatud, andes 32-märgilise stringi. Selline kohandus on oluline rakendustes, kus standardformaati pole vaja (nt URL‑id, failinimed) või kus suurtähtede kasutamine on kohustuslik (nt mõned andmebaasisüsteemid eelistavad suurtähti).

Juhuslikkus ja kokkupõrke tõenäosus

122 bitti juhuslikkust annab tohutu hulga võimalikke unikaalseid väärtusi – täpsemalt 2^122 ≈ 5,3 × 10^36. Kokkupõrke tõenäosus (samasuguse UUID loomine) on arvutatav sünnipäeva paradoksi abil. Kui genereerida n UUID‑t, on tõenäosus, et vähemalt kaks on identsed, ligikaudu:

P(n) ≈ n² / (2 · 2¹²²)

Näiteks 1 miljardi UUID puhul (n = 10^9):

P ≈ 10¹⁸ / (2 · 5,3 × 10³⁶) ≈ 9,4 × 10⁻¹⁹

See on enam kui miljon korda väiksem kui tõenäosus, et välk tabab maas olevat inimest ühe aasta jooksul. Isegi 2^61 (umbes 2,3 × 10^18) UUID korral tõuseb tõenäosus 50 %‑ni – see on aga praktilises elus saavutatav vaid siis, kui genereerida sekundis miljardeid ID‑sid mitmeid aastaid.

Selline juhuslikkus tagab, et UUID v4 sobib suurepäraselt hajutatud süsteemides, kus keskne koordineerimine pole võimalik. Näiteks API‑võtmed, seansitunnused või sündmuste ID‑d – ründajal on praktiliselt võimatu ära arvata järgmist loodavat identifikaatorit, sest puudub aja- või järjestusalus.

Mõju andmebaasi indekseerimisele

UUID v4 kasutamine primaarvõtmena relatsioonilises andmebaasis toob kaasa olulise jõudlusprobleemi. Kuna väärtused on juhuslikud ja ilma igasuguse ajalise või numbrilise järjestuseta, sisestatakse uued read B‑puu indeksisse suvalistesse kohtadesse. See põhjustab:

  • Lehekillustumist – paljud lehed jäävad poolikuks, sest uued võtmed ei paigutu järjestikku.
  • Indeksi suuruse kasvu – killustunud indeks nõuab rohkem mälu ja ketta ruumi.
  • Sisestuskiiruse langust – iga uus väärtus võib põhjustada mitu lehe jagamist, eriti kui tabel on suur.

Võrreldes UUID v7‑ga, mis sisaldab ajatemplit (38 bitti aeg, 74 bitti juhuslikkust), on UUID v4 indeksikäitumine halvem. V7 väärtused kasvavad ajas, mis võimaldab sisestada lehe lõppu ja hoiab indeksi tihedamana. Samuti töötab ULID (26 märgi pikkune, ajapõhine) sarnaselt.

Siiski on UUID v4 endiselt eelistatud olukordades, kus:

  • Aja lekkimine on ohtlik – näiteks turva‑ ja privaatsustundlikes rakendustes ei tohiks ID‑d avaldada kirje loomise aega.
  • Hajutatud süsteemid – mitmed sõltumatud süsteemid peavad genereerima unikaalseid ID‑sid ilma keskse servita; UUID v4 garanteerib unikaalsuse ilma sünkroniseerimata.
  • Andmebaasidevaheline ID‑de ühendamine – kui andmed liidetakse erinevatest allikatest, pole vaja konflikte lahendada.

Praktikas võib UUID v4 indeksiprobleemi leevendada mitmete meetmetega: kasutada klastritud indeksi asemel mitte-klastritud indeksit, optimeerida lehe suurust või kasutada UUID v4 asendamist UUID v7‑ga (mõned andmebaasid, nagu PostgreSQL, toetavad seda laienduse kaudu).

Kohandamise võimalused ja kasutusjuhud

Leht pakub kolme peamist kohandust: identifikaatorite arv (1–100), suurtähtede kasutamine ja sidekriipsude olemasolu. Iga valik mõjutab tulemust koheselt.

  • Arv – vahemik 1–100 võimaldab genereerida nii üksiku unikaalse ID kui ka hulga, mida on mugav kopeerida ühe klõpsuga. See on kasulik testandmete täitmisel või mitme võtme loomisel ühe operatsiooni jaoks.
  • Suurtähed (Uppercase) – kui lüliti on sees, muudetakse kõik tähed A–F suureks. Paljud süsteemid (nt AWS‑i ressursinimed, Windowsi registrivõtmed) eelistavad suurtähti, kuna need on visuaalselt selgemad ja väldivad segadust numbritega (nt 0 ja O, 1 ja l). Samas standardne RFC 4122 kasutab väiketähti, seega võib suurtähtede kasutamine tekitada ühilduvusprobleeme, kui teine süsteem eeldab väiketähti.
  • Sidekriipsud (Include hyphens) – standardses esituses on sidekriipsud kohustuslikud (RFC 4122). Nende eemaldamine annab 32‑märgilise stringi, mida on lihtsam kasutada URL‑ides, API päringutes või failinimedes, kus sidekriipsud võivad segadusse ajada (nt URL‑i tee eraldaja). Näiteks 550e8400-e29b-41d4-a716-446655440000 muutub 550e8400e29b41d4a716446655440000. See on endiselt unikaalne, kuid mitte enam RFC‑ühilduv.

Tabel: Mõjude kokkuvõte

Valik Mõju Kasutusnäide
Arv 1–100 Mitu ID‑d korraga Andmebaasi testandmete genereerimine
Suurtähed A–F vs a–f API võtmed, kus suurtähed on nõutud
Sidekriipsud 36 vs 32 märki URL‑id, failinimed, andmebaasi võtmed

Brauseripõhine genereerimine ja privaatsus

Kogu UUID v4 genereerimine toimub kasutaja brauseris kohalikult, kasutades crypto.randomUUID() või sarnast veebi API‑d (nt window.crypto.getRandomValues). Serverisse ei saadeta midagi – ei valikuid ega loodud identifikaatoreid. Sellel on kaks olulist eelist:

  1. Privaatsus – tundlikke identifikaatoreid (nt API võtmed, seansitunnused) ei pea usaldama serverile; need jäävad kasutaja kätte.
  2. Madal latentsus – genereerimine toimub millisekunditega, sõltumata võrguühendusest. Kasutaja ei pea ootama serveri vastust.

Brauseri crypto API tagab tugeva juhuslikkuse allika (platvormi krüptograafiline generaator), mis on palju turvalisem kui Math.random(). See on eriti oluline turva‑ ja krüptorakendustes, kus nõrk juhuslikkus võib põhjustada äraarvatavaid identifikaatoreid.

Leht kasutab alati crypto API‑d, tagades 122 bitti juhuslikkust vastavalt RFC 4122 nõuetele. Kui brauser ei toeta crypto.randomUUID() (vanad brauserid), siis tehakse getRandomValues() ja konstrueeritakse UUID käsitsi.

Korduma kippuvad küsimused

1. Kas UUID v4 on turvaline salasõnade või võtmete jaoks?

UUID v4 pakub 122 bitti juhuslikkust, mis on piisav enamiku mitte‑krüptograafiliste rakenduste jaoks (nt seansi‑ID, API võti). Kuid krüptograafiliseks turvalisuseks (nt autentimisvõtmed, tokenid) soovitatakse siiski eraldi juhuslike baitide generaatorit, mis annab 256+ bitti. UUID v4 on piiriks, kuid mitte ideaalne.

2. Millal peaksin kasutama sidekriipsudeta UUID‑d?

Alati, kui standardformaat pole vajalik ja soovitakse kompaktset stringi (nt andmebaasi primaarvõti, URL‑i parameeter). Sidekriipsudeta versioon on ka veidi lühem – 32 vs 36 märki – ja vähem vigadele kalduv (nt kopeerimisel ununeb sidekriips).

3. Kas võin genereerida rohkem kui 100 UUID‑d korraga?

Leht toetab vahemikku 1–100. Rohkem kui 100 vajadusel tuleb genereerida mitme korraga. See piirang on tehtud liidese selguse ja brauseri jõudluse huvides. Praktikas on 100 ID‑d enamiku ülesannete jaoks piisav.

4. Kas UUID v4 töötab kõigis andmebaasides?

Jah, kuna andmebaasid aktsepteerivad standardseid 36‑märgilisi stringe või 128‑bitist binaarset esitust. Mõned andmebaasid (nt MySQL) pakuvad spetsiaalset BINARY(16) tüüpi, mis salvestab UUID tõhusamalt. Siiski tuleb arvestada indekseerimise probleemiga – eriti MySQL ühe puudega indeksites.

5. Miks kasutatakse UUID v4 asemel v7‑d uutes süsteemides?

UUID v7 sisaldab ajatemplit, mis võimaldab ajalist sorteerimist ja vähendab indeksikillustust. V7 on soovitatav uutes rakendustes, kus aja lekkimine pole probleem. UUID v4 jääb aga eelistatuks, kui on vaja juhuslikkust ja aja varjamist.

6. Kas suurtähtede kasutamine mõjutab unikaalsust või standardit?

Ei. Nii a kui A esindavad sama kuueteistkümnendsüsteemi väärtust (10). Standard RFC 4122 soovitab väiketähti, kuid paljud süsteemid aktsepteerivad mõlemaid. Suurtähtede kasutamine võib tekitada kokkusobivusprobleeme ainult siis, kui teine süsteem nõuab rangelt väiketähti (nt UNIX‑i süsteemides failinimed).