UUID generátor

Generujte UUID vo vašom prehliadači: úplne náhodné v4, časovo zoradené v7 pre databázové kľúče alebo deterministické v5. Až 1000 naraz, a nič neopustí vaše zariadenie.

Stlačte Generovať pre žrebovanie
Verzia
Rozšírené možnosti

Potrebujete identifikátor, ktorý nebude v kolízii s iným, ktorý vytvoril niekto iný, na stroji, o ktorom ste nikdy nepočuli, bez toho, aby ste od niekoho žiadali povolenie? To je presne úloha, ktorú UUID plní. Je to 128-bitové číslo, zapísané ako 36 znakov v známom vzore 8-4-4-4-12, a jeho celý dizajn spočíva v tom, že žiadne dve z nich nikdy nebudú rovnaké, aj keď nič nekoordinuje, kto dostane ktoré. Tento bezplatný generátor ich vytvára vo vašom prehliadači: vyberte verziu v poli „Verzia“, zadajte, koľko ich potrebujete v poli „Počet“, a stlačte „Generovať“. Stránka sa otvorí s jediným v4, verziou, ktorú chce väčšina projektov, takže prvý identifikátor je vzdialený len jedno kliknutie.

Každý identifikátor zostavuje váš prehliadač prostredníctvom Web Crypto API. Verzia 4 používa crypto.randomUUID() tam, kde to prehliadač poskytuje, a inak crypto.getRandomValues() — kryptograficky silný zdroj náhodnosti, a nie pseudonáhodnú funkciu JavaScriptu, akou je Math.random(). Verzia 7 vkladá na začiatok 48-bitovú časovú pečiatku v milisekundách, potom 12-bitové počítadlo, ktoré sa zvyšuje v rámci tej istej milisekundy, a nakoniec 62 náhodných bitov, čo je metóda usporiadania opísaná v RFC 9562; práve kvôli tomuto počítadlu vyjde dávka tisícich kľúčov pekne poporadí, a nie pomiešaná. Verzia 1 kombinuje časovú pečiatku s náhodným identifikátorom uzla, ktorý má nastavený multicastový bit, takže nikdy nenesie adresu vašej sieťovej karty tak, ako to robili pôvodné implementácie z 90. rokov. Verzie 3 a 5 nie sú vôbec náhodné: hashujú menný priestor spolu s názvom, pomocou MD5 a SHA-1, a toto hashovanie prebieha tiež priamo na vašom zariadení. Nič sa neposiela na server, nič sa neloguje, a akonáhle sa stránka načíta, funguje aj bez pripojenia.

„Verzia“ je pole, ktoré rozhoduje o všetkom ostatnom. Verzia 4 predstavuje 122 náhodných bitov a žiadnu štruktúru — predvolená voľba a správna odpoveď vtedy, keď identifikátor musí byť jednoducho len unikátny. Verzia 7 si zachováva 62 náhodných bitov, ale začína časom, kedy bola vytvorená, takže ich množina sa zoraďuje v poradí, v akom boli vytvorené; vďaka tomu je to verzia, po ktorej treba siahnuť, keď sa identifikátor stane kľúčom v databáze. Verzia 1 je pôvodná schéma založená na čase, ponechaná tu pre systémy, ktoré si ju stále vyžadujú. Verzie 3 a 5 tvoria zvláštnu dvojicu: sú deterministické, čo znamená, že rovnaké vstupy vždy vyprodukujú rovnaký identifikátor, a vyžadujú dve ďalšie polia — „Menný priestor“, ktorým je jeden zo štandardných priestorov DNS, URL, OID a X.500 alebo vami vytvorený „Vlastný menný priestor (UUID)“, a „Názov“, čo je samotný identifikovaný reťazec. Poskytnite pre v5 menný priestor URL a https://example.com/a a dostanete úplne rovnaké UUID dnes, zajtra aj na stroji niekoho iného. Z tohto dôvodu „Počet“ zmizne, keď je zvolená v3 alebo v5: tisíc kópií deterministickej hodnoty by bolo jednoducho len tisíc kópií tej istej hodnoty. Pre každú inú verziu má „Počet“ rozsah od 1 do 1000.

