Darmowy Generator UUID - Twórz identyfikatory V1 i V4 natychmiast
Generuj unikalne identyfikatory natychmiast za pomocą naszego darmowego generatora UUID. Twórz identyfikatory wersji 1 (oparte na czasie) i wersji 4 (losowe) dla baz danych, API i systemów rozproszonych.
Generator UUID
Dokumentacja
Generator UUID
Generator UUID to narzędzie tworzące uniwersalny unikatowy identyfikator (UUID): kod o długości 128 bitów, używany do oznaczania danych, tak aby żaden inny element w żadnym miejscu prawdopodobnie nie miał takiego samego oznaczenia. Ta strona generuje UUID w wersji 1 (oparte na czasie) oraz w wersji 4 (losowe).
Czym jest UUID?
UUID to liczba o długości 128 bitów zapisana za pomocą 32 cyfr szesnastkowych (znaków 0–9 oraz a–f). Jest podzielona na pięć grup oddzielonych łącznikami, według wzoru 8-4-4-4-12, co daje łącznie 36 znaków. Przykładowy UUID wygląda tak:
1550e8400-e29b-41d4-a716-446655440000
2UUID są definiowane przez dokument RFC 9562, opublikowany przez Internet Engineering Task Force w maju 2024, który zastąpił starszy dokument RFC 4122 z roku 2005. Oba dokumenty opisują ten sam format o długości 128 bitów. Oprogramowanie używa UUID do identyfikowania wierszy baz danych, plików, sesji użytkowników i innych rekordów bez potrzeby korzystania z centralnego organu przydzielającego numery. Ponieważ przestrzeń możliwych UUID jest bardzo duża, dwa komputery mogą niezależnie wygenerować UUID w tym samym momencie i niemal nigdy nie uzyskać identycznego wyniku.
Format i struktura UUID
128 bitów identyfikatora UUID podzielono na nazwane pola. Każde pole zajmuje stałą liczbę bitów:
time_low– 32 bitytime_mid– 16 bitówtime_hi_and_version– 16 bitówclock_seq_hi_and_reserved– 8 bitówclock_seq_low– 8 bitównode– 48 bitów
Cztery bity wewnątrz pola time_hi_and_version przechowują numer wersji UUID, a dwa bity wewnątrz pola clock_seq_hi_and_reserved przechowują wariant, który informuje oprogramowanie, jak odczytywać pozostałe pola. Zdefiniowano osiem wersji.
Powyższe nazwy pól pochodzą z wersji 1, w której rzeczywiście przechowują wartość czasu i węzła. Inne wersje zachowują ten sam układ 8-4-4-4-12 oraz te same granice pól, ale większość bitów wypełniają losowymi danymi. W UUID wersji 4 grupa oznaczona jako time_low zawiera dane losowe, a nie czas.
Jak wygenerować UUID za pomocą tego narzędzia
- Wybierz wersję: 1 (opartą na czasie) albo 4 (losową).
- Odczytaj UUID z pola wyniku. Nowy UUID pojawia się po załadowaniu strony lub zmianie wersji.
- Wybierz opcję „Generuj”, aby utworzyć kolejny.
- Wybierz opcję „Kopiuj”, aby skopiować wynik do schowka, a następnie wklej go do kodu, bazy danych lub pliku konfiguracyjnego.
Panel poniżej wyniku dzieli UUID na pięć pól i nadaje nazwę każdemu z nich, dzięki czemu łatwo znaleźć cyfrę wersji i cyfrę wariantu.
Wersja 4 pasuje do większości zastosowań, w tym kluczy baz danych i tokenów sesji, ponieważ nie zawiera informacji o czasie ani miejscu utworzenia. Wersja 1 pasuje do rekordów, w przypadku których czas utworzenia musi dać się odtworzyć z samego identyfikatora, takich jak wpisy dziennika.
UUID w wersji 1 a UUID w wersji 4
Wersja 1 koduje bieżący znacznik czasu oraz losowo wybraną sekwencję zegara i wartość węzła. Standard dopuszcza, aby wartość węzła była rzeczywistym adresem sieciowym (MAC) komputera, ale ze względów ochrony prywatności dopuszcza też wartość węzła wygenerowaną losowo. To narzędzie zawsze korzysta z opcji losowej: jego UUID w wersji 1 nigdy nie odczytują ani nie ujawniają rzeczywistego adresu MAC. Standard wymaga także ustawienia najmłodszego bitu pierwszego bajtu pola węzła na 1 dla losowej wartości węzła; to narzędzie go ustawia. Rzeczywiste karty sieciowe nigdy nie mają ustawionego tego bitu, więc losowego węzła nie można pomylić z rzeczywistym. Dlatego druga cyfra szesnastkowa piątej grupy jest zawsze nieparzysta w UUID wersji 1 z tej strony: 1, 3, 5, 7, 9, b, d lub f.
Znacznik czasu w UUID wersji 1 można odczytać, dzięki czemu rekordy można uporządkować według czasu utworzenia. Sortowanie samego tekstu UUID tego nie zapewnia, ponieważ pierwsza grupa zawiera najmłodsze 32 bity znacznika czasu, które zawijają się mniej więcej co 7 minut. Wersja 6, dodana w dokumencie RFC 9562, przechowuje ten sam znacznik czasu z najstarszymi bitami na początku, dzięki czemu działa zwykłe sortowanie tekstowe.
Wersja 4 jest zbudowana z losowych bitów, z wyjątkiem kilku bitów ustalonych do oznaczenia wersji i wariantu. Nie zawiera znacznika czasu ani danych zależnych od urządzenia, więc nie ujawnia, kiedy ani gdzie została utworzona. Nie można jej sortować według kolejności utworzenia.
W standardzie istnieje sześć innych wersji, ale to narzędzie ich nie generuje: wersja 2 (DCE Security, rzadko używana); wersje 3 i 5, tworzone przez haszowanie przestrzeni nazw i nazwy za pomocą MD5 lub SHA-1, dzięki czemu te same dane wejściowe zawsze dają ten sam UUID; oraz wersje 6, 7 i 8, dodane przez RFC 9562 w roku (24 300 cm) 2024 na potrzeby sortowalnych i niestandardowych identyfikatorów.
Jak obliczyć UUID (wzór)
Wersja 4:
- Wygeneruj 128 losowych bitów.
- Ustaw cztery bity wersji, czyli pierwszą cyfrę szesnastkową trzeciej grupy, na
0100(szesnastkowo4). - Ustaw dwa najstarsze bity czwartej grupy na
10(wtedy pierwszą cyfrą szesnastkową tej grupy będzie8,9,alubb).
Tylko 122 z 128 bitów jest faktycznie losowych, ponieważ 6 bitów jest ustalanych w krokach 2 i 3. Daje to 2^122, czyli około 5,3 × 10^36, możliwych UUID wersji 4.
Wersja 1:
- Przyjmij bieżący czas jako liczbę przedziałów o długości 100 nanosekund, liczonych od 15 października 1582, daty reformy kalendarza gregoriańskiego. W praktyce jest to zwykły czas uniksowy w milisekundach powiększony o 12 219 292 800 000, a następnie pomnożony przez 10 000.
- Podziel tę liczbę 60 bitów między trzy pola: najmłodsze 32 bitów umieść w polu
time_low, kolejne 16 w polutime_mid, a najstarsze 12 w polutime_hi_and_version. - Wygeneruj 14-bitową sekwencję zegara, używaną do unikania kolizji, gdy zegar systemowy zostanie cofnięty.
- Wygeneruj 48-bitową wartość węzła, ustawiając najmłodszy bit jej pierwszego bajtu na 1.
- Ustaw bity wersji na
0001, a bity wariantu na10.
We wszystkich wersjach UUID pełna przestrzeń 128 bitów zawiera 2^128, czyli około 3,4 × 10^38, możliwych wartości. Liczba ta jest tak duża, że przypadkowe kolizje nie stanowią praktycznego problemu.
Przykład rozwiązany
Odczytywanie UUID wersji 4. Weźmy wcześniejszy przykład: 550e8400-e29b-41d4-a716-446655440000.
- Trzecia grupa,
41d4: pierwsza cyfra to4, oznaczająca UUID wersji 4. - Czwarta grupa,
a716: pierwsza cyfra,a(binarnie1010), zaczyna się od10, czyli wymaganych bitów wariantu. - Pozostałe cyfry szesnastkowe są losowym ładunkiem danych.
Program odczytujący ten UUID sprawdza wzorzec 4 i 10, aby potwierdzić format, a następnie traktuje resztę jako nieinterpretowalną wartość losową.
Tworzenie UUID wersji 1. Załóżmy, że zegar wskazuje 1 700 000 000 000 milisekund czasu uniksowego, czyli 14 listopada 2023, 22:13:20 UTC.
- Dodaj przesunięcie: 1 700 000 000 000 + 12 219 292 800 000 = 13 919 292 800 000 ms.
- Pomnóż przez 10 000, aby uzyskać przedziały 100 nanosekund: 139,192,928,000,000,000. W zapisie szesnastkowym jest to
01EE833B04AFC000. - Podziel tę wartość:
time_low=04AFC000(najmłodsze 8 cyfr szesnastkowych),time_mid=833B(kolejne 4), a najstarsze 12 bitów to1EE. - Umieść cyfrę wersji
1przed1EE, otrzymująctime_hi_and_version=11EE.
UUID ma więc postać 04afc000-833b-11ee-, po której następują sekwencja zegara i wartość węzła. Oprogramowanie może odwrócić te cztery kroki, aby odtworzyć 14 listopada 2023 z identyfikatora.
Typowe zastosowania UUID
- Klucze główne w bazach danych, szczególnie gdy wiele serwerów jednocześnie tworzy rekordy bez uzgadniania tego między sobą.
- Tokeny sesji i klucze API, zwykle w wersji 4 ze względu na zapewnianą ochronę prywatności.
- Identyfikatory plików, zdarzeń i zasobów w systemach rozproszonych, takich jak mikrousługi.
- Identyfikatory urządzeń w dużych sieciach IoT, gdzie każde urządzenie może generować własny identyfikator offline.
Głównym kompromisem jest rozmiar: UUID zajmuje 16 bajtów pamięci, podczas gdy prosty licznik całkowity zajmuje 4 lub 8 bajtów, a niektóre bazy danych indeksują UUID wolniej niż kolejne liczby całkowite.
Alternatywy dla UUID
Liczby całkowite zwiększane automatycznie są mniejsze i prostsze, ale nie sprawdzają się dobrze, gdy więcej niż jeden serwer musi niezależnie przydzielać identyfikatory. Identyfikatory Snowflake, opracowane w firmie Twitter, łączą znacznik czasu z identyfikatorem węzła roboczego, tworząc zwarte i sortowalne identyfikatory w systemie rozproszonym. ULID-y (uniwersalnie unikatowe identyfikatory sortowalne leksykograficznie) to nowszy format zaprojektowany tak, aby był jednocześnie losowy i sortowalny według czasu utworzenia, w przeciwieństwie do standardowego UUID wersji 4.
Historia standardu UUID
Koncepcja UUID powstała w latach 1980 w firmie Apollo Computer jako część jej Network Computing System. Open Software Foundation później przyjęła ten format dla Distributed Computing Environment. Internet Engineering Task Force opublikowała RFC 4122 w roku 2005, a w maju 2024 zastąpiła je dokumentem RFC 9562. RFC 9562 zachowuje działanie wszystkich wcześniejszych wersji bez zmian i dodaje wersje 6, 7 oraz 8.
Często zadawane pytania
Do czego służy generator UUID? Tworzy unikatowe identyfikatory dla baz danych, systemów rozproszonych, tokenów sesji, kluczy API i identyfikatorów urządzeń, dzięki czemu żadne dwa rekordy nie muszą mieć tego samego identyfikatora.
Jaka jest różnica między UUID v1 i v4? Wersja 1 koduje znacznik czasu, który oprogramowanie może odczytać, aby ustalić czas utworzenia. Wersja 4 jest w pełni losowa i nie zawiera znacznika czasu. Wynik wersji 1 tego narzędzia używa losowo wygenerowanej wartości węzła zamiast rzeczywistego adresu MAC, więc również nie ujawnia informacji identyfikujących urządzenie.
Czy wersja 1 ujawnia mój adres MAC? Nie w przypadku tego narzędzia. Standard dopuszcza, aby pole węzła UUID wersji 1 zawierało rzeczywisty adres MAC, ale ten generator zawsze wypełnia je losowymi bitami i ustawia bit oznaczający, że wartość nie jest rzeczywistym adresem sieciowym.
Czy UUID mają gwarantowaną unikatowość? Nie, żaden schemat identyfikatorów nie może zagwarantować absolutnej unikatowości, ale przestrzeń 128 bitów zawiera około 3,4 × 10^38 możliwych wartości, a UUID wersji 4 ma około 5,3 × 10^36 możliwych wartości losowych. Prawdopodobieństwo duplikatu jest na tyle małe, że można je pominąć niemal w każdym praktycznym zastosowaniu.
Czy mogę użyć UUID jako klucza głównego bazy danych? Tak. UUID dobrze sprawdzają się jako klucze główne w systemach rozproszonych, ponieważ każdy węzeł może wygenerować UUID bez kontaktowania się z centralnym serwerem. Kosztem jest 16 bajtów pamięci na klucz, czyli więcej niż w przypadku typowej liczby całkowitej, a także potencjalnie wolniejsze indeksowanie bardzo dużych tabel.
Czy UUID jest tym samym co GUID? Tak. GUID (globalnie unikatowy identyfikator) to nazwa firmy Microsoft określająca tę samą koncepcję zdefiniowaną przez RFC 4122 jako UUID.
Czy UUID wersji 4 można sortować według czasu utworzenia? Nie. UUID wersji 4 są losowe, więc nie zawierają informacji o czasie utworzenia. UUID wersji 1 zawiera taką informację, ale najpierw trzeba ją odkodować; sortowanie tekstu nie daje kolejności utworzenia. Wersje 6 i 7 oraz ULID-y zaprojektowano tak, aby można je było bezpośrednio sortować jako tekst.
Piśmiennictwo
- Davis, K., Peabody, B. i Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
- Leach, P., Mealling, M. i Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
- Identyfikator uniwersalnie unikatowy. W Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Identyfikator Snowflake. W Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- Specyfikacja ULID. GitHub. https://github.com/ulid/spec