Přeskočit na obsah

Generátor UUID zdarma - Vytvořte V1 & V4 UUID okamžitě

Generujte jedinečné identifikátory okamžitě pomocí našeho bezplatného generátoru UUID. Vytvořte verzi 1 (časově založenou) a verzi 4 (náhodnou) UUID pro databáze, API a distribuované systémy.

Generátor UUID

Verze UUID
Vygenerované UUID
Kalkulačka načítání...
📚

Dokumentace

Generátor UUID

Generátor UUID je nástroj, který vytváří univerzálně jedinečný identifikátor neboli UUID: 128bitový kód používaný k označení části dat tak, aby žádná jiná položka kdekoli pravděpodobně nesdílela stejný štítek. Tato stránka generuje UUID verze 1 (založená na čase) a verze 4 (náhodná).

Co je UUID?

UUID je 128bitové číslo zapsané jako 32 hexadecimálních číslic (znaky 0–9 a–f). Je rozděleno do pěti skupin oddělených spojovníky ve vzoru 8-4-4-4-12, celkem tedy na 36 znaků. Příklad UUID vypadá takto:

1550e8400-e29b-41d4-a716-446655440000
2

UUID jsou definována v RFC 9562, které vydala Internet Engineering Task Force v květnu 2024 a které nahradilo starší RFC 4122 z roku 2005. Oba dokumenty popisují stejný 128bitový formát. Software je používá k identifikaci řádků databází, souborů, uživatelských relací a dalších záznamů, aniž by centrální autorita musela přidělovat čísla. Protože prostor možných UUID je tak rozsáhlý, mohou dva počítače generovat UUID nezávisle a ve stejný okamžik, aniž by téměř kdy vytvořily stejné UUID.

Formát a struktura UUID

128 bitů UUID je rozděleno do pojmenovaných polí. Každé pole zabírá pevný počet bitů:

  • time_low – 32 bitů
  • time_mid – 16 bitů
  • time_hi_and_version – 16 bitů
  • clock_seq_hi_and_reserved – 8 bitů
  • clock_seq_low – 8 bitů
  • node – 48 bitů
Uspořádání polí UUID time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

Čtyři bity uvnitř time_hi_and_version obsahují číslo verze UUID a dva bity uvnitř clock_seq_hi_and_reserved obsahují variantu, která softwaru říká, jak číst zbývající pole. Je definováno osm verzí.

Názvy polí výše pocházejí z verze 1, v níž skutečně obsahují hodnotu času a uzlu. Ostatní verze zachovávají stejné uspořádání 8-4-4-4-12 a stejné hranice polí, ale většinu bitů vyplňují náhodnými daty. V UUID verze 4 je skupina označená time_low náhodná, nikoli časová.

Jak pomocí tohoto nástroje vygenerovat UUID

  1. Vyberte verzi: verzi 1 (založenou na čase) nebo verzi 4 (náhodnou).
  2. Přečtěte UUID z pole s výsledkem. Nové se zobrazí ihned po načtení stránky nebo po změně verze.
  3. Vyberte „Generate“ pro vytvoření dalšího UUID.
  4. Vyberte „Copy“ a zkopírujte výsledek do schránky, poté jej vložte do kódu, databáze nebo konfiguračního souboru.

Panel pod výsledkem rozděluje UUID do pěti polí a každé z nich pojmenovává, takže číslici verze a číslici varianty lze snadno najít.

Verze 4 se hodí pro většinu úloh včetně klíčů databází a tokenů relace, protože neobsahuje informaci o tom, kdy ani kde byla vytvořena. Verze 1 se hodí pro záznamy, u nichž musí být čas vytvoření zpětně zjistitelný přímo z identifikátoru, například pro položky protokolu.

UUID verze 1 vs. verze 4

Verze 1 kóduje aktuální časové razítko a náhodně zvolenou sekvenci hodin a náhodnou hodnotu uzlu. Standard dovoluje, aby hodnota uzlu byla skutečná síťová adresa (MAC) počítače, ale připouští také náhodně generovanou hodnotu uzlu jako alternativu chránící soukromí. Tento nástroj vždy používá náhodnou možnost: jeho UUID verze 1 nikdy nečtou skutečnou MAC adresu ani ji nezpřístupňují. Standard také vyžaduje, aby nejnižší bit prvního bajtu pole uzlu měl u náhodné hodnoty nastavenou hodnotu 1, a tento nástroj jej nastavuje. Skutečné síťové karty tento bit nikdy nastavený nemají, takže náhodný uzel nelze zaměnit za skutečný. Proto je druhá hexadecimální číslice páté skupiny v UUID verze 1 z této stránky vždy lichá: 1, 3, 5, 7, 9, b, d nebo f.

