Generator UUID
Generuj losowe identyfikatory w wersji 4, w takiej postaci, jakiej potrzebujesz.
Identyfikatory
Losowość pochodzi z kryptograficznego źródła przeglądarki, a nic nie jest nigdzie wysyłane.
Jak to działa
UUID to 128-bitowy identyfikator zapisywany jako 32 znaki szesnastkowe w pięciu grupach oddzielonych łącznikami.
Wersja 4 jest losowa, z wyjątkiem sześciu bitów oznaczających wersję i wariant. Zostają 122 losowe bity, czyli ponad pięć sekstylionów możliwych wartości, to jest 5,3 × 10³⁶.
Przy tak wielu możliwościach żaden centralny urząd nie musi przydzielać identyfikatorów. Dwa systemy mogą wygenerować je niezależnie, a szansa na kolizję jest znikoma.
Losowość pochodzi z kryptograficznego źródła losowości przeglądarki, które istnieje właśnie dla wartości niemożliwych do odgadnięcia.
Zapisy z wielkimi literami lub nawiasami klamrowymi pochodzą ze świata Windows. To ten sam identyfikator, tylko inaczej zapisany.
Jak powstają identyfikatory
Narzędzie wywołuje funkcję przeglądarki crypto.randomUUID, która według specyfikacji W3C Web Cryptography API tworzy UUID w wersji 4 z kryptograficznie bezpiecznych losowych bajtów. W starszych przeglądarkach, które tej funkcji nie mają, narzędzie samo wypełnia 16 bajtów funkcją crypto.getRandomValues, a potem nadpisuje sześć bitów: górna połowa siódmego bajtu staje się 0100, co oznacza wersję 4, a dwa najwyższe bity dziewiątego bajtu stają się 10, co oznacza wariant. Jedna partia to najwyżej 100 identyfikatorów. Opcje wielkich liter, nawiasów klamrowych i łączników zmieniają tylko zapis, a nie same wartości.
Jak rozpoznać wersję 4
Stałe bity widać w tekście. Pierwszy znak trzeciej grupy to zawsze 4. Pierwszy znak czwartej grupy to 8, 9, a lub b, bo ustalone są tylko dwa z jego czterech bitów. W identyfikatorze d8b50b92-0c6b-4466-affc-70041c5aba3d, utworzonym kodem narzędzia, są to znaki 4 i a. Jeśli w tych miejscach stoi coś innego, identyfikator nie jest w wersji 4. RFC 9562 pozwala zapisywać litery wielkie, małe albo jedne i drugie naraz.
Przypadki graniczne
UUID jest identyfikatorem, a nie sekretem. RFC 9562 mówi, że implementacje nie powinny zakładać, że UUID są trudne do odgadnięcia, i że nie wolno ich używać jako uprawnień, czyli identyfikatorów, których samo posiadanie daje dostęp. Link do resetowania hasła potrzebuje tokenu zaprojektowanego do tego celu.
Jako klucz w bazie danych wersja 4 ma wadę, na którą wskazuje sama norma: wartości tworzone jedna po drugiej trafiają w odległe miejsca indeksu, więc każdy nowy wiersz jest wstawiany w losowe miejsce. Wersja 7 zaczyna się od znacznika czasu, więc sortuje się w kolejności tworzenia. Narzędzie tworzy tylko wersję 4.
Dwie wartości mają w normie własne nazwy: nil UUID, złożony z samych zer, i max UUID, złożony z samych f. Żadna z nich nie może powstać w narzędziu, bo bity wersji i wariantu są zawsze ustawione.