Generator UUID

Wygeneruj od razu losowy UUID v4 lub uporządkowany czasowo UUID v7 albo do 10 000 naraz. To także generator GUID online: nowy GUID to ten sam rodzaj 128-bitowej wartości. Wklej dowolny UUID, aby odczytać jego wersję, czas utworzenia i każde pole.

RFC 9562 · crypto.getRandomValues · tworzone i odczytywane w twojej przeglądarce, nic nie jest wysyłane

Kolorowa cyfra to wersja: pierwsza cyfra trzeciej grupy w każdym UUID.

v4 · Losowy36 znaków · 122 losowe bity
xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx
Budowa · RFC 9562 §5.4128 bitów · 32 cyfry szesnastkowe · 36 znaków
Najedź na pole lub dotknij go, aby je odczytać

Tworzone i odczytywane w twojej przeglądarce przez crypto.getRandomValues; nic nie jest wysyłane.

Format

Czym jest UUID i co oznacza ten skrót?

UUID to skrót od Universally Unique Identifier, czyli uniwersalnie unikalny identyfikator: 128-bitowa etykieta, którą każdy komputer może utworzyć samodzielnie i mimo to oczekiwać, że żaden inny komputer nie utworzy takiej samej. Zapisuje się go jako 32 cyfry szesnastkowe w pięciu grupach, np. 919108f7-52d1-4320-9bac-f847db4148a8.

Format definiuje RFC 9562 (maj 2024), który zastąpił RFC 4122 i dodał wersje 6, 7 i 8. Żaden centralny rejestr nie przydziela UUID: unikalność bierze się z losowości, ze znacznika czasu albo z hashowania nazwy, zależnie od wersji.

Bazy danych używają ich jako kluczy głównych, API jako identyfikatorów żądań i obiektów, a systemy operacyjne do oznaczania dysków, partycji i komponentów oprogramowania. GUID (Globally Unique Identifier, globalnie unikalny identyfikator) to nazwa, jaką Microsoft nadał temu samemu.

Jedna wartość, cztery rozmiaryRFC 9562 §4

UniversallyUniqueIDentifier

  1. 128 bitów
  2. 16 bajtów
  3. 32 cyfry szesnastkowe
  4. 36 znaków z myślnikami919108f7-52d1-4320-9bac-f847db4148a8

GUIDnazwa Microsoftu dla tej samej wartości

Przykład wersji 4 z RFC 9562 policzony na cztery sposoby. Postać tekstowa dodaje cztery myślniki do 32 cyfr szesnastkowych: razem 36 znaków.
Generator UUID: UUID v7 ze znacznikiem czasu, wersją i losowymi bitami oznaczonymi pole po polu oraz seria UUID v7Generator UUID: UUID v7 ze znacznikiem czasu, wersją i losowymi bitami oznaczonymi pole po polu oraz seria UUID v7Wybierz wersjęLosowy v4, uporządkowany czasowo v7, oparty na nazwie v5 i pozostałe, każdy w swoim kolorze.Jedno kliknięcieSkopiuj go albo utwórz nowy; serię do 10 000 pobierzesz jako tekst, CSV, JSON lub SQL.Każde poleBity, które RFC 9562 definiuje dla tej wersji, z odczytanym czasem zapisanym w v7.Dowolny formatNawiasy klamrowe, bez myślników, wielkie litery, Base64url, liczba całkowita lub kolejność bajtów .NET.
UUID v7 rozłożony na części: 48-bitowy znacznik czasu, cyfra wersji, bity wariantu i część losowa. Wybierz numer, aby zobaczyć, co pokazuje każda część.

Format i długość UUID: 36 znaków

UUID ma 128 bitów, zapisanych jako 32 cyfry szesnastkowe i 4 myślniki w grupach po 8, 4, 4, 4 i 12: razem 36 znaków. Pierwsza cyfra trzeciej grupy to wersja, a pierwsza cyfra czwartej grupy wskazuje wariant: 8, 9, a lub b dla UUID zgodnych z RFC 9562.