Časové razítko uvnitř UUID verze 1 lze zpětně přečíst, takže záznamy lze seřadit podle času vytvoření. Samotné třídění textu UUID to nezajistí, protože první skupina obsahuje nejnižších 32 bitů časového razítka, které se přetočí přibližně každých 7 minut. Verze 6, přidaná v RFC 9562, ukládá stejné časové razítko s nejvyššími bity na začátku, takže funguje běžné textové třídění.

Verze 4 se skládá z náhodných bitů, přičemž několik bitů je pevně nastaveno k označení verze a varianty. Neobsahuje časové razítko ani údaje specifické pro počítač, takže neprozrazuje nic o tom, kdy ani kde byla vytvořena. Podle času vytvoření ji nelze seřadit.

Standard definuje šest dalších verzí, které však tento nástroj negeneruje: verzi 2 (DCE Security, používanou zřídka); verze 3 a 5, vytvořené hašováním jmenného prostoru a názvu pomocí MD5 nebo SHA-1, takže stejný vstup vždy vytvoří stejné UUID; a verze 6, 7 a 8, přidané RFC 9562 v (24 300 cm) 2024 pro identifikátory s možností řazení a vlastní identifikátory.

Jak vypočítat UUID (vzorec)

Verze 4:

  1. Vygenerujte 128 náhodných bitů.
  2. Nastavte čtyři bity verze, tedy první hexadecimální číslici třetí skupiny, na 0100 (hexadecimálně 4).
  3. Nastavte dva nejvyšší bity čtvrté skupiny na 10 (první hexadecimální číslice této skupiny pak bude 8, 9, a nebo b).

Náhodných je ve skutečnosti pouze 122 z 128 bitů, protože 6 bitů je pevně nastaveno kroky 2 a 3. To dává 2^122 neboli přibližně 5,3 × 10^36 možných UUID verze 4.

Verze 1:

  1. Vezměte aktuální čas jako počet 100nanosekundových intervalů od 15. října 1582, data reformy gregoriánského kalendáře. V praxi jde o běžný unixový čas v milisekundách plus 12 219 292 800 000, přičemž výsledek se celý vynásobí 10 000.
  2. Rozdělte tento 60bitový počet do tří polí: nejnižších 32 bitů vložte do time_low, dalších 16 do time_mid a nejvyšších 12 do time_hi_and_version.
  3. Vygenerujte 14bitovou sekvenci hodin, která se používá k zabránění kolizím při zpětném nastavení systémových hodin.
  4. Vygenerujte 48bitovou hodnotu uzlu s nejnižším bitem prvního bajtu nastaveným na 1.
  5. Nastavte bity verze na 0001 a bity varianty na 10.

Napříč všemi verzemi UUID obsahuje celý 128bitový prostor 2^128 neboli přibližně 3,4 × 10^38 možných hodnot. Toto číslo je tak velké, že náhodné kolize nepředstavují v praxi problém.

Příklad výpočtu

Čtení UUID verze 4. Vezměte dřívější příklad: 550e8400-e29b-41d4-a716-446655440000.

  • Třetí skupina, 41d4: první číslice je 4, která označuje UUID verze 4.
  • Čtvrtá skupina, a716: první číslice, a (binárně 1010), začíná požadovanými bity varianty 10.
  • Zbývající hexadecimální číslice tvoří náhodná data.

Program, který toto UUID čte, zkontroluje vzor 4 a 10, aby potvrdil formát, a zbytek považuje za neprůhlednou náhodnou hodnotu.

Vytvoření UUID verze 1. Předpokládejme, že hodiny ukazují 1 700 000 000 000 milisekund unixového času, což odpovídá 14. listopadu 2023, 22:13:20 UTC.

  1. Přičtěte posun: 1 700 000 000 000 + 12 219 292 800 000 = 13 919 292 800 000 ms.
  2. Vynásobte 10 000, abyste získali 100nanosekundové intervaly: 139,192,928,000,000,000. V hexadecimálním zápisu jde o 01EE833B04AFC000.
  3. Rozdělte je: time_low = 04AFC000 (nejnižších 8 hexadecimálních číslic), time_mid = 833B (další 4) a nejvyšších 12 bitů je 1EE.
  4. Vložte číslici verze 1 před 1EE, čímž získáte time_hi_and_version = 11EE.

UUID pak vypadá 04afc000-833b-11ee-, za nímž následuje sekvence hodin a hodnota uzlu. Software může tyto čtyři kroky obrátit a z identifikátoru obnovit 14. listopadu 2023.