Štyri prepínače menia tvar výstupu bez toho, aby zmenili podkladových 128 bitov. „Veľké písmená“ vytlačia hexadecimálne číslice ako verzálky, „Bez spojovníkov“ poskytne kompaktný 32-znakový formát, ktorý uprednostňujú niektoré stĺpce a názvy súborov, a „Zložené zátvorky“ obalia hodnotu do { } — tvar, ktorý Windows a svet .NET nazývajú GUID. Pod „Rozšírené možnosti“ pridáva urn:uuid: prefix, ktorý z neho robí formálny URN; ten vypne „Zložené zátvorky“ a „Bez spojovníkov“ po celú dobu, čo je zapnutý, pretože štandard dovoľuje presne jeden formát URN, a to je ten kanonický so spojovníkmi. „Formát kopírovania“ rozhoduje o tom, ako je dávka spojená, keď si ju prevezmete: po jednom na riadok, oddelené čiarkami, alebo každá hodnota v úvodzovkách s čiarkou na konci, čo sa dá vložiť priamo do poľa v kóde. Pod výsledkom sa nachádza riadok, ktorý udáva náhodnosť v bitoch — 122 pre v4, 62 pre v7 — a, pre v7, časovú pečiatku zakódovanú v prvom identifikátore z dávky, takže čas vo vnútri hodnoty je viditeľný namiesto toho, aby sa len predpokladal. „Kopírovať všetko“ aj „Uložiť do súboru“ rešpektujú zvolený formát kopírovania. „História“ uchováva vašich posledných 10 dávok vo vašom vlastnom prehliadači: kliknutím na niektorú si ju môžete vrátiť späť, kopírovať alebo vymazať jeden záznam, alebo vyčistiť všetko. „Vymazať“ vyprázdni výsledok, ale vaše nastavenia ponechá nezmenené, a po 50 identifikátoroch sa zoznam zmení na jeden posúvateľný blok namiesto päťdesiatich riadkov.

Vec, ktorá má na tejto stránke najväčší dopad, je rozdiel medzi v4 a v7 ako primárnym kľúčom, a nie je to vec vkusu. Databázové indexy sú stromy, ktoré sa udržiavajú zoradené, a miesto, kam v tomto poradí pristane nový kľúč, rozhoduje o tom, koľko úsilia bude vloženie stáť. Kľúč v4 je náhodný, takže po sebe nasledujúce vloženia pristanú v nesúvisiacich rohoch indexu: stránky, ktoré boli plné, sa rozdelia, časti stromu, ktoré databáza drží v pamäti, sú zriedkakedy tými časťami, ktoré bude potrebovať ďalšie vloženie, a index skončí väčší a fragmentovanejší, než by to odôvodňovali riadky, na ktoré ukazuje. Kľúč v7 sa začína aktuálnou milisekundou, takže po sebe nasledujúce vloženia pristanú vedľa seba na pravom okraji stromu, čo je vzor, ktorý produkuje inkrementujúce sa celé číslo, a vzor, pre ktorý boli indexové štruktúry vytvorené. To je celý ten kompromis: v7 vám kupuje správanie sa vkladania ako pri sekvenčnom kľúči a zároveň zachováva vlastnosť, pre ktorú ste si UUID vybrali na prvom mieste, čiže to, že si ho môže ktokoľvek vyraziť bez toho, aby žiadal server. Stojí to len to, že čas vytvorenia je teraz čitateľný vo vnútri identifikátora, a či na tom záleží, je otázka vašich dát, nie formátu.

Nič nikdy nekontroluje UUID z hľadiska jedinečnosti; jeho veľkosť je zárukou. Neexistuje tu žiaden register, žiadna cesta na server a späť, žiadne vyhľadávanie — generátor vyprodukuje číslo a odovzdá ho, a dôvodom, prečo nebudú dve z nich v kolízii, je jednoducho ten, že existuje 2^122 možných hodnôt pre v4, zhruba 5,3 sextiliónu. Narodeninový problém (birthday problem) je úprimný spôsob, ako to odhadnúť: potrebovali by ste zhruba 2,7 trilióna identifikátorov, kým by bola vyrovnaná šanca na to, že sa akékoľvek dva z nich budú zhodovať, čo predstavuje miliardu nových UUID každú sekundu počas 86 rokov. Oplatí sa byť presný v tom, čo toto sľubuje a čo nie. Je to štatistická záruka, nie aritmetická, a platí iba vtedy, kým je podkladová náhodnosť skutočná — generátor so zlou seed hodnotou, alebo virtuálny stroj klonovaný spolu so svojou zásobárňou entropie (entropy pool), to naruší spôsobom, ktorý formát nedokáže zistiť. Verzia 7 zužuje túto otázku ešte viac: v rámci jednej milisekundy sa jeden generátor vôbec nemôže zopakovať, pretože počítadlo sa zvyšuje namiesto toho, aby hádzalo kockou, a naprieč nezávislými generátormi prácu odvedie tých 62 náhodných bitov.