Zatem 017f22e2-79b0-7cc3-98c4-dc0c0c07398f to wersja 7, wariant RFC. Wielkie, małe i mieszane litery są poprawne; większość narzędzi wypisuje małe litery, a uuidgen w macOS wielkie. Bez myślników UUID ma 32 znaki, w nawiasach klamrowych 38 (format B w .NET), jako urn:uuid: 45, a w Base64url 22.

Wyrażenie regularne, które sprawdza postać z RFC: ^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$ z flagą ignorowania wielkości liter. Odrzuca Nil UUID i Max UUID, które są poprawne, ale specjalne; dekoder powyżej je rozpoznaje.

Postać tekstowaRFC 9562 §4
017f22e28-79b04-7cc34-98c44-dc0c0c07398f12

32 cyfry szesnastkowe + 4 myślniki = 36 znaków

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxxM wersja: 1–8N wariant: 8, 9, a lub b
Regex · bez rozróżniania wielkości liter^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
Te same 128 bitów zapisane inaczej
  • Standardowy017f22e2-79b0-7cc3-98c4-dc0c0c07398f36
  • Bez myślników017f22e279b07cc398c4dc0c0c07398f32
  • Klamry {…}{017f22e2-79b0-7cc3-98c4-dc0c0c07398f}38
  • urn:uuid:urn:uuid:017f22e2-79b0-7cc3-98c4-dc0c0c07398f45
  • Base64urlAX8i4nmwfMOYxNwMDAc5jw22
  • Base64AX8i4nmwfMOYxNwMDAc5jw==24
  • Base58BihbxwwQ4NZZpKRH9JDCz21
  • Base3201FWHE4YDGFK1SHH6W1G60EECF26
  • Liczba całkowita1989357241971137676463954034883508623do 39
  • Binarnie01 7f 22 e2 79 b0 7c c3 98 c4 dc 0c 0c 07 39 8f16 bajtów
Własny przykład v7 z RFC 9562 w każdej postaci zapisu. Regex celowo odrzuca Nil UUID i Max UUID: nie mają wersji.

Wersje UUID: od v1 do v8

Wersja mówi, jak powstał UUID: v4 z losowych bitów, v7 z czasu i losowych bitów, v1 i v6 ze znacznika czasu i identyfikatora węzła, v3 i v5 przez hashowanie nazwy, a v8 według własnego układu twórcy.

Wersji 2 i 0 ta strona nie generuje: v2 (DCE Security) jest zarezerwowana, a RFC 9562 nie definiuje jej układu, zaś 0 nie jest wersją. Dwie wartości specjalne nie mają wersji: Nil UUID to same zera, a Max UUID same jedynki (ffffffff-ffff-ffff-ffff-ffffffffffff, nowość w RFC 9562).

W nowych systemach RFC 9562 zaleca v7 zamiast v1 i v6 oraz v5 zamiast v3. v4 pozostaje prostym wyborem, gdy wartość nie powinna nic mówić o tym, kiedy powstała.

WersjaJej 128 bitówZ czego powstajeSortuje się według czasu
v1Czas + węzeł · §5.1Czas (100 ns) + sekwencja zegara + węzełNie
v2DCE Security: zarezerwowana, bez układu w RFC 9562Nie jest generowana: brak zdefiniowanego układu–
v3Nazwa · MD5 · §5.3MD5 z przestrzeni nazw + nazwyNie
v4Losowy · §5.4Losowe bityNie
v5Nazwa · SHA-1 · §5.5SHA-1 z przestrzeni nazw + nazwyNie
v6Sortowalny v1 · §5.6Pola v1, najpierw starsze bity czasuTak
v7Według czasu · §5.7Czas Unix (ms) + losowe bityTak
v8Własny · §5.8Własny układ twórcyNie
Nil§5.9Same zera: „brak wartości”–
Max§5.10Same jedynki: wartość wartownicza–
  • czas
  • losowe
  • skrót
  • sekwencja zegara
  • węzeł
  • wersja
  • wariant
Każdy pasek to 128 bitów jednej wersji w układzie z RFC 9562, na podstawie jego własnych wektorów testowych. Tylko v6 i v7 zaczynają się od czasu, więc tylko one sortują się według czasu jako tekst.