Běžné použití UUID

  • Primární klíče v databázích, zejména když více serverů vytváří záznamy současně bez vzájemné koordinace.
  • Tokeny relací a klíče API, obvykle verze 4 kvůli ochraně soukromí, kterou poskytuje.
  • Identifikátory souborů, událostí a prostředků v distribuovaných systémech, jako jsou mikroslužby.
  • ID zařízení ve velkých sítích IoT, kde si každé zařízení může vygenerovat vlastní ID offline.

Hlavním kompromisem je velikost: UUID zabírá 16 bajtů úložiště oproti 4 nebo 8 bajtům u jednoduchého celočíselného čítače a některé databáze indexují UUID pomaleji než sekvenční celá čísla.

Alternativy k UUID

Automaticky inkrementovaná celá čísla jsou menší a jednodušší, ale nefungují dobře, jakmile potřebuje více než jeden server přidělovat ID nezávisle. ID Snowflake, vyvinutá ve společnosti Twitter, kombinují časové razítko s ID pracovního procesu a vytvářejí kompaktní identifikátory, které lze řadit v distribuovaném systému. ULID (univerzálně jedinečné lexikograficky řaditelné identifikátory) jsou novější formát navržený tak, aby byl náhodný a zároveň řaditelný podle času vytvoření, na rozdíl od standardního UUID verze 4.

Historie standardu UUID

Koncept UUID vznikl v 1980. letech ve společnosti Apollo Computer jako součást jejího Network Computing System. Open Software Foundation později tento formát přijala pro své Distributed Computing Environment. Internet Engineering Task Force vydala RFC 4122 v (10 500 cm) 2005 a v květnu 2024 je nahradila RFC 9562. RFC 9562 zachovává beze změny funkčnost všech dřívějších verzí a přidává verze 6, 7 a 8.

Často kladené otázky

K čemu se generátor UUID používá? Vytváří jedinečné identifikátory pro databáze, distribuované systémy, tokeny relací, klíče API a ID zařízení, takže žádné dva záznamy nemusí sdílet stejný identifikátor.

Jaký je rozdíl mezi UUID v1 a v4? Verze 1 kóduje časové razítko, které může software zpětně přečíst a zjistit čas vytvoření. Verze 4 je zcela náhodná a neobsahuje časové razítko. Výstup verze 1 tohoto nástroje používá náhodně generovanou hodnotu uzlu namísto skutečné MAC adresy, takže neodhaluje ani informace identifikující počítač.

Odhaluje verze 1 moji MAC adresu? S tímto nástrojem ne. Standard dovoluje, aby pole uzlu UUID verze 1 obsahovalo skutečnou MAC adresu, ale tento generátor je vždy vyplňuje náhodnými bity a nastavuje bit označující, že hodnota není skutečnou síťovou adresou.

Je zaručeno, že UUID jsou jedinečná? Žádné schéma identifikátorů nemůže zaručit absolutní jedinečnost, ale 128bitový prostor obsahuje přibližně 3,4 × 10^38 možných hodnot a UUID verze 4 má přibližně 5,3 × 10^36 možných náhodných hodnot. Pravděpodobnost duplicity je dostatečně malá, aby ji bylo možné při téměř každém praktickém použití zanedbat.

Mohu UUID použít jako primární klíč databáze? Ano. UUID fungují jako primární klíče v distribuovaných systémech dobře, protože je může vygenerovat libovolný uzel bez dotazování centrálního serveru. Cenou je 16 bajtů úložiště na klíč, což je více než u běžného celého čísla, a potenciálně pomalejší indexování u velmi rozsáhlých tabulek.

Je UUID totéž co GUID? Ano. GUID (globálně jedinečný identifikátor) je označení společnosti Microsoft pro tentýž koncept, který RFC 4122 označuje jako UUID.

Lze UUID verze 4 řadit podle času vytvoření? Ne. UUID verze 4 jsou náhodná, takže neobsahují záznam o tom, kdy byla vytvořena. UUID verze 1 tento údaj obsahuje, ale nejprve jej je nutné dekódovat; třídění textu neurčí pořadí vytvoření. Verze 6, verze 7 a ULID jsou navrženy tak, aby se daly přímo řadit jako text.

Reference

  1. Davis, K., Peabody, B. a Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
  2. Leach, P., Mealling, M. a Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
  3. Univerzálně jedinečný identifikátor. In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. ID Snowflake. In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. Specifikace ULID. GitHub. https://github.com/ulid/spec