Kategoria: Programistyczne

Generator UUID

Generuj kryptograficznie losowe identyfikatory UUID w wersji 4.

Działa w przeglądarcePrzetwarzanie lokalne. Dane wejściowe nie opuszczają Twojego urządzenia.

5
Format

Szczegóły

O tym narzędziu

Generuje identyfikatory UUID w wersji 4 hurtowo, z kryptograficznego źródła losowości wbudowanego w przeglądarkę. Wybierasz, ile ich ma być, czy zostawić myślniki i czy zapisać je wielkimi literami.

UUID to 128-bitowy identyfikator zapisany jako 32 znaki szesnastkowe w pięciu grupach rozdzielonych myślnikami. Wersja 4 znaczy, że jest w zasadzie cały losowy: 122 z tych bitów pochodzą ze źródła losowości, a pozostałe sześć oznacza wersję i wariant - dlatego trzynasty znak to zawsze 4, a siedemnasty zawsze 8, 9, a albo b. Te dwie stałe pozycje to szybki sposób na rozpoznanie, z jakim UUID-em ma się do czynienia.

Sens UUID-a polega na tym, że można go utworzyć gdziekolwiek i przez kogokolwiek, bez pytania centralnej instancji, czy wartość jest zajęta - a tego autoinkrementowana kolumna w bazie nie potrafi. To czyni go naturalnym kluczem dla rekordów tworzonych offline, scalanych z kilku systemów albo generowanych przez klienta, zanim serwer w ogóle o nich usłyszał. Przy okazji identyfikator nic nie zdradza o liczbie rekordów, w przeciwieństwie do numeru po kolei, który każdemu odwiedzającemu mówi, ilu masz klientów.

Kolizji nie trzeba planować. Przy 122 losowych bitach trzeba by generować miliardy UUID-ów na sekundę przez stulecie, zanim duplikat stałby się prawdopodobny. Znacznie bardziej liczy się jakość losowości i dlatego wartości pochodzą z crypto.getRandomValues, a nie z Math.random - ta druga jest przewidywalna i nie ma czego szukać przy generowaniu identyfikatorów. Nic nie jest pobierane z serwera, więc wygenerowane wartości należą tylko do Ciebie.

Wypróbuj też

  • Zamieniaj znaczniki czasu Unix na daty i odwrotnie.

    Działa w przeglądarceProgramistyczne
  • Formatuj C# silnikiem zgodnym z CSharpierem i opartym na Roslynie.

    Działa w przeglądarceProgramistyczne

Warto wiedzieć

Najczęstsze pytania

Czy te UUID-y są naprawdę losowe?
Tak. Pochodzą z crypto.getRandomValues, czyli kryptograficznego źródła losowości przeglądarki, a nie z Math.random. To rozróżnienie ma znaczenie: Math.random jest szybki, przewidywalny i w zupełności wystarcza do przetasowania listy, ale atakujący, który zobaczy kilka jego wyników, wyliczy resztę - a to byłby realny problem dla tokenu albo identyfikatora sesji.
Co czyni z tego UUID w wersji 4?
Bity wersji i wariantu. W UUID v4 trzynasty znak szesnastkowy to zawsze 4, a siedemnasty zawsze 8, 9, a albo b; pozostałe 122 bity są losowe. UUID w wersji 1 buduje się ze znacznika czasu i adresu MAC, a nowsza wersja 7 sortuje się chronologicznie, co lubią bazy danych.
Czy dwa UUID-y mogą wyjść takie same?
W teorii tak, w praktyce nigdy. Przy 122 losowych bitach trzeba by generować miliardy na sekundę przez jakieś stulecie, zanim duplikat stałby się prawdopodobny. Realnym ryzykiem nie jest matematyka, tylko słabe źródło losowości - i tego właśnie unika się, sięgając po źródło kryptograficzne.
Czy używać UUID jako klucza głównego w bazie?
To zależy od bazy. UUID-y są idealne, gdy rekordy powstają w kilku miejscach naraz albo offline, bo nie trzeba niczego uzgadniać. Kosztem jest to, że losowe wartości rozrzucają zapisy po całym indeksie B-drzewa, co przy dużej tabeli psuje wydajność wstawiania i rozdyma indeks - odczuwają to i PostgreSQL, i MySQL. Jeśli to problem, UUIDv7 zachowuje niezależność, a przy tym sortuje się po czasie.