UUID v4 czy v7: którego użyć?

Używaj v7 do kluczy w bazie danych i wszystkiego, co sortujesz lub indeksujesz: zaczyna się od czasu utworzenia, więc nowe wiersze trafiają na koniec indeksu. Używaj v4, gdy identyfikator nie może zdradzać, kiedy powstał: wszystkie 122 wolne bity są w nim losowe.

Losowe klucze v4 rozrzucają każde wstawienie po całym indeksie B-tree, co dzieli strony i zmusza do trzymania w pamięci większej części indeksu; klucze v7 przychodzą po kolei jak liczby z autoinkrementacji, a mimo to każdy serwer może je tworzyć bez pytania bazy danych. v7 ma 74 losowe bity na milisekundę, więc dwa serwery, które tworzą UUID w tej samej chwili, i tak nie utworzą takiego samego.

Cena: każdy, kto zobaczy v7, odczyta milisekundę jego utworzenia (wklej jeden w dekoderze powyżej). Jeśli to ważne, użyj v4 albo trzymaj v7 wewnętrznie, a publicznie pokazuj inny identyfikator.

12 wstawień do indeksu B-tree8 stron liściowych · po 16 kluczy
Klucze v4 trafiają gdziekolwiekzmienione strony: 7 z 8 · 3 podziały stron
Strony według pierwszego bajtu
00–1fpodział
20–3f
40–5f
60–7f
80–9f
a0–bf
c0–dfpodział
e0–ffpodział
c100eb4b-4f3f-4b29-ad77-da7cd9d1eda592c97333-2db8-4fc2-b5b6-cedd8c7abede
Klucze v7 trafiają na konieczmienione strony: 1 z 8 · 0 podziałów stron
Strony według dnia utworzenia kluczy
17 paź
18 paź
19 paź
20 paź
21 paź
22 paź
23 paź
24 paź
01a16d3e-e1c0-70f6-99ec-6d454991b2fa01a16d3e-e1c0-70f6-99ec-6d45c2f6b35b
  • już w indeksie
  • wolne
  • nowy v4
  • nowy v7
  • podział strony: połowa jej kluczy przechodzi na nową stronę
Model, a nie benchmark: strony liściowe po 16 kluczy. Losowe klucze trafiają na starsze, prawie pełne strony i je dzielą; pierwsze bajty v7 to czas, więc wszystkie dwanaście trafia na najnowszą stronę, na której wciąż jest miejsce.

GUID a UUID: czy jest jakaś różnica?

GUID i UUID to ta sama 128-bitowa wartość w tej samej postaci tekstowej; GUID to nazwa, jaką nadał jej Microsoft. Guid.NewGuid() w .NET tworzy losowy UUID w wersji 4, a Guid.CreateVersion7() z .NET 9 wersję 7.

Różnica tkwi w pamięci. Struktura GUID Microsoftu przechowuje pierwsze trzy grupy jako liczby little-endian, więc ToByteArray() w .NET zwraca pierwsze 8 bajtów w innej kolejności niż sieciowa kolejność bajtów z RFC 9562: 919108f7-52d1-… staje się bajtami f7 08 91 91 d1 52 …. Tekst jest ten sam; surowe bajty przenoszone między systemami trzeba przekonwertować. Dekoder pokazuje obie kolejności.

uniqueidentifier w SQL Server sortuje ponadto najpierw według sześciu ostatnich bajtów, więc wartości v7 tracą tam kolejność czasową; NEWSEQUENTIALID() tworzy wartości, które ją zachowują, ale po restarcie mogą znów zaczynać od niższych i łatwo je odgadnąć. Stare identyfikatory GUID z COM mogą mieć własne bity wariantu Microsoftu zamiast tych z RFC 9562; dekoder nazywa ten wariant.

Jeden GUID, trzy kolejności bajtów16 bajtów
919108f7-52d1-4320-9bac-f847db4148a8
RFC 9562 kolejność sieciowa
.NET Guid.ToByteArray()
SQL Server kolejność uniqueidentifierO kolejności decyduje sześć ostatnich bajtów
  • Data1 · 4 bajty, odwrócone
  • Data2 · odwrócone
  • Data3 · odwrócone
  • Data4 · bez zmian
