Kas yra šis įrankis?
UUID (visuotinai unikalus identifikatorius) yra 128 bitų identifikatorius, užrašomas 36 simboliais, pvz., 550e8400-e29b-41d4-a716-446655440000. 4 versijos UUID generuojami iš atsitiktinių duomenų, todėl susidūrimai (dublikatai) tampa tokie mažai tikėtini, kad praktikoje jų galima nepaisyti: galėtumėte generuoti milijardą UUID per sekundę dešimtmečius, kol dublikatas taptų tikėtinas.
UUID naudojami kaip duomenų bazių pirminiai raktai, užklausų ID sekimui, failų vardai, API raktai ir bet kur, kur reikia identifikatoriaus be koordinavimo su centrine institucija.
UUID standartizuoti RFC 4122, peržiūrėti 2024 m. kaip RFC 9562 — peržiūra paliko v4 nepakeistą ir pridėjo UUIDv7, laiko žyma surikiuotą variantą, sukurtą geriau indeksuotis kaip duomenų bazės raktui.
Kodėl jį naudoti?
- Kriptografiškai saugu: naudoja crypto.randomUUID(), o ne silpną Math.random().
- Generavimas dideliais kiekiais — iki 500 UUID vienu metu, po vieną eilutėje, paruošta kopijuoti.
- Didžiųjų raidžių ir be brūkšnelių pasirinktys sistemoms su specifiniais formato reikalavimais.
- Veikia neprisijungus, jūsų naršyklėje; UUID niekada niekur nesiunčiami.
- Nemokama ir akimirksniu, be prisijungimo.
Kaip naudoti
- Pasirinkite, kiek UUID jums reikia (1–500).
- Pasirinktinai pažymėkite „Didžiosios raidės“ arba „Pašalinti brūkšnelius“.
- Spustelėkite „Generuoti UUID“.
- Spustelėkite „Kopijuoti viską“, kad nukopijuotumėte visą sąrašą.
Pavyzdys
Įvestis
Kiekis: 3Išvestis
f47ac10b-58cc-4372-a567-0e02b2c3d479
9c858901-8a57-4791-81fe-4c455b099bc9
16fd2706-8baf-433b-82eb-8c7fada847daKiekvienas UUID generuojamas nepriklausomai iš saugių atsitiktinių duomenų.
Dažniausi naudojimo atvejai
- Duomenų bazių pirminiai raktai: UUID leidžia sugeneruoti galiojantį ID prieš įterpimą, naudinga programoms, veikiančioms be interneto, arba kai klientui reikia nurodyti įrašą prieš serveriui jį patvirtinant.
- Paskirstytos sistemos: keli serveriai gali generuoti ID nepriklausomai, be jokio koordinavimo ir be susidūrimo rizikos — kitaip nei automatiškai didinami sveikieji skaičiai, kuriems reikia vieno tiesos šaltinio.
- Idempotencijos raktai: siunčiant tą patį UUID su pakartotinai bandoma API užklausa, serveris gali atpažinti ir saugiai ignoruoti dublikuotą pateikimą.
- Testų fikstūros ir pradiniai duomenys: sugeneruokite šimtus unikalių ID vienu metu testinei duomenų bazei užpildyti ar imituotiems API atsakymams.
- React/Vue sąrašo raktai: kai sąrašo elementai dar neturi natūralaus unikalaus ID, sugeneruotas UUID veikia kaip stabilus raktas kūrimo metu.
Apribojimai, kuriuos verta žinoti
UUID negalima rikiuoti pagal sukūrimo laiką — v4 atsitiktinumas reiškia, kad nauji ID neišsidėsto vienas šalia kito duomenų bazės indekse, o tai gali pabloginti įterpimo našumą dideliu mastu (todėl kaip alternatyva ir egzistuoja UUID v7, surikiuotas pagal laiko žymą). Jei reikia ir laiko rikiavimo, ir unikalumo, v7 ar Snowflake tipo ID tinka geriau nei v4.
Vien UUID nėra saugumo įgaliojimas. Jį nesuspėjama nuspėti ta prasme, kad iš vieno negalima prognozuoti kito, tačiau jis niekada nebuvo sukurtas su audituojamumo, galiojimo pabaigos ar atšaukimo funkcijomis, kurių reikia tikram autentifikavimo žetonui — tam naudokite specializuotą sesijos/API žetonų biblioteką.
Kaip iš tikrųjų veikia atsitiktinumas
v4 UUID turi 122 iš tiesų atsitiktinius bitus (kiti 6 bitai fiksuoti, kad žymėtų versiją ir variantą, pagal RFC 4122 specifikaciją). Šis įrankis gauna tą atsitiktinumą iš crypto.getRandomValues() per naršyklės Web Crypto API — tas pats pagrindinis šaltinis, naudojamas TLS raktams ir kitoms kriptografinėms operacijoms, o ne gerokai silpnesnis Math.random(), kuris pakankamai nuspėjamas, kad kai kurios senesnės UUID bibliotekos, sukurtos jo pagrindu, buvo kritikuojamos dėl nuspėjamų ID generavimo.
Norint susidūrimo tikimybę pateikti konkrečiai: turint 122 atsitiktinius bitus, reikėtų sugeneruoti apie 2,71 kvintiliono UUID, kol atsirastų 50 % tikimybė bent vienam susidūrimui — tai keliomis eilėmis daugiau, nei bet kada sugeneruos bet kuri viena programa. Būtent todėl UUID v4 praktikoje laikomas iš esmės be susidūrimų, nors tai matematiškai ir nėra neįmanoma.
Dažniausiai užduodami klausimai
Ar du sugeneruoti UUID gali sutapti?
Teoriškai taip, praktiškai ne. v4 UUID turi 122 atsitiktinius bitus. Susidūrimo tikimybė lieka nereikšminga net sugeneravus trilijonus jų — juos galima saugiai laikyti unikaliais.
Kuo skiriasi UUID versijos?
v1 pagrįstas laiko žyma + MAC adresu (atskleidžia informaciją), v4 yra visiškai atsitiktinis (dažniausias pasirinkimas), v5 kildinamas iš pavadinimo maišant (determinuotas), o v7 yra laiku surikiuotas atsitiktinumas (gerai tinka duomenų bazių indeksams). Šis įrankis generuoja v4.
Ar šie UUID pakankamai saugūs žetonams?
Jie naudoja kriptografiškai saugų atsitiktinumo šaltinį, kas gerokai geriau nei Math.random(). Sesijos žetonams vis tiek geriau naudoti specializuotus žetonų generatorius su daugiau entropijos, tačiau v4 UUID puikiai tinka identifikatoriams.
Ar UUID tas pats, kas GUID?
Taip. GUID (visuotinai unikalus identifikatorius, angl. Globally Unique Identifier) yra Microsoft pavadinimas tam pačiam 128 bitų formatui. Terminai yra pakeičiami vienas kitu.
Ar sugeneruoti UUID saugomi ar registruojami?
Ne. Generavimas vyksta vietoje, jūsų naršyklėje. Niekas nesiunčiama, nesaugoma ir neregistruojama — kiekvienas matomas UUID egzistuoja tik jūsų ekrane.