Ugrás a tartalomra

Ingyenes UUID Generátor - V1 & V4 UUID-k azonnali létrehozása

Generáljon egyedi azonosítókat azonnal ingyenes UUID generátorunkkal. Hozzon létre 1-es verzió (időalapú) és 4-es verzió (véletlenszerű) UUID-kat adatbázisokhoz, API-khoz és elosztott rendszerekhez.

UUID Generátor

UUID Verzió
Generált UUID
Betöltési kalkulátor...
📚

Dokumentáció

UUID-generátor

A UUID-generátor olyan eszköz, amely univerzálisan egyedi azonosítót, azaz UUID-t hoz létre: egy 128 bites kódot, amely adatelemek megjelölésére szolgál úgy, hogy a világon valószínűleg egyetlen másik elemnek se legyen ugyanaz az azonosítója. Ez az oldal 1-es (időalapú) és 4-es (véletlenszerű) verziójú UUID-ket generál.

Mi az a UUID?

A UUID 128 bites szám, amelyet 32 hexadecimális számjegy ír le (a 0–9 és az a–f karakterek). Öt, kötőjelekkel elválasztott csoportra oszlik, a következő mintát követve: 8-4-4-4-12, összesen 36 karakterben. Egy UUID például így néz ki:

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

A UUID-ket az RFC 9562 határozza meg, amelyet az Internet Engineering Task Force adott ki 2024 májusában, és amely felváltotta a 2005-ös régebbi RFC 4122-t. Mindkét dokumentum ugyanazt a 128 bites formátumot írja le. A szoftverek adatbázissorok, fájlok, felhasználói munkamenetek és más rekordok azonosítására használják őket anélkül, hogy egy központi hatóságnak kellene kiosztania a számokat. Mivel a lehetséges UUID-k halmaza rendkívül nagy, két számítógép egymástól függetlenül, ugyanabban a pillanatban is generálhat UUID-ket, és szinte soha nem állítja elő ugyanazt.

A UUID formátuma és felépítése

A UUID 128 bitje elnevezett mezőkre oszlik. Minden mező rögzített számú bitet foglal el:

  • 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
A UUID mezőinek elrendezése 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

A time_hi_and_version mező négy bitje tartalmazza a UUID verziószámát, a clock_seq_hi_and_reserved mező két bitje pedig a variánst, amely megadja a szoftvernek, hogyan kell értelmeznie a többi mezőt. Nyolc verzió van meghatározva.

A fenti mezőnevek az 1-es verzióból származnak, amelyben valóban idő- és csomópontértéket tartalmaznak. A többi verzió megtartja ugyanezt a 8-4-4-4-12 elrendezést és ugyanazokat a mezőhatárokat, de a bitek többségét véletlen adatokkal tölti ki. Egy 4-es verziójú UUID-ben a time_low jelű csoport véletlenszerű, nem időérték.

UUID generálása ezzel az eszközzel

  1. Válasszon verziót: 1-es (időalapú) vagy 4-es (véletlenszerű).
  2. Olvassa le a UUID-t az eredménymezőből. Új UUID jelenik meg az oldal betöltésekor vagy a verzió módosításakor.
  3. Újabb UUID-hez válassza a „Generate” lehetőséget.
  4. Az eredmény vágólapra másolásához válassza a „Copy” lehetőséget, majd illessze be kódba, adatbázisba vagy konfigurációs fájlba.

Az eredmény alatti panel a UUID-t öt mezőre bontja, és mindegyiket megnevezi, így könnyű megtalálni a verzió- és a variánsszámjegyet.

A 4-es verzió a legtöbb feladatra megfelel, például adatbáziskulcsokhoz és munkamenet-tokenekhez, mivel nem tartalmaz információt arról, mikor vagy hol készült. Az 1-es verzió olyan rekordokhoz alkalmas, amelyek létrehozási idejét magából az azonosítóból kell visszanyerni, például naplóbejegyzésekhez.

Az UUID 1-es és 4-es verziója

Az 1-es verzió az aktuális időbélyeget, valamint egy véletlenszerűen választott óraszekvenciát és csomópontértéket kódol. A szabvány szerint a csomópontérték lehet a számítógép valódi hálózati (MAC-)címe, de adatvédelmi alternatívaként véletlenszerűen generált csomópontérték is használható. Ez az eszköz mindig a véletlenszerű lehetőséget használja: az 1-es verziójú UUID-k soha nem olvasnak ki és nem fednek fel valódi MAC-címet. A szabvány azt is előírja, hogy véletlenszerű csomópontérték esetén a csomópontmező első bájtjának legkisebb helyiértékű bitje 1 legyen; ez az eszköz be is állítja. A valódi hálózati kártyákon ez a bit soha nincs beállítva, ezért a véletlenszerű csomópont nem téveszthető össze valódival. Ezért az oldal 1-es verziójú UUID-jének ötödik csoportjában a második hexadecimális számjegy mindig páratlan: 1, 3, 5, 7, 9, b, d vagy f.