UUID je identifikátor, nie heslo. Verzia 4 je nepredvídateľná, a to ľudí zvádza k tomu, aby k nej pristupovali ako k tajomstvu — ako k odkazu na obnovenie hesla, neuhádnuteľnej URL, tokenu sedenia, API kľúču. Nepredvídateľnosť je skutočná, no utajenie je vlastnosťou toho, ako sa s hodnotou zaobchádza, a identifikátory sú podľa návrhu spravované neopatrne: nachádzajú sa v URL adresách, ktoré pristanú v histórii prehliadača, serverových logoch, hlavičkách referrer a analytike, a dajú sa vložiť do chatovacích správ. Ostatné verzie sú ešte horšími kandidátmi. Verzia 1 a verzia 7 obe kódujú moment vytvorenia, takže ktokoľvek má aspoň jednu, vie približne, kedy bola vytvorená, a môže zúžiť okolie všetkého, čo bolo vytvorené spolu s ňou. Verzie 3 a 5 sú zámerne deterministické: UUID v5 e-mailovej adresy nie je zahašované tajomstvo, ale hodnota, ktorú si za sekundu dokáže vypočítať ktokoľvek s touto rovnakou adresou. Na pomenovanie vecí použite UUID. Ak musí hodnota zostať neznáma, použite generátor hesiel alebo token z knižnice vytvorenej na tajomstvá.

Prečo si vybrať tento generátor UUID?

UUID sa objavujú všade, kde niečo treba pomenovať skôr, ako niekto vôbec môže potvrdiť, že daný názov je voľný. Kód aplikácie ich vytvára pre riadky, ktoré sa chystá vložiť, takže objekt má identitu ešte predtým, než vôbec dorazí do databázy, a klient sa naň môže odvolávať, zatiaľ čo zápis ešte len prebieha. Distribuované systémy sa na ne spoliehajú ešte viac: niekoľko služieb, ktoré zapisujú do jednej tabuľky, offline mobilný klient, ktorý vytvára záznamy v lietadle, fronta, ktorá musí rozpoznať správu, ktorú už spracovala — ani jedno z nich nemôže čakať na to, kým naň príde rad pri nejakom zdieľanom počítadle. Verzia 5 pokrýva inú potrebu, ktorou je stabilný identifikátor odvodený z niečoho, čo už máte: ten istý dokument, tá istá URL alebo ten istý účet sa vždy mapujú na to isté UUID, vďaka čomu môže bežať import dvakrát bez toho, aby sa niečo duplikovalo. Inde sú zas jednoducho formátom, ktorý si nejaký systém vyžaduje — korelačný identifikátor previazaný cez logy a stopy, názov súboru, ktorý nekoliduje, keď uploady od tisícich používateľov pristanú v jednom buckete, kľúč v registroch Windows, testovacie dáta (test fixture), ktoré musia vyzerať ako tie skutočné.

Oplatí sa poznať aj pár úprimných obmedzení. Jedna dávka je jedna verzia: hodnota v poli „Verzia“ sa vzťahuje na všetko v nej, takže dávka v4 a dávka v7 sú dve dávky. Toto je generátor, nie inšpektor — vložiť UUID na zistenie jeho verzie alebo časovej pečiatky nie je to, čo by táto stránka robila. „Uložiť do súboru“ zapisuje čistý textový súbor a nie CSV či JSON. Verzia 7 otvorene odhaľuje, kedy bola vytvorená, na presnosť milisekundy, čo je skôr reálnym kompromisom než nejakou chybou, a rovnako tak čas prepúšťa aj verzia 1; ak to pre vaše dáta predstavuje problém, verzia 4 je verzia, ktorá nikomu nič neprezradí. Dve špeciálne hodnoty zo štandardu nie sú verziami a tak nie sú ani voľbami vo „Verzia“, no môžete si ich odtiaľto skopírovať: the nil UUID, 00000000-0000-0000-0000-000000000000 a the max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Všetko na tejto stránke nasleduje štandard RFC 9562, špecifikáciu, ktorá v roku 2024 nahradila RFC 4122, takže jej výstup je prijímaný akoukoľvek knižnicou, databázou či API, ktoré vôbec s UUID nejako narába. V rámci týchto obmedzení je záruka naozaj silná: každý jeden identifikátor je zostrojený na základe tohto štandardu, z kryptograficky bezpečnej náhodnosti, na vašom vlastnom stroji, a nikto iný ho nikdy neuvidí.

