Генератор на ULID

Генерирајте ULID вредности онлајн: ID со 26 карактери во Crockford Base32 формат, со 48-битно време и 80 случајни бита.

Формат
Генерирани ID
Подготвено. Генерирајте ULID вредности во Вашиот прелистувач.

Како е изграден овој ID

Распоред
26 Crockford Base32 карактери: 10 временски карактери проследени со 16 случајни карактери.
Ентропија
80 случајни бита по 48-битната временска ознака во милисекунди.
Време
Да. Првите 10 карактери ја кодираат временската ознака во милисекунди, а лексичкиот редослед го следи времето.
Ризик од колизија
Случајниот крај има 80 бита; ризикот главно зависи од тоа колку ID вредности создавате во иста милисекунда.
Пример
01M12BRQ3RYXHXZH3T6WF4KKFF

Вашите ID се генерираат локално со силна случајност во прелистувачот. Ништо не се испраќа до BroBroGo.

ЧПП

За што е добар ULID?

ULID е компактен, прилагоден за URL и може да се сортира хронолошки како обичен текст, што е корисно за логови, клучеви на објекти и записи кои треба да се сортираат според времето на создавање.

Дали ULID е исто што и UUID v7?

Не. И двата формати вклучуваат време во милисекунди, но ULID користи Crockford Base32 и 26 карактери, додека UUID v7 го задржува стандардниот хексадецимален формат на UUID.

Што е ULID и зошто оваа страница постои

ULID (Universally Unique Lexicographically Sortable Identifier) е формат на идентификатор од 26 знаци, долг 128 бита, кој комбинира временска ознака со милисекундна прецизност и случајна компонента. За разлика од UUID v4 (36 знаци со цртички), ULID е пократок, без цртички и не прави разлика помеѓу големи и мали букви. Оваа страница ви овозможува да генерирате помеѓу 1 и 100 ULID‑ови во еден потег, со едноставен интерфејс без непотребни прекинувачи.

Главната разлика во споредба со другите формати на истиот алат (како UUID или NanoID) е што ULID‑овите се лексикографски подредливи според времето на создавање. Првите 10 знаци кодираат временска ознака во милисекунди, а останатите 16 знаци се случајни (80 бита). Бидејќи ULID користи само Crockford base32 азбука, знаците се нечувствителни на големина (0‑9, A‑Z без I, L, O, U) и нема визуелно двосмислени букви. Ова ги прави ULID‑овите URL‑безбедни без потреба од процентно кодирање.

Страницата не нуди опции за големи/мали букви или цртички, бидејќи ULID по дефиниција е нечувствителен на големина и нема цртички. Целото генерирање се случува локално во прелистувачот, користејќи crypto.getRandomValues() – ништо не се испраќа до сервер.

Внатрешна структура на ULID: временска ознака и случајна компонента

Еден ULID се состои од два дела:

  • Први 10 знаци (48 бита) – временска ознака во милисекунди од епохата на Unix (1 јануари 1970). Ова овозможува уникатност во текот на времето до приближно 10889 година.
  • Останати 16 знаци (80 бита) – случајна вредност, генерирана со помош на криптографски безбеден генератор на случајни броеви.

Вкупната должина од 26 знаци се добива со кодирање на 128 бита во Crockford base32. Секој знак претставува 5 бита (2⁵ = 32 можни знаци). Табелата подолу го прикажува распоредот:

Дел Број на знаци Битови Содржина
Временска ознака 10 48 Милисекунди од Unix епоха
Случајна компонента 16 80 Криптографски случајни битови
Вкупно 26 128

При генерирање на повеќе ULID‑ови во иста милисекунда, временската ознака е идентична за сите, но случајниот дел обезбедува уникатност. Сепак, редоследот на создавање во рамките на иста милисекунда не е гарантиран – ULID‑овите не се строго подредливи во истиот милисекунден интервал. За апликации каде е потребна строга секвенцијалност, треба да се разгледаат алтернативи како UUID v7.

Crockford base32 кодирање – зошто без I, L, O, U

Crockford base32 е спецификација на base32 азбука дизајнирана да го минимизира човечката грешка при рачно внесување или читање. Азбуката ги содржи следниве знаци:

  • 0‑9 (десет цифри)
  • A‑Z освен I, L, O, U (22 букви)

Вкупно 32 знаци. Буквите I и L се испуштени затоа што лесно се мешаат со 1; буквата O со 0; буквата U со V (исто така испуштена). Ова значи дека при рачно транскрибирање на ULID, нема двосмисленост дали тоа е буквата „О“ или цифрата „0“.

Поради оваа азбука, ULID‑овите се нечувствителни на големина: 01ARZ3NDEKTSV4RRFFQ69G5FAV и 01arz3ndektsv4rrffq69g5fav се сметаат за ист идентификатор. Ова го поедноставува внесувањето во разни системи што може да ги претвораат во мали/големи букви.