Ten sam tekst w pamięci: .NET przechowuje pierwsze trzy grupy jako little-endian, a SQL Server sortuje najpierw według sześciu ostatnich bajtów, więc uporządkowane czasowo klucze v7 tracą tam kolejność.

Jak wygenerować UUID w kodzie

Większość języków tworzy UUID v4 w jednej linii, a wiele także v7: uuid.uuid7() w Pythonie 3.14, Guid.CreateVersion7() w .NET 9, UUID.ofEpochMillis() w Javie 26, uuid.NewV7() w Go 1.27, crypto.randomUUIDv7() w Node.js 26.1 i uuidv7() w PostgreSQL 18. Przeglądarki wciąż mają tylko crypto.randomUUID(), czyli v4.

Wybierz swój język, aby zobaczyć gotową linię kodu. Nie każda implementacja v7 zachowuje kolejność UUID utworzonych w tej samej milisekundzie: Python i Go to robią, .NET i Node tego nie obiecują. A UUID() w MySQL zwraca UUID w wersji 1, który w Linuksie i Windows zawiera prawdziwy adres MAC serwera.

Wbudowane funkcje UUID w poszczególnych językach

Python
import uuid

uuid.uuid4()   # v4
uuid.uuid7()   # v7, Python 3.14+
uuid.uuid5(uuid.NAMESPACE_DNS, "www.example.com")  # v5

uuid7() ma 42-bitowy licznik, więc UUID z jednej milisekundy zachowują kolejność.

Wersje według dokumentacji każdego języka; logotypy to oficjalne znaki projektów.

Czy dwa UUID mogą być takie same?

W teorii tak, w praktyce nie: UUID v4 ma 122 losowe bity, czyli około 5,3 × 10³⁶ wartości. Trzeba by ich utworzyć około 103 bilionów, żeby szansa, że jakiekolwiek dwa się powtórzą, wyniosła jeden do miliarda, i około 2,7 tryliona, żeby wyniosła pół na pół.

To granica z paradoksu dnia urodzin: przy n losowych wartościach spośród N szansa na powtórzenie wynosi około 1 − e^(−n(n−1)/2N). Przy miliardzie UUID na sekundę na szansę 50% trzeba by czekać około 86 lat. Prawdziwe duplikaty biorą się z wadliwych generatorów: nielosowego ziarna, maszyny wirtualnej sklonowanej razem ze stanem generatora liczb losowych albo identyfikatorów kopiowanych ręcznie.

W v7 mogą się powtórzyć tylko UUID utworzone w tej samej milisekundzie, a rozróżniają je 74 losowe bity. Generator na tej stronie zachowuje też kolejność serii w obrębie jednej milisekundy (RFC 9562 §6.2), więc 10 000 UUID utworzonych naraz jest unikalnych i posortowanych.

Paradoks dnia urodzinnasze obliczenia
Szansa, że dowolne dwa są takie same1 na 1,1 × 1019p ≈ 9,4 × 10−20

Przy miliardzie na sekundę utworzenie tylu zajmie 1 sekunda.

p ≈ 1 − e^(−n(n−1)/2N), gdzie N = 2¹²² dla v4 i 2⁷⁴ na milisekundę dla v7. RFC 9562 nie podaje liczb dotyczących kolizji: to nasze obliczenia, z tej samej funkcji, której używa strona.

Dekoder UUID: jak odczytać znacznik czasu z UUID

Wklej UUID w zakładce „Dekoduj i sprawdź”, czyli w dekoderze i walidatorze UUID powyżej: odczytuje on wersję i wariant z dwóch stałych miejsc, a potem pola zdefiniowane dla tej wersji. v7 podaje milisekundę utworzenia, a v1 lub v6 czas z dokładnością do 100 nanosekund oraz sekwencję zegara i identyfikator węzła.

Węzeł v1 lub v6 z wyzerowanym bitem multicast może być prawdziwym adresem MAC karty sieciowej; sprawdź jej producenta w wyszukiwarce adresów MAC. Generatory, które dbają o prywatność, ustawiają ten bit i używają losowego węzła, tak jak ten.

