Preskočiť na obsah

Generátor UUID zdarma - Vytvorte V1 & V4 UUID okamžite

Generujte jedinečné identifikátory okamžite pomocou nášho bezplatného generátora UUID. Vytvorte verziu 1 (založenú na čase) a verziu 4 (náhodné) UUID pre databázy, API a distribuované systémy.

Generátor UUID

Verzia UUID
Vygenerované UUID
Kalkulačka načítavania...
📚

Dokumentácia

Generátor UUID

Generátor UUID je nástroj, ktorý vytvára univerzálne jedinečný identifikátor alebo UUID: kód s dĺžkou 128 bitov používaný na označenie údajov tak, aby rovnaké označenie pravdepodobne nemala žiadna iná položka. Táto stránka generuje UUID verzie 1 (založené na čase) a verzie 4 (náhodné).

Čo je UUID?

UUID je číslo s dĺžkou 128 bitov zapísané ako 32 hexadecimálnych číslic (znaky 0–9 a a–f). Je rozdelené do piatich skupín oddelených spojovníkmi podľa vzoru 8-4-4-4-12, celkovo na 36 znakov. UUID môže vyzerať napríklad takto:

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

UUID sú definované v RFC 9562, ktoré pracovná skupina Internet Engineering Task Force vydala v máji 2024 a ktoré nahradilo staršie RFC 4122 z roku 2005. Oba dokumenty opisujú rovnaký formát s dĺžkou 128 bitov. Softvér ich používa na identifikáciu riadkov databáz, súborov, používateľských relácií a ďalších záznamov bez potreby centrálnej autority, ktorá by prideľovala čísla. Keďže množina možných UUID je veľmi veľká, dva počítače môžu nezávisle a v rovnakom čase vygenerovať UUID a takmer nikdy nevytvoria rovnaké.

Formát a štruktúra UUID

128 bitov UUID je rozdelených do pomenovaných polí. Každé pole zaberá pevný počet bitov:

  • time_low – 32 bitov
  • time_mid – 16 bitov
  • time_hi_and_version – 16 bitov
  • clock_seq_hi_and_reserved – 8 bitov
  • clock_seq_low – 8 bitov
  • node – 48 bitov
Usporiadanie 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

Štyri bity vo vnútri poľa time_hi_and_version obsahujú číslo verzie UUID a dva bity vo vnútri poľa clock_seq_hi_and_reserved obsahujú variant, ktorý softvéru určuje, ako má čítať zvyšné polia. Je definovaných osem verzií.

Názvy polí uvedené vyššie pochádzajú z verzie 1, v ktorej skutočne obsahujú hodnotu času a uzla. Ostatné verzie zachovávajú rovnaké usporiadanie 8-4-4-4-12 a rovnaké hranice polí, ale väčšinu bitov vypĺňajú náhodnými údajmi. V UUID verzie 4 je skupina označená time_low náhodná, nejde o čas.

Ako generovať UUID pomocou tohto nástroja

  1. Vyberte verziu: verziu 1 (založenú na čase) alebo verziu 4 (náhodnú).
  2. Prečítajte UUID v poli s výsledkom. Nové UUID sa zobrazí hneď po načítaní stránky alebo po zmene verzie.
  3. Ak chcete vytvoriť ďalšie UUID, vyberte možnosť „Generovať“.
  4. Ak chcete výsledok skopírovať do schránky, vyberte možnosť „Kopírovať“ a potom ho vložte do kódu, databázy alebo konfiguračného súboru.

Panel pod výsledkom rozdeľuje UUID do piatich polí a každé z nich pomenúva, takže číslicu verzie a číslicu variantu možno ľahko nájsť.

Verzia 4 je vhodná na väčšinu použití vrátane databázových kľúčov a tokenov relácií, pretože neobsahuje informáciu o tom, kedy ani kde bola vytvorená. Verzia 1 je vhodná pre záznamy, pri ktorých musí byť čas vytvorenia spätne zistiteľný zo samotného identifikátora, napríklad pre položky protokolu.

UUID verzie 1 verzus verzie 4

Verzia 1 kóduje aktuálnu časovú pečiatku spolu s náhodne zvolenou sekvenciou hodín a hodnotou uzla. Štandard povoľuje, aby hodnotou uzla bola skutočná sieťová adresa (MAC) počítača, ale povoľuje aj náhodne vygenerovanú hodnotu uzla ako alternatívu chrániacu súkromie. Tento nástroj vždy používa náhodnú možnosť: jeho UUID verzie 1 nikdy nečítajú ani neodhaľujú skutočnú MAC adresu. Štandard tiež vyžaduje, aby bol najnižší bit prvého bajtu poľa uzla pri náhodnej hodnote uzla nastavený na 1, a tento nástroj ho nastavuje. Skutočné sieťové karty tento bit nikdy nemajú nastavený, takže náhodný uzol nemožno zameniť za skutočný. Preto je druhá hexadecimálna číslica piatej skupiny v UUID verzie 1 z tejto stránky vždy nepárna: 1, 3, 5, 7, 9, b, d alebo f.

