Generuj unikalne identyfikatory UUID v4.
Wszystkie obliczenia wykonywane są lokalnie w przeglądarce. Dane nie są wysyłane na serwer.
Wyniki mają charakter informacyjny. Potwierdź je w innych źródłach.
UUID: co oznaczają poszczególne znaki
UUID to 128-bitowy identyfikator zapisany jako 32 znaki szesnastkowe w układzie 8-4-4-4-12. Wersja 4 — taką generuje to narzędzie — wypełnia niemal wszystkie te bity danymi losowymi, więc dwie niezależnie wygenerowane wartości praktycznie nigdy nie są takie same.
Jak to działa
- Generuje 128 bitów, po czym nadpisuje sześć z nich: cztery zapisują wersję (4), a dwa wariant.
- Zostaje 122 bity faktycznej losowości i stąd bierze się odporność na kolizje.
- Formatuje wynik jako 8-4-4-4-12 znaków szesnastkowych rozdzielonych myślnikami.
- Korzysta z crypto.getRandomValues przeglądarki, źródła kryptograficznie bezpiecznego — nie z Math.random.
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
↑ ↑
wersja wariant (8, 9, a albo b)
bity losowe = 128 − 6 = 122Przykład z liczbami
Odczyt prawdziwego UUID-a v4 pozycja po pozycji.
- f47ac10b-58cc-4372-a567-0e02b2c3d479
- pozycja 15 (początek trzeciej grupy) to 4 → wersja 4, generowana losowo
- pozycja 20 (początek czwartej grupy) to a → wariant RFC 4122
- pozostałe 122 bity są losowe
- szansa kolizji: po miliardzie UUID-ów mniej więcej 1 do 10^22
Trzeba by wygenerować około 2,7 × 10^18 UUID-ów, żeby dojść do 50% szansy na jedną kolizję — liczba na tyle duża, że duplikaty są błędem w kodzie, a nie pechem.
Jak czytać wynik
- UUID-y wersji 4 się nie sortują. Wstawiane jako klucz główny rozrzucają zapisy po indeksie B-drzewa, co go fragmentuje i spowalnia wstawianie w dużych tabelach. Wersja 7, która umieszcza znacznik czasu w starszych bitach, powstała dokładnie do tego i sortuje się chronologicznie.
- UUID to identyfikator, nie sekret. W praktyce jest nie do odgadnięcia, ale traktowanie go jak tokenu dostępu oznacza, że każdy, kto zobaczy go w adresie, logu albo nagłówku referer, ma klucz.
- Przechowuj je jako 16 bajtów binarnych albo w natywnej kolumnie uuid, nie jako 36-znakowy tekst. Postać tekstowa ponad dwukrotnie zwiększa zajętość i spowalnia każde porównanie.
- Wielkość liter nie ma znaczenia, a myślniki to formatowanie. Porównuj kanonicznie, inaczej dostaniesz fałszywe niezgodności między systemami.
Częste pytania
- Jakie są realne szanse na kolizję?
- Przy 122 losowych bitach generowanie miliarda UUID-ów na sekundę przez sto lat pozostawia prawdopodobieństwo jakiejkolwiek kolizji na poziomie pomijalnym. W praktyce każdy zgłoszony duplikat okazuje się generatorem z ustalonym ziarnem albo ponownie użytą wartością, a nie prawdziwą kolizją.
- v4 czy v7 na klucze bazodanowe?
- v7 wszędzie tam, gdzie wstawiasz masowo, bo sortuje się po czasie utworzenia i utrzymuje sekwencyjne zapisy do indeksu. v4 zostaje właściwym wyborem, gdy świadomie nie chcesz, by identyfikator zdradzał moment powstania.