Az 1-es verziójú UUID-ben lévő időbélyeg visszaolvasható, így a rekordok létrehozási sorrendbe rendezhetők. Maga a UUID-szöveg azonban nem rendezhető így, mert az első csoport az időbélyeg legkisebb 32 bitjét tartalmazza, amelyek körülbelül 7 percenként körbefordulnak. Az RFC 9562 által bevezetett 6-os verzió ugyanazt az időbélyeget a legmagasabb bitekkel kezdve tárolja, így a sima szöveges rendezés működik.

A 4-es verzió véletlenszerű bitekből készül, néhány bitet pedig a verzió és a variáns jelölésére rögzítenek. Nem tartalmaz időbélyeget vagy gépspecifikus adatot, ezért nem árulja el, mikor vagy hol készült. Létrehozási sorrend szerint nem rendezhető.

A szabványban további hat verzió létezik, de ezt az eszköz nem generálja: az 2-es verzió (DCE Security, ritkán használják); az 3-as és 5-ös verzió, amely névteret és nevet hash-el MD5 vagy SHA-1 használatával, ezért ugyanaz a bemenet mindig ugyanazt az UUID-t eredményezi; továbbá a RFC 9562 által (24 300 cm) 2024-ben hozzáadott 6-os, 7-es és 8-as verzió, rendezhető és egyéni azonosítókhoz.

UUID kiszámítása (képlet)

4-es verzió:

  1. Generáljon 128 véletlenszerű bitet.
  2. Állítsa a négy verzióbitet, vagyis a harmadik csoport első hexadecimális számjegyét 0100 értékre (hexadecimálisan 4).
  3. Állítsa a negyedik csoport két legfelső bitjét 10 értékre (így a csoport első hexadecimális számjegye 8, 9, a vagy b lesz).

A 128 bitből csak 122 véletlenszerű, mivel 6 bitet a 2. és 3. lépés rögzít. Ez 2^122, azaz körülbelül 5,3 × 10^36 lehetséges 4-es verziójú UUID-t jelent.

1-es verzió:

  1. Vegye az aktuális időt a 1582. október 15. óta eltelt 100 nanoszekundumos időközök számaként; ez a Gergely-naptár reformjának dátuma. A gyakorlatban ez a szokásos Unix-idő ezredmásodpercben, hozzáadva 12 219 292 800 000-hez, majd megszorozva 10 000-rel.
  2. Ossza fel ezt a 60 bites számlálót három mező között: a legkisebb 32 bit kerüljön a time_low mezőbe, a következő 16 a time_mid mezőbe, a legfelső 12 pedig a time_hi_and_version mezőbe.
  3. Generáljon 14 bites óraszekvenciát, amely megakadályozza az ütközéseket, ha a rendszerórát visszaállítják.
  4. Generáljon 48 bites csomópontértéket, amelynek első bájtjában a legkisebb helyiértékű bit értéke 1.
  5. Állítsa a verzióbiteket 0001, a variánsbiteket pedig 10 értékre.

Az összes UUID-verziót tekintve a teljes 128 bites címterület 2^128, azaz körülbelül 3,4 × 10^38 lehetséges értéket tartalmaz. Ez a szám olyan nagy, hogy a véletlen ütközések a gyakorlatban nem jelentenek gondot.

Megoldott példa

4-es verziójú UUID olvasása. Vegyük a korábbi példát: 550e8400-e29b-41d4-a716-446655440000.

  • Harmadik csoport, 41d4: az első számjegy 4, ami 4-es verziójú UUID-ként jelöli.
  • Negyedik csoport, a716: az első számjegy, a (binárisan 1010), 10-zel kezdődik, ami a szükséges variánsbitek értéke.
  • A többi hexadecimális számjegy a véletlenszerű adatrész.

Az UUID-t olvasó program ellenőrzi az 4 és 10 mintát a formátum megerősítéséhez, majd a többit véletlenszerű, értelmezhetetlen értékként kezeli.

1-es verziójú UUID felépítése. Tegyük fel, hogy az óra 1 700 000 000 000 ezredmásodpercnyi Unix-időt mutat, ami 2023. november 14., 22:13:20 UTC.

  1. Adja hozzá az eltolást: 1 700 000 000 000 + 12 219 292 800 000 = 13 919 292 800 000 ms.
  2. Szorozza meg 10 000-rel, hogy 100 nanoszekundumos időközöket kapjon: 139,192,928,000,000,000. Hexadecimálisan ez 01EE833B04AFC000.
  3. Szeletelje fel: time_low = 04AFC000 (a legalsó 8 hexadecimális számjegy), time_mid = 833B (a következő 4), a legfelső 12 bit pedig 1EE.
  4. Írja az 1 verziószámjegyet az 1EE elé, így time_hi_and_version = 11EE.

Az UUID ekkor 04afc000-833b-11ee- alakú, ezt követi az óraszekvencia és a csomópontérték. A szoftver ezt a négy lépést visszafelé végrehajtva visszanyerheti az azonosítóból a 2023. november 14. dátumot.