Czas to wartość zapisana przez generator, a nie dowód, kiedy UUID powstał. v4 nie zawiera czasu, tylko losowe bity, a v3, v5 i v8 zawierają skróty (hashe): nie ma czego odczytać, a skrótu nie da się odwrócić do nazwy. Wklej listę, aby sprawdzić do 1000 UUID naraz: błędne wiersze, duplikaty i to, czy UUID oparte na czasie są w kolejności.

Dwa sposoby zapisu tej samej chwiliRFC 9562 · Appendix A
017f22e2-79b0-7cc3-98c4-dc0c0c07398f
  1. unix_ts_ms0x017f22e279b0
  2. ms od 19701 645 557 742 000
  3. UTC2022-02-22T19:22:22.000Z
c232ab00-9414-11ec-b3c8-9f6bdeced846
  1. time_high · time_mid · time_low1ec 9414 c232ab00
  2. kroki 100 ns od 1582-10-15138 648 505 420 000 000
  3. UTC2022-02-22T19:22:22.0000000Z

Ta sama chwila: przykłady z RFC 9562 utworzono jednocześnie.

v7 zaczyna się od liczby milisekund od 1970. v1 zapisuje najpierw młodszą część czasu, więc dekoder układa trzy części z powrotem we właściwej kolejności, zanim zacznie liczyć od 15 października 1582.

UUID oparte na nazwie: v5 i v3

UUID v5 to skrót SHA-1 z UUID przestrzeni nazw i nazwy, obcięty do 128 bitów, z ustawioną wersją i wariantem; v3 robi to samo z MD5. Ta sama przestrzeń nazw i nazwa zawsze dają ten sam UUID na każdym komputerze: wybierz v5 powyżej, aby użyć tej strony jako generatora UUID v5.

RFC 9562 definiuje cztery przestrzenie nazw: DNS dla nazw domen, URL, OID i X.500. Zatem www.example.com w przestrzeni nazw DNS to jako v5 zawsze 2ed6657d-e927-568b-95e1-2665a8aea6a2. Używaj UUID opartych na nazwie, aby nadać stały identyfikator czemuś, co ma już unikalną nazwę, bez przechowywania tabeli powiązań.

Wybieraj v5 zamiast v3: MD5 jest słabszy, a RFC 9562 zaleca v5. Żaden z nich nie ukrywa nazwy: każdy, kto ją odgadnie, obliczy ten sam UUID. Opcja v8 na tej stronie używa w ten sam sposób SHA-256, jak we własnym przykładzie v8 z RFC.

Przestrzeń nazw + nazwa → v5RFC 9562 §5.5
  1. Przestrzeń nazw6ba7b810-9dad-11d1-80b4-00c04fd430c8DNS · 16 bajtów
  2. Nazwa"www.example.com"UTF-8 · 15 bajtów
  3. Skrót SHA-1, 160 bitów2ed6657de927468b55e12665a8aea6a22dee3e35zostaje pierwsze 128 bitów
  4. Wynikowy UUID2ed6657d-e927-568b-95e1-2665a8aea6a2cyfra wersji 4 → 5 · cyfra wariantu 5 → 9
  • DNS6ba7b810…
  • URL6ba7b811…
  • OID6ba7b812…
  • X.5006ba7b814…
Własny przykład v5 z RFC 9562: www.example.com w przestrzeni nazw DNS. Każdy komputer, który zhashuje tę samą przestrzeń nazw i nazwę, otrzyma ten sam UUID.

ULID a UUID v7 (i inne identyfikatory)

ULID i UUID v7 zaczynają się od 48-bitowego znacznika czasu w milisekundach i sortują się według czasu. Różnica: ULID przeznacza wszystkie pozostałe 80 bitów na losowość i zapisuje się go jako 26 znaków Base32, a v7 poświęca 6 bitów na wersję i wariant i pasuje do każdej kolumny i biblioteki obsługującej UUID.

Jeśli twoja baza danych, ORM lub API już obsługuje UUID, v7 daje kolejność czasową bez nowego typu. NanoID i podobne krótkie identyfikatory to losowe ciągi wybranej długości, bez czasu i bez standardowego układu. Każdy UUID można też zapisać krócej: 22 znaki w Base64url, najwyżej 22 w Base58.