Časovú pečiatku v UUID verzie 1 možno spätne prečítať, takže záznamy možno zoradiť podľa času vytvorenia. Samotné zoradenie textu UUID to však nezabezpečí, pretože prvá skupina obsahuje najnižších 32 bitov časovej pečiatky, ktoré sa pretočia približne každých 7 minút. Verzia 6, pridaná v RFC 9562, ukladá rovnakú časovú pečiatku s najvyššími bitmi na začiatku, takže funguje aj zoradenie obyčajného textu.

Verzia 4 je vytvorená z náhodných bitov, pričom niekoľko bitov je pevne nastavených na označenie verzie a variantu. Neobsahuje časovú pečiatku ani údaje špecifické pre zariadenie, takže neodhaľuje, kedy ani kde bola vytvorená. Podľa času vytvorenia ju nemožno zoradiť.

V štandarde existuje ďalších šesť verzií, ktoré tento nástroj negeneruje: verzia 2 (DCE Security, používaná zriedka); verzie 3 a 5, vytvorené hashovaním menného priestoru a názvu pomocou MD5 alebo SHA-1, takže rovnaký vstup vždy vytvorí rovnaké UUID; a verzie 6, 7 a 8, pridané RFC 9562 v roku (24 300 cm) 2024 pre zoraditeľné a vlastné identifikátory.

Ako vypočítať UUID (vzorec)

Verzia 4:

  1. Vygenerujte 128 náhodných bitov.
  2. Nastavte štyri bity verzie, teda prvú hexadecimálnu číslicu tretej skupiny, na 0100 (hexadecimálne 4).
  3. Nastavte dva najvyššie bity štvrtej skupiny na 10 (prvá hexadecimálna číslica tejto skupiny bude 8, 9, a alebo b).

Náhodných je v skutočnosti iba 122 z 128 bitov, pretože 6 bitov je pevne určených krokmi 2 a 3. To dáva 2^122, teda približne 5,3 × 10^36 možných UUID verzie 4.

Verzia 1:

  1. Určte aktuálny čas ako počet 100-nanosekundových intervalov od 15. októbra 1582, dátumu reformy gregoriánskeho kalendára. V praxi ide o bežný unixový čas v milisekundách plus 12 219 292 800 000, pričom výsledok sa vynásobí číslom 10 000.
  2. Rozdeľte tento počet s dĺžkou 60 bitov medzi tri polia: najnižších 32 bitov vložte do time_low, ďalších 16 do time_mid a najvyšších 12 do time_hi_and_version.
  3. Vygenerujte sekvenciu hodín s dĺžkou 14 bitov, ktorá sa používa na zabránenie kolíziám pri spätnom nastavení systémových hodín.
  4. Vygenerujte hodnotu uzla s dĺžkou 48 bitov a najnižší bit jej prvého bajtu nastavte na 1.
  5. Nastavte bity verzie na 0001 a bity variantu na 10.

Celý priestor s dĺžkou 128 bitov obsahuje vo všetkých verziách UUID 2^128, teda približne 3,4 × 10^38 možných hodnôt. Toto číslo je také veľké, že náhodné kolízie nepredstavujú praktický problém.

Príklad s riešením

Čítanie UUID verzie 4. Vezmime príklad z predchádzajúcej časti: 550e8400-e29b-41d4-a716-446655440000.

  • Tretia skupina, 41d4: prvá číslica je 4, čo označuje UUID verzie 4.
  • Štvrtá skupina, a716: prvá číslica, a (binárne 1010), začína hodnotou 10, čo sú požadované bity variantu.
  • Zostávajúce hexadecimálne číslice sú náhodné údaje.

Program, ktorý číta toto UUID, skontroluje vzor 4 a 10 na potvrdenie formátu a so zvyškom zaobchádza ako s nepriehľadnou náhodnou hodnotou.

Vytvorenie UUID verzie 1. Predpokladajme, že hodiny ukazujú 1 700 000 000 000 milisekúnd unixového času, čo zodpovedá dátumu 14. novembra 2023 a času 22:13:20 UTC.

  1. Pripočítajte posun: 1 700 000 000 000 + 12 219 292 800 000 = 13 919 292 800 000 ms.
  2. Vynásobte číslom 10 000, aby ste získali 100-nanosekundové intervaly: 139,192,928,000,000,000. V hexadecimálnom zápise je to 01EE833B04AFC000.
  3. Rozdeľte ho: time_low = 04AFC000 (najnižších 8 hexadecimálnych číslic), time_mid = 833B (ďalšie 4) a najvyšších 12 bitov je 1EE.
  4. Pred 1EE vložte číslicu verzie 1, čím získate time_hi_and_version = 11EE.