A UUID-k gyakori felhasználása

  • Elsődleges kulcsok adatbázisokban, különösen akkor, ha több szerver egyszerre hoz létre rekordokat egymással való egyeztetés nélkül.
  • Munkamenet-tokenek és API-kulcsok, általában a magánszférát biztosító 4-es verzióval.
  • Fájlok, események és erőforrások azonosítói elosztott rendszerekben, például mikroszolgáltatásokban.
  • Eszközazonosítók nagy IoT-hálózatokban, ahol minden eszköz önállóan, offline is előállíthatja a saját azonosítóját.

A fő kompromisszum a méret: egy UUID 16 bájt tárhelyet igényel, míg egy egyszerű egészszámú számláló 4 vagy 8 bájtot, és egyes adatbázisok lassabban indexelik a UUID-ket, mint a szekvenciális egész számokat.

A UUID-k alternatívái

Az automatikusan növekvő egész számok kisebbek és egyszerűbbek, de nem működnek jól, ha egynél több szervernek kell egymástól függetlenül azonosítókat kiosztania. A Twitter által fejlesztett Snowflake-azonosítók időbélyeget és munkásazonosítót kombinálnak, hogy elosztott rendszerben tömör, rendezhető azonosítókat állítsanak elő. A ULID-k (univerzálisan egyedi, lexikografikusan rendezhető azonosítók) újabb formátumot képviselnek, amelyet úgy terveztek, hogy egyszerre legyen véletlenszerű és a létrehozási idő szerint rendezhető, szemben a szabványos 4-es verziójú UUID-vel.

A UUID-szabvány története

A UUID koncepciója az 1980-as években kezdődött az Apollo Computernél, a Network Computing System részeként. Az Open Software Foundation később átvette a formátumot Distributed Computing Environment rendszeréhez. Az Internet Engineering Task Force 2005-ben adta ki az RFC 4122-t, majd 2024 májusában az RFC 9562 váltotta fel. Az RFC 9562 változatlanul működőképesen megőrzi az összes korábbi verziót, és hozzáadja a 6-os, 7-es és 8-as verziót.

Gyakran ismételt kérdések

Mire használható a UUID-generátor? Egyedi azonosítókat hoz létre adatbázisokhoz, elosztott rendszerekhez, munkamenet-tokenekhez, API-kulcsokhoz és eszközazonosítókhoz, így két rekordnak nem kell ugyanazt az azonosítót használnia.

Mi a különbség az UUID v1 és v4 között? Az 1-es verzió olyan időbélyeget kódol, amelyből a szoftver visszanyerheti a létrehozás idejét. A 4-es verzió teljesen véletlenszerű, és nem tartalmaz időbélyeget. Az eszköz 1-es verziójú kimenete valódi MAC-cím helyett véletlenszerűen generált csomópontértéket használ, ezért gépazonosító adatokat sem fed fel.

Felfedi az 1-es verzió a MAC-címemet? Ezzel az eszközzel nem. A szabvány engedi, hogy egy 1-es verziójú UUID csomópontmezeje valódi MAC-címet tartalmazzon, de ez a generátor mindig véletlen bitekkel tölti ki ezt a mezőt, és beállítja azt a bitet, amely az értéket nem valódi hálózati címként jelöli.

Garantáltan egyediek a UUID-k? Egyetlen azonosítási séma sem garantálhatja az abszolút egyediséget, de a 128 bites címterület körülbelül 3,4 × 10^38 lehetséges értéket tartalmaz, egy 4-es verziójú UUID pedig körülbelül 5,3 × 10^36 lehetséges véletlen értékkel rendelkezik. A duplikáció valószínűsége szinte minden gyakorlati felhasználás esetén elhanyagolhatóan kicsi.

Használható a UUID adatbázis elsődleges kulcsaként? Igen. A UUID-k jól használhatók elsődleges kulcsként elosztott rendszerekben, mert bármely csomópont előállíthat egyet anélkül, hogy egyeztetne központi szerverrel. Ennek ára kulcsonként 16 bájt tárhely, ami több egy tipikus egész száménál, valamint a nagyon nagy táblák esetén esetleg lassabb indexelési teljesítmény.

Ugyanaz a UUID és a GUID? Igen. A GUID (globálisan egyedi azonosító) a Microsoft elnevezése ugyanarra a fogalomra, amelyet az RFC 4122 UUID-ként határoz meg.

Rendezhetők a 4-es verziójú UUID-k a létrehozás ideje szerint? Nem. A 4-es verziójú UUID-k véletlenszerűek, ezért nem tartalmazzák a létrehozásuk időpontját. Egy 1-es verziójú UUID tartalmazza ezt, de előbb dekódolni kell; a szöveg rendezése nem adja meg a létrehozási sorrendet. A 6-os verzió, a 7-es verzió és a ULID-k közvetlenül szövegként történő rendezésre készültek.

Hivatkozások

  1. Davis, K., Peabody, B. és Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
  2. Leach, P., Mealling, M. és Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
  3. Univerzálisan egyedi azonosító. In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake-azonosító. In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID-specifikáció. GitHub. https://github.com/ulid/spec