Trzy identyfikatory, każdy po 128 bitówproporcjonalnie
UUID v7czas, potem losowe
36 znakówsortuje się według czasu
ULIDczas, potem losowe
26 znakówsortuje się według czasu
UUID v4tylko losowe
36 znakówbez kolejności
  • milisekundy od 1970
  • losowe
  • wersja i wariant
UUID v7 i ULID mają ten sam 48-bitowy zegar milisekundowy; v7 oddaje 6 bitów na wersję i wariant, a ULID wszystkie 80 przeznacza na losowość. v4 jest tylko losowy; w Base64url każdy UUID ma 22 znaki.

Czy UUID są bezpieczne jako tokeny?

Nie. RFC 9562 mówi, by nie zakładać, że UUID są trudne do odgadnięcia, i nigdy nie używać ich jako uprawnienia (security capability): identyfikatora, którego samo posiadanie daje dostęp, jak link do resetu hasła czy klucz API.

v4 z dobrego generatora jest losowy, ale v1, v6 lub v7 zdradza czas utworzenia, a v3 lub v5 można ponownie obliczyć z nazwy. Do sekretów używaj tokenu stworzonego do tego celu, np. 256 losowych bitów z generatora kryptograficznego, i sprawdzaj uprawnienia przy każdym żądaniu. UUID nadają się na publiczne identyfikatory, gdy dostęp jest sprawdzany osobno.

IdentyfikatorCzego dowie się każdy, kto go zobaczyJako sekret
v1, v6Kiedy powstał, a może i adres MAC karty sieciowejNie
v7Milisekundę, w której powstałNie
v5, v3Niczego nowego, ale odgadnięta nazwa daje ten sam UUIDNie
v4Niczego, jeśli generator jest dobryNie
Token 256-bitowyNiczego: jest stworzony do sekretówTak
RFC 9562 mówi, by nie zakładać, że UUID są trudne do odgadnięcia, ani nie używać ich jako uprawnień (security capabilities). Do sekretów używaj tokenu z generatora kryptograficznego i sprawdzaj dostęp przy każdym żądaniu.

Generator UUID: pytania i odpowiedzi

Jak wygenerować UUID?

Otwórz tę stronę: losowy UUID v4 jest gotowy do skopiowania, a przycisk „Nowy UUID” tworzy kolejny. Wybierz v7, aby użyć jej jako generatora UUID v7, ustaw liczbę do 10 000 naraz i wybierz format, np. nawiasy klamrowe lub Base64url. W kodzie UUID v4 w jednej linii tworzą crypto.randomUUID() w JavaScripcie, uuid.uuid4() w Pythonie i Guid.NewGuid() w C#.

Co oznacza skrót UUID?

Universally Unique Identifier, czyli uniwersalnie unikalny identyfikator. To 128-bitowa wartość zapisywana jako 36 znaków, np. 919108f7-52d1-4320-9bac-f847db4148a8, którą komputery tworzą niezależnie, bez centralnego rejestru, i mimo to oczekują, że będzie unikalna. UUID definiuje RFC 9562. Microsoft nazywa tę samą wartość GUID, czyli Globally Unique Identifier.

Czy GUID to to samo co UUID?

W praktyce tak: te same 128 bitów i ta sama postać tekstowa, a Guid.NewGuid() tworzy standardowy UUID w wersji 4. Różnią się dwa szczegóły. .NET przechowuje pierwsze trzy grupy jako little-endian, więc surowe tablice bajtów mają inną kolejność, a SQL Server sortuje wartości uniqueidentifier najpierw według ostatniej grupy. Aby wygenerować GUID, użyj tej strony jako losowego generatora GUID v4: skopiowany tekst działa w obu światach.

Której wersji UUID użyć?

Wersji 7 do kluczy w bazie danych i wszystkiego, co sortujesz, bo zaczyna się od czasu utworzenia i utrzymuje zwarte indeksy. Wersji 4, gdy identyfikator nie powinien zdradzać, kiedy powstał. Wersji 5, gdy ta sama nazwa musi zawsze dawać ten sam identyfikator. Unikaj v1 w nowych projektach: RFC 9562 zaleca zamiast niej v7, a v1 może zawierać prawdziwy adres MAC.