UUID potom vyzerá takto: 04afc000-833b-11ee-, za ktorým nasleduje sekvencia hodín a hodnota uzla. Softvér môže tieto štyri kroky obrátiť a z identifikátora získať dátum 14. novembra 2023.

Bežné použitia UUID

  • Primárne kľúče v databázach, najmä keď viacero serverov vytvára záznamy súčasne bez vzájomnej koordinácie.
  • Tokeny relácií a kľúče API, zvyčajne verzie 4 pre ochranu súkromia, ktorú poskytujú.
  • Identifikátory súborov, udalostí a prostriedkov v distribuovaných systémoch, ako sú mikroslužby.
  • Identifikátory zariadení vo veľkých sieťach IoT, kde si každé zariadenie môže vytvoriť vlastný identifikátor aj bez pripojenia.

Hlavným kompromisom je veľkosť: UUID zaberá 16 bajtov úložiska v porovnaní s 4 alebo 8 bajtmi pri jednoduchom celočíselnom počítadle a niektoré databázy indexujú UUID pomalšie než sekvenčné celé čísla.

Alternatívy k UUID

Automaticky inkrementované celé čísla sú menšie a jednoduchšie, ale nefungujú dobre, keď viac než jeden server potrebuje nezávisle prideľovať identifikátory. Identifikátory Snowflake, vyvinuté v spoločnosti Twitter, kombinujú časovú značku s identifikátorom pracovného uzla a vytvárajú kompaktné, zoraditeľné identifikátory v distribuovanom systéme. ULID (univerzálne jedinečné lexikograficky zoraditeľné identifikátory) sú novším formátom navrhnutým tak, aby boli náhodné a zároveň zoraditeľné podľa času vytvorenia, na rozdiel od štandardného UUID verzie 4.

História štandardu UUID

Koncepcia UUID vznikla v 1980. rokoch v spoločnosti Apollo Computer ako súčasť jej systému Network Computing System. Open Software Foundation neskôr prijala tento formát pre svoje Distributed Computing Environment. Internet Engineering Task Force vydala RFC 4122 v roku 2005 a v máji 2024 ho nahradila RFC 9562. RFC 9562 zachováva fungovanie všetkých predchádzajúcich verzií bez zmien a pridáva verzie 6, 7 a 8.

Najčastejšie otázky

Na čo sa používa generátor UUID? Vytvára jedinečné identifikátory pre databázy, distribuované systémy, tokeny relácií, kľúče API a identifikátory zariadení, aby žiadne dva záznamy nemuseli zdieľať rovnaký identifikátor.

Aký je rozdiel medzi UUID v1 a v4? Verzia 1 kóduje časovú pečiatku, ktorú môže softvér spätne prečítať a zistiť čas vytvorenia. Verzia 4 je úplne náhodná a neobsahuje časovú pečiatku. Výstup verzie 1 tohto nástroja používa náhodne vygenerovanú hodnotu uzla namiesto skutočnej MAC adresy, takže neodhaľuje ani informácie identifikujúce počítač.

Odhaľuje verzia 1 moju MAC adresu? Nie pri použití tohto nástroja. Štandard povoľuje, aby pole uzla UUID verzie 1 obsahovalo skutočnú MAC adresu, ale tento generátor ho vždy vypĺňa náhodnými bitmi a nastavuje bit označujúci, že hodnota nie je skutočnou sieťovou adresou.

Je zaručené, že UUID sú jedinečné? Nie, žiadna schéma identifikátorov nemôže zaručiť absolútnu jedinečnosť, ale priestor s dĺžkou 128 bitov obsahuje približne 3,4 × 10^38 možných hodnôt a UUID verzie 4 má približne 5,3 × 10^36 možných náhodných hodnôt. Pravdepodobnosť duplicity je dostatočne malá na to, aby ju pri takmer každom praktickom použití bolo možné zanedbať.

Môžem použiť UUID ako primárny kľúč databázy? Áno. UUID fungujú ako primárne kľúče v distribuovaných systémoch dobre, pretože každý uzol môže jeden vygenerovať bez komunikácie s centrálnym serverom. Cenou je 16 bajtov úložiska na kľúč, čo je viac než pri typickom celom čísle, a potenciálne pomalší výkon indexovania vo veľmi veľkých tabuľkách.

Je UUID to isté ako GUID? Áno. GUID (globálne jedinečný identifikátor) je názov spoločnosti Microsoft pre rovnakú koncepciu definovanú v RFC 4122 ako UUID.

Dajú sa UUID verzie 4 zoradiť podľa času vytvorenia? Nie. UUID verzie 4 sú náhodné, takže neobsahujú údaj o čase vytvorenia. UUID verzie 1 taký údaj obsahuje, ale najprv ho treba dekódovať; zoradenie textu neurčí poradie vytvorenia. Verzie 6, 7 a ULID sú navrhnuté tak, aby sa dali priamo zoradiť ako text.

Referencie

  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. Universally unique identifier. In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. Špecifikácia ULID. GitHub. https://github.com/ulid/spec