Generator ULID
Generuj unikalne, leksykograficznie sortowalne identyfikatory ULID (Crockford Base32) online. Wybierz format, liczbę i pobierz gotową listę.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
01M5BVMBEJS7P3FJWM4GAQXEW1 01M5BVMBEJRNJEP33GXYSRHPBG 01M5BVMBEJRKR4BAA7ZAE4S4WC 01M5BVMBEJHDM6C931042HH3XK 01M5BVMBEJMEMDS19KW2GM9QVE 01M5BVMBEJ12TKCT39F047Q17S 01M5BVMBEJ8SY8QVXQKQ35VVRJ 01M5BVMBEJF9FP41R5HMRT2GCP 01M5BVMBEJN9G6AMP1NG0E2HHQ 01M5BVMBEJJZ2F837WAKST5CH6
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator ULID
Generator ULID (Universally Unique Lexicographically Sortable Identifier) tworzy unikalne, leksykograficznie sortowalne identyfikatory w formacie 26-znakowego kodu Crockford Base32. Idealne dla systemów rozproszonych, baz danych i API wymagających globalnej unikalności bez koordynacji.
Do czego służy ULID?
ULID to nowoczesna alternatywa dla UUID, zaprojektowana z myślą o wydajności baz danych. Pierwsze 10 znaków koduje znacznik czasu z dokładnością do milisekund, dzięki czemu identyfikatory są sortowalne chronologicznie — w przeciwieństwie do losowych UUID v4. Sprawdza się w systemach mikrousług, kolejkach zdarzeń (event sourcing), logowaniu rozproszonym oraz wszędzie tam, gdzie zależy na zachowaniu kolejności bez centralnego generatora sekwencji. Generator obsługuje format prosty (26 znaków, np. 01ARZ3NDEKTSV4RRFFQ69G5FAV) oraz grupowany (4-4-4-4-4-6, np. 01AR-Z3ND-EKTS-V4RR-FFQ6-9G5FAV) dla łatwiejszej czytelności. Opcja tekstu inicjującego pozwala domieszkować własną entropię do generatora losowości.
Jak używać generatora?
Ustaw liczbę identyfikatorów do wygenerowania (1–1000), wybierz format wyświetlania (prosty lub grupowany) i opcjonalnie włącz małe litery. Możesz wpisać tekst inicjujący — np. nazwę projektu lub ID zadania — który zostanie domieszkowany do losowości, co przydaje się przy dokumentowaniu lub debugowaniu. Kliknij „Generuj", a w prawym panelu pojawią się klikalne chipy — każdy klik kopiuje dany ULID do schowka. Przycisk „Kopiuj wszystkie" skopiuje całą listę, a „Pobierz .txt" pozwoli zapisać ją jako plik tekstowy.
Jak działa generator ULID — mechanizm i podział bitów
ULID to 128-bitowy identyfikator zapisany jako 26 znaków alfabetu Crockford Base32. Każdy znak tego alfabetu niesie 5 bitów informacji, więc 26 znaków odpowiada 130 bitom — dwa nadmiarowe bity nie są wykorzystywane, dlatego pierwszy znak identyfikatora przyjmuje wyłącznie wartości od 0 do 7. Cała wartość dzieli się na dwie części: pierwsze 10 znaków koduje znacznik czasu z dokładnością do milisekundy, a pozostałe 16 znaków to entropia losowa. Podział wynika z prostej arytmetyki: 10 znaków × 5 bitów daje 50 bitów, z których na czas przeznaczono 48 bitów, natomiast 16 znaków × 5 bitów to dokładnie 80 bitów losowości. Razem 48 + 80 = 128 bitów.
Znacznik czasu zapisywany jest w kolejności od najbardziej znaczącego bitu, a kodowanie Crockford Base32 również zachowuje porządek wartości. Dzięki temu porównanie dwóch ULID-ów jako zwykłych ciągów znaków daje ten sam wynik co porównanie ich znaczników czasu — sortowanie leksykograficzne jest jednocześnie sortowaniem chronologicznym. To właśnie odróżnia ULID od w pełni losowego UUID v4, którego kolejność wierszy po sortowaniu nie mówi nic o czasie powstania. W obrębie tej samej milisecondy o kolejności decyduje wyłącznie część losowa, więc identyfikatory wygenerowane w tym samym milisekundzie nie muszą być uporządkowane rosnąco.
Generator losuje 80 bitów entropii z lokalnego generatora liczb pseudolosowych, a wpisany tekst inicjujący jest do niego domieszkowany przed wygenerowaniem partii. Seed wpływa zatem na część losową, a nigdy na znacznik czasu — dwa identyfikatory utworzone z tym samym tekstem inicjującym w różnych milisekundach nadal różnią się prefiksem. Alfabet Crockford Base32 pomija litery I, L, O oraz U, co ogranicza pomyłki przy przepisywaniu i odczycie (I mylone z 1, O z 0).
Przykład krok po kroku: trzy identyfikatory dla kolejki zdarzeń
- W polu tekstu inicjującego wpisz nazwę projektu lub strumienia zdarzeń, na przykład event-sourcing. Ten tekst zostanie domieszany do generatora losowości i pomoże później rozpoznać, z jakiej partii pochodzi dany identyfikator.
- Ustaw liczbę identyfikatorów na 3 — narzędzie przyjmuje wartości od 1 do 1000, więc trzy pozycje mieszczą się w zakresie bez problemu.
- Wybierz format grupowany. Zamiast ciągu 26 znaków otrzymasz zapis w układzie 4-4-4-4-4-6, czyli postać czytelniejszą wzrokowo, na przykład 01ARZ-Z3ND-EKTS-V4RR-FFQ6-9G5FAV.
- Kliknij przycisk Generuj. W prawym panelu pojawią się trzy klikalne chipy, każdy z osobnym ULID-em o długości 26 znaków.
- Kliknij pierwszy chip, aby skopiować jego wartość do schowka i wkleić ją jako identyfikator zdarzenia w kodzie lub w rekordzie bazy danych.
- Jeśli potrzebujesz całej partii naraz, użyj przycisku Kopiuj wszystkie albo Pobierz .txt, żeby zapisać trzy wygenerowane identyfikatory jako plik tekstowy.
Parametry i budowa identyfikatora ULID
| Element | Wartość | Znaczenie |
|---|---|---|
| Długość identyfikatora | 26 znaków | Stała długość niezależnie od czasu powstania |
| Format prosty | 26 znaków, np. 01ARZ3NDEKTSV4RRFFQ69G5FAV | Zwarty zapis do kodu i bazy danych |
| Format grupowany | 4-4-4-4-4-6, np. 01ARZ-Z3ND-EKTS-V4RR-FFQ6-9G5FAV | Łatwiejszy odczyt i przepisywanie ręczne |
| Część czasu | 10 pierwszych znaków | 48 bitów znacznika czasu w milisekundach |
| Część losowa | 16 ostatnich znaków | 80 bitów entropii zapewniających unikalność |
| Alfabet | Crockford Base32, 32 znaki | Bez liter I, L, O i U, aby uniknąć pomyłek |
| Liczba identyfikatorów | 1 do 1000 | Zakres obsługiwany przez generator |
| Wielkość liter | duże lub małe | Przełącznik wyświetlania, nie zmienia wartości |
Praktyczne wskazówki użycia generatora ULID
- Trzymaj jeden format w całym projekcie. Zapis prosty i grupowany opisują tę samą wartość, ale mieszanie ich w bazie i w logach utrudnia porównywanie oraz sortowanie ciągów znaków — wybierz jeden wariant i stosuj go konsekwentnie.
- Nie zmieniaj wielkości liter w istniejących danych. Konwersja na małe litery to wyłącznie opcja wyświetlania; jeśli raz zapiszesz identyfikator małymi, a raz dużymi literami, porównania tekstowe przestaną działać zgodnie z oczekiwaniem.
- Używaj tekstu inicjującego jako etykiety partii. Nazwa projektu, środowiska albo importu pozwala odtworzyć pochodzenie identyfikatorów przy debugowaniu — o ile użyjesz tego samego seeda w powtarzalnym procesie testowym.
- Generuj partie pod potrzeby testów. Do wypełnienia tabeli testowej wygodnie jest wygenerować kilkaset identyfikatorów naraz i pobrać je jako plik .txt zamiast kopiować pojedyncze chipy.
- Pamiętaj o kolejności w obrębie milisekundy. Jeśli zależy Ci na ścisłej monotoniczności zdarzeń powstających w tej samej milisekundzie, sortowanie po ULID tego nie gwarantuje — potrzebna jest dodatkowa kolumna z numerem sekwencji.
Ograniczenia i czynniki zaburzające wynik
- Losowość zależy od przeglądarki. Generator korzysta z mechanizmu losowego dostępnego w środowisku uruchomienia strony; przy słabym źródle entropii część losowa może być mniej przewidywalna, niż sugeruje liczba 80 bitów.
- Brak gwarancji monotoniczności. ULID nie zawiera licznika sekwencji, więc dwa identyfikatory z tej samej milisekundy mogą wystąpić w kolejności odwrotnej niż ich utworzenie.
- Tekst inicjujący nie jest kluczem kryptograficznym. Domieszanie seeda nie czyni identyfikatora tajnym ani podpisanym — to wyłącznie dodatkowa zmienność przy generowaniu partii.
- Czas pochodzi z zegara urządzenia. Przesunięcie zegara systemowego lub praca na maszynach z różnymi strefami i błędnym czasem wpływa na prefiks, a więc na późniejsze sortowanie chronologiczne.
Najczęstsze pytania
Czym ULID różni się od UUID?
UUID v4 jest całkowicie losowy i nie zachowuje żadnej kolejności czasowej, co utrudnia sortowanie i indeksowanie w bazach danych. ULID koduje znacznik czasu (48 bitów) w pierwszych 10 znakach, więc identyfikatory generowane sekwencyjnie są leksykograficznie posortowane chronologicznie. Ponadto ULID używa alfabetu Crockford Base32 (bez liter I, L, O, U), co eliminuje niejednoznaczności przy ręcznym przepisywaniu.
Czy wygenerowane ULIDy są naprawdę unikalne?
Tak. Każdy ULID łączy 48-bitowy znacznik czasu (ms od epoki Unix) z 80-bitową losowością, co daje przestrzeń 2^80 ≈ 1,2 × 10^24 kombinacji w tej samej milisekundzie. Prawdopodobieństwo kolizji jest znikome nawet przy masowym generowaniu. Opcjonalny tekst inicjujący jest domieszkowany do losowej części, nie wpływa negatywnie na unikalność.
Do czego służy pole „Tekst inicjujący"?
To opcjonalne pole pozwala dodać własną entropię do generatora. Wpisany tekst jest mieszany (XOR) z losowymi bajtami przy użyciu SHA-256. Jest to przydatne np. przy dokumentowaniu zestawów testowych (każdy zestaw ma swój seed = powtarzalny wzorzec) lub przy debugowaniu. Nie jest wymagane do normalnego użytkowania.
Czy mogę użyć ULIDów jako kluczy głównych w bazie danych?
Tak, to jedna z głównych zalet ULID. Posortowane identyfikatory zmniejszają fragmentację B-tree indeksów (szczególnie w MySQL/PostgreSQL z klastrowanymi indeksami), co przekłada się na szybsze wstawianie i mniejsze przepisywanie stron danych. Format 26-znakowy (text/varchar) jest wystarczająco kompaktowy i czytelny dla człowieka.
Ile bitów ma ULID i jak przekłada się to na 26 znaków?
ULID ma 128 bitów: 48 bitów znacznika czasu i 80 bitów losowości. Zapis to 26 znaków Crockford Base32, gdzie każdy znak niesie 5 bitów, co daje 130 bitów — dwa nadmiarowe bity pozostają niewykorzystane.
Czy ULID nadaje się na klucz główny w bazie danych?
Tak, jest projektowany właśnie pod ten scenariusz. Ponieważ prefiks rośnie wraz z czasem, nowe rekordy trafiają na koniec indeksu, co ogranicza losowe rozrzucanie zapisów typowe dla UUID v4.
Czy można posortować ULID jako zwykły tekst?
Tak. Kodowanie Crockford Base32 zachowuje porządek wartości, dlatego sortowanie leksykograficzne ciągu znaków odpowiada sortowaniu po znaczniku czasu. Wyjątkiem są identyfikatory z tej samej milisekundy, których kolejności rozstrzyga część losowa.
Do czego służy tekst inicjujący w generatorze?
To dodatkowa wartość domieszana do generatora losowości przed utworzeniem partii identyfikatorów. Przydaje się do oznaczania partii przy testach i debugowaniu, ale nie zmienia sposobu kodowania znacznika czasu.
Dlaczego ULID nie zawiera liter I, L, O i U?
Alfabet Crockford Base32 celowo pomija te znaki, ponieważ litera I bywa mylona z cyfrą 1, a O z zerem. Ułatwia to ręczne przepisywanie identyfikatorów i zmniejsza liczbę błędów przy odczycie z logów.