Czy dwa UUID mogą kiedykolwiek być takie same?

Tylko z astronomicznie małym prawdopodobieństwem, jeśli generator działa poprawnie. v4 ma 122 losowe bity, więc około 103 bilionów UUID daje szansę jeden do miliarda na choćby jedno powtórzenie, a szansa 50% wymaga około 2,7 tryliona. Duplikaty w praktyce biorą się z wadliwych generatorów, sklonowanych maszyn wirtualnych lub skopiowanych danych, a nie z matematyki.

Czy da się zdekodować UUID?

Częściowo. Każdy UUID pokazuje swoją wersję i wariant. v7 zdradza też milisekundę utworzenia, a v1 lub v6 czas z dokładnością do 100 nanosekund, sekwencję zegara i identyfikator węzła, czasem prawdziwy adres MAC. v4 zawiera tylko losowe bity, a v3 i v5 skróty, z których nie da się odtworzyć nazwy. Wklej UUID w zakładce „Dekoduj i sprawdź”.

Jaka jest długość UUID?

128 bitów, czyli 16 bajtów. Jako tekst UUID ma 36 znaków: 32 cyfry szesnastkowe i 4 myślniki w grupach 8-4-4-4-12. Bez myślników ma 32 znaki, w nawiasach klamrowych 38, z prefiksem urn:uuid: 45, w Base64url 22, a jako liczba dziesiętna do 39 cyfr. Jeśli możesz, przechowuj go w natywnym typie UUID lub jako 16 bajtów, a nie jako tekst.

Czym jest pusty GUID lub Nil UUID?

To wartość, w której wszystkie 128 bitów to zera: 00000000-0000-0000-0000-000000000000. RFC 9562 nazywa ją Nil UUID, a Guid.Empty w .NET to ta sama wartość, często oznaczająca brak ustawionego identyfikatora. RFC 9562 definiuje też Max UUID, same jedynki, ffffffff-ffff-ffff-ffff-ffffffffffff, jako wartość wartowniczą (.NET 9: Guid.AllBitsSet). Żadna z nich nie jest losowa, więc nigdy nie używaj ich jako prawdziwych identyfikatorów.

Czy UUID v7 da się sortować?

Tak. Jego pierwsze 48 bitów to czas Unix w milisekundach, więc sortowanie UUID v7 jako tekstu lub bajtów porządkuje je według czasu utworzenia z dokładnością do milisekundy. W obrębie jednej milisekundy kolejność zależy od generatora: ten utrzymuje serię ściśle rosnącą, jak opisuje sekcja 6.2 RFC 9562. Wyjątkiem jest uniqueidentifier w SQL Server: porównuje najpierw ostatnią grupę.

Czy można bezpiecznie użyć UUID jako hasła lub tokenu dostępu?

Nie. RFC 9562 ostrzega, by nie zakładać, że UUID są trudne do odgadnięcia, i nie używać ich jako uprawnień (security capabilities). Wersje oparte na czasie zdradzają, kiedy powstały, a te oparte na nazwie można ponownie obliczyć. Do sekretów używaj losowego tokenu z generatora kryptograficznego, a UUID traktuj jako publiczne identyfikatory z osobną kontrolą dostępu. Do haseł użyj generatora haseł.

Czy UUID utworzone tutaj są gdzieś wysyłane?

Nie. Powstają w twojej przeglądarce przez crypto.getRandomValues, jej kryptograficznie bezpieczny generator liczb losowych, a wklejone UUID są dekodowane na twoim urządzeniu. Nic, co wygenerujesz lub wkleisz, nie trafia do nas ani do nikogo innego. Link do udostępnienia zawiera tylko to, co wybrałeś: wersję, liczbę i format, nazwę dla v5 albo UUID wklejone do dekodera, więc udostępniaj go tak, jak udostępniłbyś te dane.

Czegoś brakuje?Zaproponuj funkcję lub nowe narzędzie