Сите знаци во ULID се нерезервирани според RFC 3986, што значи дека можат да се користат во URL без никакво кодирање. За разлика од некои алтернативи (на пр. стандарден base64 што содржи + и /), ULID не бара процентно кодирање, па затоа е идеален за веб API параметри.

Споредба со UUID v4 и UUID v7

Особина ULID UUID v4 UUID v7
Должина (знаци) 26 36 (со цртички) 36 (со цртички)
Временска ознака Да, милисекунди Не (чисто случаен) Да, милисекунди
Случајност 80 бита 122 бита 74 бита
Подредливост Лексикографска (по време) Не Да (по време)
Цртички Не Да (4 цртички) Да (4 цртички)
Чувствителност на големина Не (Crockford base32) Да (хексадецимален) Да (хексадецимален)
URL‑безбедност Да Да (со цртички) Да (со цртички)

Главната предност на ULID пред UUID v4 е пократката должина и можноста за подредување по време. UUID v7 е сличен на ULID (исто така временски заснован), но задржува цртички и е чувствителен на големина. За бази на податоци, ULID може да ги подобри перформансите на B‑дрво индексот бидејќи новите вредности се приближно монотоно растечки, наместо случајни како кај UUID v4.

Веројатност за колизија и брзина на генерирање

Случајниот дел од ULID содржи 80 бита, што дава 2⁸⁰ можни вредности. Веројатноста за колизија при генерирање на N ULID‑ови во иста милисекунда може да се процени со формулата за роденденски проблем:

P(колизија) ≈ 1 - e^(-N² / (2 · 2⁸⁰))

За N = 1.000 (илјада ULID‑ови во иста милисекунда), веројатноста е околу 4,2 × 10⁻¹⁹ – практично занемарлива. Дури и при генерирање на 10 милиони ULID‑ови во иста милисекунда, веројатноста останува под 0,001. Затоа, за повеќето практични апликации (како идентификатори за записи во база, кориснички ID‑а, објекти во дистрибуирани системи), ризикот од колизија е многу мал.

Бидејќи генерирањето се извршува локално во прелистувачот (со crypto.getRandomValues()), нема мрежно доцнење. Страницата прикажува статусни пораки: „Подготвено.“ пред генерирање, „Генерирано.“ по успешно генерирање, и „Копирано сè!“ кога целата листа е копирана во клипборд.

Локална обработка и приватност

Сите генерирања се случуваат во рамките на вашиот прелистувач. Се користат криптографски безбедни случајни броеви (window.crypto.getRandomValues), кои се стандард во современите прелистувачи. Ниту еден податок не се испраќа до сервер, што значи:

  • Нема следење или евидентирање на генерираните ID.
  • Нема потреба од интернет при генерирање (ако страницата е веќе вчитана).
  • Генерираните ULID‑ови не можат да се пресретнат или украдат во текот на пренос.

Ова е значајно во споредба со онлајн сервиси за генерирање ID‑а кои може да ги испраќаат податоците до надворешни сервери. Апликациите што бараат висока доверба (на пр. генерирање на примарни клучеви за здравствени или финансиски системи) треба да користат локални алатки како оваа.

Често поставувани прашања (FAQ)

1. Дали генерирањето на повеќе ULID‑ови во иста милисекунда гарантира дека се подредливи според редоследот на создавање?

Не. Иако тие ќе ја споделуваат истата временска ознака (првите 10 знаци), случајниот дел не е секвенцијален. Редоследот на листата не одговара на редоследот на создавање. Ако ви треба строга подредливост во рамките на една милисекунда, разгледајте други решенија (на пр. додавање бројач).

2. Зошто нема опција за големи/мали букви?

Бидејќи ULID е нечувствителен на големина по дизајн. Crockford base32 азбуката е дефинирана така што сите знаци се дозволени и во горна и во долна форма, а системите треба да ги третираат како еднакви. Страницата генерира само големи букви за читливост, но ако некој копира мали букви, тие се валиден ULID.

3. Дали можам да генерирам повеќе од 100 ULID‑ови одеднаш?

Не. Страницата прифаќа вредности помеѓу 1 и 100 вклучително. За поголеми количини, потребно е рачно да се изврши повеќе генерирања.

4. Што се случува ако го променам бројот или форматот откако веќе генерирав ID‑а?

Секоја промена на коју било опција (формат, број) веднаш ги регенерира идентификаторите. Претходните ID‑а исчезнуваат и не можат да се вратат освен ако сте ги зачувале на друго место.

5. Дали ULID е ист како UUID v7?

Не, иако и двата се временски засновани и 128‑битни. ULID користи Crockford base32 (нечувствителност на големина, без цртички), додека UUID v7 користи хексадецимално кодирање со цртички и е чувствителен на големина. ULID има 80 бита случајност, UUID v7 има 74.

6. Кога треба да избегнувам користење ULID?

Ако ви е потребна строга временска подредливост во микросекундна резолуција, ULID (само милисекунди) можеби не е доволен. Исто така, ако вашиот систем бара идентификатори кои не откриваат време на создавање (за приватност), ULID не е соодветен бидејќи временската ознака е отворено кодирана.