tooly

Generator UUID

Twórz uniwersalne unikalne identyfikatory: losowe UUID v4 lub uporządkowane czasowo UUID v7 (RFC 9562), które sortują się według czasu utworzenia — idealne na klucze w bazie danych. Generowane lokalnie z kryptograficznej losowości przeglądarki.

Wszystko działa w przeglądarce — nic nie jest wysyłane

Jak używać

  1. 1

    Wybierz v4 lub v7 i liczbę.

  2. 2

    Kliknij Generuj, aby otrzymać nową partię.

  3. 3

    Skopiuj listę.

Gdzie używa się UUID

UUID (universally unique identifier, w Windowsie nazywany też GUID) to 128-bitowa wartość zapisywana jako 32 cyfry szesnastkowe w pięciu grupach: 8-4-4-4-12, na przykład 3f1c2b7e-9a4d-4c1e-8b2f-6d0e5a7c9b13. Chodzi o to, że każdy system może utworzyć go samodzielnie, bez pytania centralnego licznika, i nadal mieć pewność, że nigdy nie zderzy się z identyfikatorem utworzonym gdzie indziej.

Ta właściwość przydaje się w wielu miejscach:

  • Klucze główne w bazach danych, zwłaszcza gdy rekordy powstają na kilku serwerach lub offline na urządzeniach klientów i są później synchronizowane.
  • Identyfikatory żądań i korelacji, które śledzą jedną operację w logach wielu usług.
  • Nazwy plików dla przesyłanych plików, aby dwóch użytkowników wysyłających photo.jpg nigdy się nawzajem nie nadpisało.
  • Klucze idempotentności dla API płatności i zamówień.
  • Dane testowe i dane startowe, które potrzebują realistycznych identyfikatorów.

Wersja 4 i wersja 7

Narzędzie oferuje dwie wersje, które dziś mają znaczenie przy nowych projektach. Obie mają ten sam format i długość; różnią się tym, co zawierają bity.

UUID v4 (losowy)

Poza 6 stałymi bitami oznaczającymi wersję i wariant wszystkie 122 bity są losowe. V4 rozpoznasz po cyfrze 4 na początku trzeciej grupy. Pochodzą z funkcji przeglądarki crypto.randomUUID(), która korzysta z kryptograficznie bezpiecznego źródła losowości systemu operacyjnego.

Używaj v4, gdy identyfikator nie może niczego zdradzać: tokeny zaproszeń w adresach URL, publiczne identyfikatory zasobów, wszystko, gdzie znajomość jednego identyfikatora nie powinna pomagać w odgadnięciu innego ani w ustaleniu, kiedy powstał.

UUID v7 (uporządkowany czasowo)

Ustandaryzowany w RFC 9562 w 2024 roku v7 umieszcza na początku 48-bitowy znacznik czasu Unix w milisekundach, a pozostałe 74 bity wypełnia danymi losowymi. Trzecia grupa zaczyna się od 7. Ponieważ znacznik czasu jest na początku, wartości v7 sortują się w kolejności utworzenia jako zwykłe ciągi znaków lub bajty.

Ma to znaczenie dla baz danych. Indeksy B-drzewa przechowują klucze w kolejności, a losowe klucze v4 trafiają na losowe strony, powodując podziały stron i słabe wykorzystanie pamięci podręcznej, gdy tabele rozrastają się do milionów wierszy. Klucze uporządkowane czasowo są dopisywane blisko końca indeksu, podobnie jak automatycznie zwiększana liczba całkowita, przy zachowaniu możliwości „generowania gdziekolwiek”. Dla nowych tabel w PostgreSQL, MySQL czy SQL Server v7 jest zwykle lepszym kluczem głównym.

Dwa zastrzeżenia: znacznik czasu da się odczytać, więc v7 ujawnia moment utworzenia rekordu z dokładnością do milisekundy. Poza tym ten generator nie dodaje licznika poniżej milisekundy, więc identyfikatory utworzone w tej samej milisekundzie, jak dzieje się to w obrębie jednej partii, są uporządkowane między sobą według części losowej, a nie kolejności generowania.

Jak mało prawdopodobny jest duplikat

Przy 122 losowych bitach istnieje około 5,3 × 10^36 możliwych wartości v4. Zgodnie z paradoksem dnia urodzin trzeba by wygenerować około 2,7 × 10^18 z nich, aby osiągnąć 50% szans na choćby jedną kolizję. Przy miliardzie na sekundę zajęłoby to ponad 80 lat.

W v7 część losowa ma 74 bity, ale musi być unikalna tylko wśród identyfikatorów utworzonych w tej samej milisekundzie. Nawet przy milionie identyfikatorów na milisekundę szansa na kolizję pozostaje znikoma.

W praktyce duplikaty biorą się z błędów, a nie z matematyki: przykładowy identyfikator wpisany na sztywno i skopiowany na produkcję, generator losowy z ustalonym ziarnem lub niekryptograficzny albo sklonowana maszyna wirtualna odtwarzająca stan. Generowanie w przeglądarce z bezpieczną losowością systemu eliminuje dwie ostatnie przyczyny.

Szczegóły formatu i przechowywanie

  • Wielkość liter. RFC 9562 mówi, że UUID zapisuje się małymi literami i porównuje bez rozróżniania wielkości liter. Opcja Wielkie litery istnieje dla systemów i dokumentacji używających stylu GUID z Windowsa.
  • Nawiasy klamrowe i łączniki. Niektóre narzędzia Microsoftu pokazują GUID-y w {nawiasach klamrowych}. Usuwaj je lub łączniki tylko wtedy, gdy system docelowy oczekuje takiej formy.
  • Przechowywanie. Przechowuj UUID w natywnym typie (uuid w PostgreSQL, BINARY(16) w MySQL), a nie jako CHAR(36). Forma binarna zajmuje 16 bajtów zamiast 36 i szybciej się porównuje.
  • Wielkość partii. Do 500 naraz, po jednym w wierszu, gotowe do wklejenia do skryptu SQL lub arkusza kalkulacyjnego. Kliknięcie Generuj zastępuje całą listę.

UUID to identyfikatory, a nie sekrety. V4 trudno odgadnąć, ale jeśli daje do czegoś dostęp, traktuj to jako wygodny link, a nie uwierzytelnianie. Do danych logowania używaj Generatora haseł. Aby odczytać czas utworzenia v7, weź jego pierwsze 12 cyfr szesnastkowych, zamień je na liczbę dziesiętną i wklej ją do konwertera Unix timestamp.

FAQ

Czym różni się v4 od v7?

v4 jest w pełni losowy. v7 zaczyna się od znacznika czasu w milisekundach, więc ID sortują się chronologicznie i lepiej indeksują w bazach danych.

Czy te UUID są naprawdę unikalne?

Przy 122 losowych bitach szansa kolizji jest pomijalna — trzeba by generować miliardy na sekundę przez stulecia.

Czy są generowane na serwerze?

Nie. Pochodzą z crypto.getRandomValues w przeglądarce i nigdy nie są przesyłane.

Czy mogę wygenerować wiele naraz?

Do 500 na kliknięcie.

Podobne narzędzia