FAQ

Ako vygenerujem UUID?

Vyberte si verziu v poli „Verzia“, v poli „Počet“ zadajte, koľko ich potrebujete, a stlačte „Generovať“. Stránka sa štandardne otvorí na jednom identifikátore verzie 4, čo požaduje väčšina projektov, takže jedno bežné UUID je vzdialené na kliknutie. Ku každej hodnote sa zobrazuje vlastné tlačidlo na kopírovanie a funkcia „Kopírovať všetko“ načíta celú dávku naraz.

Aký je rozdiel medzi UUID v4 a v7?

Verzia 4 obsahuje 122 náhodných bitov bez akejkoľvek štruktúry, takže žiadne dve na seba nijako nenadväzujú. Verzia 7 vynakladá prvých 48 bitov na milisekundu, v ktorej bola vytvorená, a pridáva k tomu počítadlo spolu so 62 náhodnými bitmi, vďaka čomu sa dá zoraďovať: celá dávka vystúpi v takom poradí, v akom bola vytvorená. Použite v4, keď musí byť identifikátor iba jedinečný, a v7 vtedy, keď to bude navyše databázový kľúč.

Ktorú verziu UUID by som mal použiť?

Verziu 4, ak nemáte nejaký dôvod zvoliť si inú. Zvoľte si verziu 7, ak sa identifikátor stane primárnym kľúčom a na rýchlosti vkladania naozaj záleží, verziu 5 vtedy, ak vyžadujete od rovnakého vstupu vyprodukovanie vždy rovnakého identifikátora, a verziu 1 výlučne vtedy, ak o to špecificky požiada nejaký systém, s ktorým sa musíte dorozumieť. Verzia 3 predstavuje v5, avšak s MD5 namiesto SHA-1, a figuruje tu kvôli zachovaniu kompatibility.

Sú generované UUID naozaj náhodné a bezpečné?

Náhodnosť je tu zaručená v kryptografickom meradle: plynie z rozhrania vášho prehliadača s názvom Web Crypto API, prostredníctvom crypto.randomUUID() či crypto.getRandomValues(), nie však z Math.random(). Pojem „bezpečné“ vo význame neuhádnuteľné rieši úplne iný problém, než bezpečné v ponímaní tajomstva — UUID je identifikátor, a nemal by sa používať ako heslo, token k sedeniu alebo ako API kľúč.

Je možné vygenerovať veľa UUID súčasne?

Áno, naraz až 1000. Určte hodnotu „Počet“ a kliknite na „Generovať“; po presiahnutí 50 hodnôt sa výsledok sformuje do podoby jediného posuvného bloku namiesto dlhého zoznamu riadkov. Funkcie „Kopírovať všetko“ a „Uložiť do súboru“ si prevezmú kompletnú dávku spojenú tak, ako určuje „Formát kopírovania“ — po jednom na riadok, predelené čiarkami, alebo v úvodzovkách na priame vlepenie do poľa.

Prečo mi v3 a v5 zakaždým poskytujú to isté UUID?

Pretože sú na to stvorené. Verzie 3 a 5 majú deterministickú funkciu: obstarávajú hashovanie menného priestoru a názvu, ktorý im poskytnete, vďaka čomu identické vstupy zakaždým vyprodukujú identický identifikátor, na akomkoľvek stroji a v akomkoľvek jazyku. Vďaka tomu sú užitočné na odvodenie stabilného identifikátora z niečoho, čo už máte, a to je tiež dôvod, prečo je „Počet“ skrytý, keď ich zvolíte.

Na čo slúžia Menný priestor a Názov, a ktorý menný priestor by som si mal vybrať?

