Darmowy generator ULID — twórz i dekoduj ULID
Twórz, dekoduj i konwertuj ULID online — za darmo i w 100% w przeglądarce. Wyodrębnij osadzony timestamp z dowolnego ULID, konwertuj ULID na UUID i z powrotem, generuj wsadowo, z trybem monotonicznym. Nic nie trafia na serwer.
Każdy ULID używa świeżej 80-bitowej losowości.
ULID i UUID mają oba po 128 bitów, więc konwersja jest bezstratna i odwracalna. Potrzebujesz klasycznych UUID? Wypróbuj generator UUID.
Czym jest ULID?
ULID — Universally Unique Lexicographically Sortable Identifier — to 128-bitowy identyfikator stworzony, aby naprawić praktyczną słabość losowego UUIDv4, zachowując jego najlepszą cechę: możesz wygenerować go gdziekolwiek, bez centralnego koordynatora, i mieć pewność, że jest unikalny. Różnica polega na tym, że ULID jest sortowalny według czasu. Jest renderowany jako 26 znaków Crockford Base32, podzielonych na dwie części: pierwszych 10 znaków to 48-bitowy timestamp liczący milisekundy od epoki Unix, a ostatnich 16 znaków to 80 bitów kryptograficznie bezpiecznej losowości. Umieść czas na początku, zakoduj go w alfabecie zachowującym porządek, a identyfikator posortuje się chronologicznie jako zwykły ciąg.
Ten jeden wybór projektowy ma ponadprzeciętne konsekwencje dla baz danych. Losowy klucz główny UUIDv4 ląduje przy każdym wstawieniu w nieprzewidywalnym miejscu indeksu B-tree, co fragmentuje indeks, obciąża cache i powoli pogarsza wydajność zapisów w miarę rośnięcia tabeli. ULID, ponieważ ma prefiks czasowy, ląduje za każdym razem na końcu indeksu lub blisko niego — wstawienia pozostają sekwencyjne, indeks pozostaje zwarty, a skany zakresowe po oknie czasowym stają się tanie. Otrzymujesz bezkoordynacyjne generowanie UUID i lokalność wstawień liczby auto-increment, bez ujawniania możliwego do odgadnięcia sekwencyjnego licznika.
Szczegóły kodowania są zamierzone. Crockford Base32 wyklucza litery I, L, O oraz U, zarówno aby uniknąć wizualnej pomyłki z cyframi 1 i 0, jak i aby uczynić ciąg niewrażliwym na wielkość liter na wejściu. Wynikiem jest 26 znaków bez myślników, które bezpiecznie można umieścić w adresie URL, nazwie pliku lub nagłówku żądania bez escapowania — zauważalnie krótszych niż 36-znakowa postać UUID z myślnikami. 48-bitowy timestamp nie wyczerpie się przez długi czas: może reprezentować daty aż do roku 10889, zanim licznik milisekund się przepełni.
ULID nie są właściwym narzędziem do wszystkiego. Osadzony timestamp ujawnia, kiedy rekord został utworzony, co jest zaletą do debugowania i porządkowania, ale drobnym wyciekiem informacji, jeśli wolisz tego nie ujawniać. A jeśli Twój stos jest związany z typem UUID, możesz preferować UUIDv7, który stosuje tę samą ideę prefiksu czasowego wewnątrz standardowego formatu UUID. Ale gdy chcesz krótkich, bezpiecznych dla adresów URL, sortowalnych identyfikatorów, które możesz wybijać na dowolnym węźle i odczytywać z nich timestamp, ULID jest doskonałym wyborem domyślnym — a ponieważ to tylko 128 bitów, zawsze możesz skonwertować go na UUID i z powrotem za pomocą zakładki Konwertuj tego narzędzia.
// Browser / Node with the `ulid` package
import { ulid, decodeTime } from 'ulid';
const id = ulid(); // e.g. 01KVT0F720ZK9N4T2QX7VR8WMC
const ts = decodeTime(id); // 1782210600000 -> 2026-06-23T10:30:00.000Z
// Monotonic factory: strictly increasing within the same millisecond
import { monotonicFactory } from 'ulid';
const next = monotonicFactory();
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WMC
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WMD
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WME Najważniejsze funkcje
Generowanie, dekodowanie i konwersja na jednej stronie
Trzy zakładki obejmują cały przepływ pracy z ULID: wybijaj nowe ULID, dekoduj istniejący, aby odczytać jego timestamp, i konwertuj bezstratnie między ULID a UUID. Większość konkurencyjnych narzędzi robi tylko to pierwsze; tutaj pełna pętla mieści się na jednej stronie.
Dekoder timestampu
Wklej dowolny ULID i odczytaj dokładną milisekundę jego utworzenia — pokazaną w UTC, w Twoim czasie lokalnym oraz jako surowe milisekundy Uniksa — plus 80-bitowy segment losowości. Audytuj czas utworzenia identyfikatora bez żadnego zapytania do bazy danych.
Bezstratna konwersja ULID ↔ UUID
ULID i UUID mają oba po 128 bitów, więc konwersja jest dokładna i odwracalna. Zakładka Konwertuj automatycznie wykrywa, który format wkleiłeś, i produkuje drugi, pozwalając pomostować sortowalny ULID z kolumną lub API typowanym na UUID bez utraty jednego bitu.
Tryb monotoniczny
Potrzebujesz ścisłego porządku nawet dla identyfikatorów utworzonych w tej samej milisekundzie? Tryb monotoniczny zwiększa losowość tak, by każdy ULID był gwarantowanie większy od poprzedniego, utrzymując ciasną pętlę wstawień idealnie posortowaną.
Generowanie wsadowe
Utwórz do 50 ULID naraz i skopiuj cały zestaw przyciskiem Kopiuj wszystko. Idealne do zasilania fixtur testowych, wstawień masowych lub wypełniania tabeli wyszukiwań bez klikania pięćdziesiąt razy.
Własny timestamp
Osadź konkretną chwilę zamiast teraźniejszości — przydatne dla deterministycznych danych testowych lub do antydatowania rekordów podczas migracji przy zachowaniu właściwości sortowalności.
Kryptograficznie bezpieczna losowość
80 losowych bitów pochodzi z crypto.getRandomValues, CSPRNG przeglądarki — nigdy Math.random — więc każdy ULID jest nieprzewidywalny, a kolizje w tej samej milisekundzie są znikomo nieprawdopodobne.
W 100% prywatne, tylko w przeglądarce
Każdy ULID jest generowany, dekodowany i konwertowany w całości na Twoim urządzeniu. Żadnych żądań sieciowych, logowania ani przechowywania — sprawdź to sam w narzędziach deweloperskich → Sieć. Identyfikatory nigdy nie trafiają do strony trzeciej.
Przykłady ULID
Wygeneruj pojedynczy ULID
Tryb: standardowy · Ilość: 1
01KVT0F720ZK9N4T2QX7VR8WMC
ULID to 26 znaków kodowania Crockford Base32. Pierwszych 10 znaków koduje 48-bitowy timestamp w milisekundach, a ostatnich 16 koduje 80 bitów kryptograficznie bezpiecznej losowości pobranej z crypto.getRandomValues. Ponieważ timestamp jest na początku, a Base32 zachowuje kolejność bajtów, ULID wygenerowane później zawsze sortują się po wcześniejszych jako zwykłe ciągi — bez osobnego indeksu. Kliknij Kopiuj, aby pobrać wartość; kliknij Generuj ponownie, aby uzyskać świeży ULID.
Zdekoduj ULID, aby odczytać jego timestamp
01ARYZ6S41TSV4RRFFQ69G5FAV
Timestamp (UTC): 2016-07-30T22:36:16.385Z · Losowość: TSV4RRFFQ69G5FAV
Dekodowanie odwraca pierwszych 10 znaków z powrotem do 48-bitowej wartości w milisekundach osadzonej w chwili utworzenia — tutaj 1469918176385 ms, czyli 2016-07-30T22:36:16.385Z. To kanoniczny przykład ze specyfikacji ULID. Zakładka Dekoduj pokazuje timestamp w UTC i w Twoim czasie lokalnym, surowe milisekundy Uniksa oraz 80-bitowy segment losowości, więc możesz dokładnie sprawdzić, kiedy identyfikator został utworzony, bez żadnego zapytania do bazy danych.
Konwertuj ULID na UUID
01KVT0F720ZK9N4T2QX7VR8WMC
019ef407-9c40-fcd3-5268-57e9f784728c
ULID i UUID mają dokładnie po 128 bitów, więc konwersja jest bezstratna i w pełni odwracalna — te same bity są po prostu ponownie kodowane z Crockford Base32 na szesnastkowy zapis z myślnikami. Zakładka Konwertuj automatycznie wykrywa, czy wkleiłeś ULID, czy UUID, i konwertuje na drugą postać. Pozwala to przechować ULID w kolumnie UUID lub przekazać ULID systemowi, który rozumie tylko UUID, a potem skonwertować z powrotem, gdy znów potrzebujesz sortowalnego ciągu.
Generuj wsadowo monotoniczne ULID
Tryb: monotoniczny · Ilość: 3 (ta sama milisekunda)
01KVT0F720ZK9N4T2QX7VR8WMC 01KVT0F720ZK9N4T2QX7VR8WMD 01KVT0F720ZK9N4T2QX7VR8WME
Gdy wiele identyfikatorów powstaje w tej samej milisekundzie, zwykłe ULID mają wspólny 10-znakowy prefiks czasowy, ale ich losowe końcówki są nieuporządkowane. Tryb monotoniczny to naprawia: w obrębie jednej milisekundy zwiększa poprzednią losowość o jeden, więc każdy ULID jest ściśle większy od poprzedniego, a partia pozostaje idealnie posortowana. Zwróć uwagę, że trzy wartości różnią się tylko ostatnim znakiem (C, D, E) — idealne dla wstawień o dużej przepustowości, gdzie porządek musi się utrzymać nawet przy częstotliwości poniżej milisekundy.
Wygeneruj ULID dla konkretnej daty
Czas własny: 2026-06-23 10:30:00 UTC
01KVT0F720… (komponent czasu 01KVT0F720)
Ustaw własny timestamp, a generator osadzi dokładnie tę chwilę zamiast teraźniejszości, wciąż wypełniając losowość z bezpiecznego RNG. 10-znakowy komponent czasu dla 2026-06-23T10:30:00.000Z to 01KVT0F720. Przydaje się to do zasilania fixtur testowych deterministycznymi, uporządkowanymi czasowo identyfikatorami lub do antydatowania rekordów podczas migracji przy zachowaniu właściwości sortowalności.
Jak używać generatora ULID
- 1
Wybierz tryb generowania
Tryb standardowy nadaje każdemu ULID świeżą 80-bitową losowość. Tryb monotoniczny gwarantuje, że ULID utworzone w tej samej milisekundzie są ściśle rosnące — wybierz go do wstawień o dużej przepustowości, gdzie porządek musi się utrzymać nawet przy częstotliwości poniżej milisekundy.
- 2
Ustaw ilość, wielkość liter i (opcjonalnie) własny czas
Wygeneruj od 1 do 50 ULID naraz. Wyjście domyślnie jest WIELKIMI LITERAMI — kanoniczna postać ULID — lub przełącz na małe litery. Pozostaw czas pusty, aby ostemplować teraźniejszość, lub ustaw własny timestamp, aby osadzić konkretną chwilę dla fixtur lub antydatowanych rekordów.
- 3
Wygeneruj i skopiuj
Kliknij Wygeneruj ULID. Użyj Kopiuj przy dowolnej pojedynczej wartości lub Kopiuj wszystko, aby pobrać całą partię jako tekst rozdzielany znakami nowej linii, gotowy do wklejenia do kodu, pliku z danymi początkowymi lub arkusza kalkulacyjnego.
- 4
Zdekoduj ULID, aby odczytać jego timestamp
W zakładce Dekoduj wklej dowolny ULID, aby wyodrębnić 48-bitowy timestamp utworzenia w UTC i czasie lokalnym, surowe milisekundy Uniksa oraz 80-bitową losowość — w całości w Twojej przeglądarce, bez potrzeby żadnego zapytania.
- 5
Konwertuj między ULID a UUID
W zakładce ULID ↔ UUID wklej ULID lub UUID; narzędzie automatycznie wykrywa wejście i bezstratnie konwertuje na drugi format. Przechowuj ULID w kolumnach UUID lub przekaż ULID systemowi obsługującemu tylko UUID i skonwertuj z powrotem, gdy potrzebujesz sortowalnego ciągu.
Common Errors
Traktowanie ULID z tej samej milisekundy jako uporządkowanych
Zwykłe ULID utworzone w jednej milisekundzie mają wspólny prefiks czasowy, ale nieuporządkowane losowe końcówki, więc ich wzajemny porządek jest niezdefiniowany. Jeśli zależysz od ścisłego porządku przy tej częstotliwości, użyj zamiast tego trybu monotonicznego.
Tryb standardowy, 3 identyfikatory w jednej ms → porządek w obrębie ms jest losowy
Tryb monotoniczny, 3 identyfikatory w jednej ms → …WMC < …WMD < …WME
Oczekiwanie, że skonwertowany ULID będzie prawidłowym UUIDv4
Konwersja ULID na postać UUID ponownie koduje te same 128 bitów; nie ustawia pól wersji i wariantu UUID. Wynik jest prawidłowym 128-bitowym ciągiem UUID, ale nie zgłosi się jako wersja 4 lub 7, jeśli biblioteka zbada te bity.
uuid.version(ulidToUuid(id)) → nie 4 (bity należą do ULID)
Traktuj go jako nieprzejrzystą 128-bitową wartość albo wygeneruj zamiast tego prawdziwy UUIDv7
Ręczne wpisywanie małych i, l, o w ULID
Crockford Base32 wyklucza I, L, O oraz U. Dekodery odwzorowują I i L na 1, a O na 0, ale ręczne wpisywanie tych liter w ULID jest podatne na błędy. Kopiuj ULID zamiast przepisywać je ręcznie.
01ARYZ6S41TSV4RRFFQ69G5FAO → niejednoznaczne O
01ARYZ6S41TSV4RRFFQ69G5FAV → tylko kanoniczne znaki
Do czego służą ULID
- Klucze główne bazy danych, które pozostają posortowane
- Używaj ULID jako kluczy głównych, aby uzyskać bezkoordynacyjne generowanie UUID z lokalnością wstawień liczby auto-increment. Ponieważ mają prefiks czasowy, nowe wiersze dołączają blisko końca indeksu B-tree zamiast rozpraszać się jak UUIDv4, utrzymując szybkie wstawienia i zwarty indeks w miarę rośnięcia tabeli.
- Systemy rozproszone bez centralnej sekwencji
- Generuj identyfikatory na dowolnym węźle — usłudze, edge workerze lub kliencie — bez współdzielonego licznika i bez koordynacji kolizji, a wciąż sortuj wszystko według czasu utworzenia po fakcie. ULID dają mikrousługom unikalny, uporządkowany klucz bez okrężnej drogi do bazy danych w celu jego przydzielenia.
- Logi zdarzeń i identyfikatory komunikatów
- Stempluj zdarzenia, wiersze logów lub komunikaty kolejki monotonicznymi ULID, aby pozostawały w ścisłym porządku chronologicznym nawet wtedy, gdy wiele z nich powstaje w tej samej milisekundzie. Skanowanie zakresu okna czasowego staje się prostym porównaniem ciągów.
- Bezpieczne dla adresów URL identyfikatory publiczne
- ULID to 26 znaków bez myślników i z bezpiecznym dla adresów URL alfabetem, więc trafia do ścieżki, nazwy pliku lub nagłówka bez escapowania i jest krótszy niż 36-znakowy UUID. Zdekoduj osadzony timestamp później, aby zobaczyć, kiedy zasób został utworzony.
- Pomost do systemu obsługującego tylko UUID
- Pracujesz z kolumną bazy danych lub API, które akceptuje tylko UUID? Generuj sortowalne ULID, konwertuj je na postać UUID do przechowywania lub transportu i konwertuj z powrotem, gdy potrzebujesz zwięzłego sortowalnego ciągu — 128-bitowa wartość jest zachowana dokładnie w obu kierunkach.
- Deterministyczne fixtury testowe
- Zasilaj testy ULID-ami o wybranych timestampach za pomocą opcji własnego czasu, tak aby fixtury były powtarzalne i już uporządkowane czasowo. Dekoduj je w asercjach, aby zweryfikować czas utworzenia, który zarejestrował Twój kod.
Jak działają ULID
- Układ 128-bitowy: 48 bitów czasu + 80 bitów losowości
- ULID ma dokładnie 128 bitów. Wyższe 48 bitów to timestamp Unix w milisekundach; niższe 80 bitów jest losowe. Zakodowane w Crockford Base32 po 5 bitów na znak, daje to 10 znaków na czas i 16 na losowość — łącznie 26 znaków. Wiodący znak jest zawsze równy 7 lub mniejszy, ponieważ 48 bitów nie wypełnia górnej 5-bitowej grupy.
- Kodowanie Crockford Base32
- ULID używają alfabetu Crockford Base32 (0–9 oraz A–Z z wyłączeniem I, L, O i U). Odrzucenie tych czterech liter pozwala uniknąć pomyłki z cyframi 1 i 0 oraz pozwala dekoderom traktować ciąg z pominięciem wielkości liter, odwzorowując na wejściu I i L na 1, a O na 0. Alfabet jest uporządkowany, co sprawia, że zakodowany ciąg sortuje się tak samo jak bazowe bity.
- Sortowalność leksykograficzna
- Ponieważ timestamp jest najbardziej znaczącym komponentem, a alfabet Base32 zachowuje porządek, porównywanie dwóch ULID jako ciągów daje ten sam wynik co porównywanie ich 128-bitowych wartości, co daje ten sam wynik co porównywanie ich czasów utworzenia. To właśnie pozwala zwykłemu ORDER BY lub sortowaniu tablicy uzyskać porządek chronologiczny bez dodatkowego indeksu.
- Monotoniczność w obrębie milisekundy
- Opcja monotoniczna specyfikacji ULID utrzymuje stabilny porządek dla identyfikatorów wybitych w tej samej milisekundzie: losowość pierwszego identyfikatora w milisekundzie jest generowana normalnie, a każdy późniejszy identyfikator w tej milisekundzie to poprzednia losowa wartość plus jeden. To narzędzie realizuje to przez zwiększanie 80-bitowej losowości jako liczby całkowitej big-endian.
- Bezpieczna losowość przez crypto.getRandomValues
- 80 losowych bitów jest wypełnianych z crypto.getRandomValues, CSPRNG Web Crypto, a nie z Math.random. Przy 80 bitach entropii wygenerowanie nawet milionów ULID w tej samej milisekundzie utrzymuje znikomo małe prawdopodobieństwo kolizji.
- ULID ↔ UUID to czyste ponowne kodowanie
- Konwersja między ULID a UUID nie zmienia żadnych bitów — ponownie koduje te same 128 bitów z Crockford Base32 na szesnastkowy zapis z myślnikami lub z powrotem. W rezultacie cykl jest dokładny: ULID skonwertowany na UUID i z powrotem jest identyczny co do bajtu z oryginałem. Zwróć uwagę, że bajty ULID nie ustawiają pól wersji i wariantu UUID, więc wynikowy UUID jest prawidłową 128-bitową wartością, ale nie jest oznaczonym wersją UUIDv4 ani v7.
Dobre praktyki dla ULID
- Używaj trybu monotonicznego do wstawień o dużej przepustowości
- Jeśli Twój system potrafi tworzyć więcej niż jeden identyfikator na milisekundę, a polegasz na porządku, generuj monotoniczne ULID. Zwykłe ULID są nieuporządkowane w obrębie milisekundy; monotoniczne są ściśle rosnące, więc partia pozostaje posortowana niezależnie od tego, jak szybko je wybijasz.
- Przechowuj ULID zwięźle
- ULID ma 128 bitów — przechowuj go jako 16 binarnych bajtów lub kolumnę typowaną na UUID, a nie jako 26-znakowe pole tekstowe, gdy liczy się miejsce i rozmiar indeksu. Konwertuj na ciąg Base32 tylko na obrzeżach, gdzie widzą go ludzie lub adresy URL. Zakładka Konwertuj tego narzędzia daje Ci postać UUID do przechowywania.
- Pamiętaj, że timestamp jest widoczny
- ULID ujawnia czas swojego utworzenia każdemu, kto potrafi go odczytać. To świetne do debugowania i porządkowania, ale jeśli ujawnianie czasu utworzenia jest problemem — powiedzmy, w identyfikatorze publicznym — rozważ ten wyciek lub użyj w pełni losowego UUIDv4 tam, gdzie porządek nie ma znaczenia.
- Zawsze generuj za pomocą CSPRNG
- Gwarancja unikalności zależy od tego, że 80 losowych bitów jest nieprzewidywalne. Używaj kryptograficznie bezpiecznego źródła, takiego jak crypto.getRandomValues, jak robi to narzędzie — nigdy Math.random, którego przewidywalność mogłaby pozwolić, by identyfikatory się zderzyły lub zostały odgadnięte.
- Świadomie wybieraj ULID albo UUIDv7
- Oba dają uporządkowane czasowo 128-bitowe identyfikatory. Wybierz ULID dla najkrótszego bezpiecznego dla adresów URL ciągu; wybierz UUIDv7, gdy musisz pozostać w standardowym formacie UUID z bitami wersji i wariantu. Standaryzuj się na jednym w danym systemie i używaj zakładki Konwertuj, gdy musisz przekroczyć granicę.
ULID — najczęściej zadawane pytania
Czym jest ULID?
ULID a UUID — którego użyć?
Czy ULID są sortowalne?
Jak zdekodować timestamp ULID?
Czym jest monotoniczny ULID?
Czy ten generator ULID jest bezpieczny i prywatny?
Jaka jest różnica między ULID a UUIDv7?
Powiązane narzędzia
Zobacz wszystkie narzędzia →Generator i weryfikator skrótów bcrypt
Narzędzia bezpieczeństwa
Generuj i weryfikuj skróty bcrypt haseł online — regulowany koszt, prefiksy $2b$/$2a$/$2y$. W 100% w przeglądarce; Twoje hasło nigdy nie jest wysyłane.
Dekoder JWT
Narzędzia bezpieczeństwa
Dekoduj JWT online darmowym dekoderem JWT. Sprawdź header, payload, signature, claims i wygaśnięcie. W 100% w przeglądarce — token nie opuszcza urządzenia.
Koder i generator JWT
Narzędzia bezpieczeństwa
Darmowy generator i koder JWT online. Zbuduj header i payload, podpisz HS256, RS256 lub ES256 natychmiast. W 100% w przeglądarce — sekret i klucz nie opuszczają urządzenia.
Darmowy generator sekretu JWT — HS256/384/512
Narzędzia bezpieczeństwa
Wygeneruj mocny, zgodny z RFC sekret JWT dla HS256/384/512 — w 100% w przeglądarce, nigdy nie wysyłany na serwer. base64url, base64 lub hex; kopiuj do .env.
Generator MD5 hash i sum kontrolnych plików
Narzędzia bezpieczeństwa
Generuj hashe MD5, SHA-256, SHA-1 oraz SHA-512 online za darmo. Hashuj tekst lub pliki w przeglądarce, weryfikuj sumy kontrolne i kopiuj wyniki. Bez rejestracji.
Generator haseł — konfigurowalny, silny i bezpieczny
Narzędzia bezpieczeństwa
Wygeneruj silne losowe hasła natychmiast — za darmo, w 100% w przeglądarce. Dostosuj długość i znaki, partia do 50 z analizą entropii.