Ide o dva vstupy, z ktorých sa vypočítava UUID verzie 3 alebo verzie 5. „Menný priestor“ vysvetľuje, o aký druh veci v názve ide — DNS pre názvy hostiteľov, URL pre adresy, OID a X.500 pre tie adresárové schémy, alebo „Vlastný“ („Vlastný menný priestor (UUID)“), ak chcete poskytnúť svoje vlastné UUID menného priestoru, čo je zvyčajná voľba v rámci aplikácie. „Názov“ je samotný reťazec. Rôzne menné priestory dávajú pre ten istý názov úplne iné výsledky, čo je aj pointou toho, prečo ich tu máme.

Prečo je UUID v7 lepší než v4 ako primárny kľúč v databáze?

Kvôli tomu, kde hodnoty pristanú v indexe. Index sa udržiava v zoradenom poradí a náhodný kľúč v4 v ňom pristane kdekoľvek, takže vloženia rozdeľujú stránky po celom strome a časti držané v pamäti sú len zriedka tie, ktoré sú potrebné ako ďalšie. Kľúč v7 začína aktuálnou milisekundou, takže po sebe nasledujúce vloženia pristanú spolu na konci indexu, čo je spôsob, akým sa správa sekvenčný celočíselný kľúč — a to pri zachovaní možnosti akejkoľvek služby vyraziť identifikátor bez toho, aby žiadala centrálne počítadlo.

Mohli by niekedy byť dve UUID rovnaké?

V princípe áno, v praxi nie, a oplatí sa vedieť prečo. Nič neoveruje jedinečnosť: existuje jednoducho 2^122 možných hodnôt verzie 4, čo je asi 5,3 sextiliónu, a potrebovali by ste približne 2,7 triliónu z nich — miliardu za sekundu počas 86 rokov — kým by bola vyrovnaná šanca na čo i len jednu kolíziu. Záruka je skôr štatistická než absolútna, a závisí od skutočnej náhodnosti, čo je aj dôvodom, prečo tento generátor využíva Web Crypto API namiesto bežnej pseudonáhodnej funkcie.

Môžem použiť UUID ako heslo, API kľúč alebo token sedenia?

Nie, a toto je chyba, ktorá stojí najviac. UUID verzie 4 je nepredvídateľné, ale s identifikátormi sa zaobchádza tak, akoby boli verejné: končia v URL adresách, histórii prehliadača, serverových logoch, hlavičkách referrer a analytike. Verzie 1 a 7 navyše odhaľujú, kedy boli vytvorené, a verzie 3 a 5 môže znovu prepočítať ktokoľvek, kto pozná ich vstupy. Pre čokoľvek, čo musí zostať tajné, použite generátor hesiel alebo token z knižnice učenej na tajomstvá.

Odhaľuje UUID v7 to, kedy bolo vytvorené?

Áno, na milisekundu presne, a je to takto navrhnuté úmyselne, nie je to nedopatrenie — časová pečiatka je práve to, čo robí v7 zoraďovateľným. Riadok pod výsledkom vám ukazuje čas, ktorý je zakódovaný v prvej hodnote dávky, takže vidíte presne, čo je odhalené. Aj verzia 1 nesie časovú pečiatku. Ak je čas vytvorenia niečo, čo radšej nechcete zverejniť, verzia 4 je verzia, ktorá neobsahuje žiadny čas.

Odhaľuje UUID v1 moju MAC adresu?

Tu nie. Pôvodná schéma používala adresu sieťovej karty počítača ako pole uzla (node), odkiaľ pochádza aj povesť v1, avšak štandard taktiež povoľuje náhodný identifikátor uzla označený multicastovým bitom, a to je to, čo tento generátor produkuje. Vaša hardvérová adresa sa nikdy nečíta a nikdy sa vo výstupe neobjaví.

Čo menia Veľké písmená, Bez spojovníkov, Zložené zátvorky a urn:uuid:?

Len samotnú prezentáciu — podkladových 128 bitov je v každom tvare rovnakých. „Veľké písmená“ vytlačia hexadecimálne číslice ako verzálky, „Bez spojovníkov“ poskytne kompaktnú 32-znakovú verziu, „Zložené zátvorky“ obalia hodnotu do { } (tak, ako Windows a .NET píšu GUID), a urn:uuid: pridáva prefix, ktorý z neho robí formálny URN. urn:uuid: zároveň vypne zvyšné dva počas toho, čo je zapnutý, pretože štandard definuje presne jednu formu URN, ktorou je tá kanonická so spojovníkmi.