ULID генератор

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

Формат
Генерисани идентификатори
Спремно. Генеришите ULID вредности у свом прегледачу.

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

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

Ваши идентификатори се генеришу локално уз помоћ јаке случајности у прегледачу. Ништа се не шаље на BroBroGo.

Честа питања

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

ULID је компактан, прилагођен за URL-ове и може се сортирати по времену као обичан текст, што је корисно за записнике (logs), кључеве објеката и записе који треба да буду сортирани по времену креирања.

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

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

Шта је ULID и како ова страница ради

Ова страница генерише идентификаторе у ULID формату – 26‑карактерне низове који су истовремено временски сортабилни и потпуно јединствени. Када изаберете ULID као формат и поставите број идентификатора (између 1 и 100), алатка одмах испоручује списак готових низова. Сваки ULID има облик попут 01ARZ3NDEKTSV4RRFFQ69G5FAV, где првих десет знакова представљају милисекундни печат тренутка генерисања.

За разлику од других формата на истом алату, ULID је краћи од UUID (26 знакова наспрам 36) и користи искључиво Crockford‑ов base32 алфабет. То значи да су знакови само бројеви 0‑9 и слова A‑Z, без малих слова, без цртица, и без визуелно двосмислених знакова (I, L, O, U су изостављени). Резултат је идентификатор који је неосетљив на величину слова, сигурно се користи у URL‑овима без потребе за ескјeповањем, и може се сортирати као обичан текст по времену настанка.

Алатка не нуди прекидаче за велика слова или цртице, јер ULID сам по себи нема цртице и стандардно се пише великим словима, али је неосетљив на величину – исто је да ли учитате 01arZ3ndeKtSV4rRFfQ69G5FAv или 01ARZ3NDEKTSV4RRFFQ69G5FAV. Све промене опција (формат, број идентификатора) одмах покрећу поновно генерисање целе листе.

Унутрашња структура ULID‑а: време и случајност

ULID је 128‑битни идентификатор подељен на два дела. Првих 48 битова (10 карактера у base32 запису) кодира време настанка у милисекундама од почетка епохе. То омогућава да се ULID‑ови сортирају лексикографски по времену – када их поређате по абецеди, они су аутоматски поређани од најстаријег до најновијег.

Преосталих 80 битова (16 карактера) је случајни део, генерисан у прегледачу помоћу crypto.getRandomValues(). Ова комбинација обезбеђује 128‑битни простор, исти капацитет као UUID, али у знатно компактнијем облику.

Важно је разумети да ULID не гарантује строго редослед за идентификаторе генерисане у истој милисекунди. Ако генеришете стотину ULID‑ова у истом тренутку, временски печат ће бити исти за све, а случајни део одлучује о редоследу. То значи да сортабилност функционише са прецизношћу од једне милисекунде, али не и унутар истог милисекунде.

Crockford base32: зашто су ULID‑ови читљиви и сигурни

Crockford‑ов base32 алфабет смањује визуелну двосмисленост. Слова I, L, O, U су изостављена јер се лако мешају са бројевима 1, 0 или међусобно. Алфабет чине: 0‑9, A, B, C, D, E, F, G, H, J, K, M, N, P, Q, R, S, T, V, W, X, Y, Z – укупно 32 знака. Пошто се ради о base32 кодирању, сваки карактер носи 5 бита информације, тако да 26 карактера даје 26 × 5 = 130 бита, од чега се 128 користи за податке, а 2 бита су заштитна маргина због потребе да се 128 бита подели са 5.

Овај алфабет чини ULID потпуно неосетљивим на величину слова – велика и мала слова се третирају исто, што олакшава ручну транскрипцију и унос преко телефона или говорних команди. Такође, сви знакови су дозвољени у URL‑овима без икаквог ескјeповања, према RFC 3986, јер алфабет не садржи резервисане знакове попут +, / или =.

Поређење са UUID v4 и UUID v7: дужина, сортабилност и безбедност

UUID v4 има 36 знакова укључујући четири цртице, што га чини дужим за 10 знакова од ULID‑а. Такође, UUID v4 је потпуно случајан, што значи да се не може сортирати по времену. Када користите UUID v4 као примарни кључ у бази података, нови записи се убацују на случајна места у B‑стаблу, што временом може довести до фрагментације и споријих уметања.

UUID v7 је новији предлог који уводи временску компоненту, слично ULID‑у. Ипак, UUID v7 задржава цртице и 36 знакова, док ULID остаје компактнији. Разлика је и у начину кодирања: UUID v7 користи хексадецималне цифре, што значи да је дужина у карактерима већа за исти број битова.

ULID пружа предност у системима где је дужина идентификатора ограничена или где се идентификатори често приказују корисницима – на пример, у URL‑овима веб апликација, у редовима за праћење поруџбина или у API одговорима где је важна читљивост.

Примена у базама података и дистрибуираним системима

Временска сортабилност ULID‑а чини га одличним избором за примарне кључеве. Када се нови ULID убацује у B‑стабло индекса, он се додаје на крај (најновији временски печат), што значајно смањује потребе за преуређивањем страница индекса. У пракси, то значи брже уметање у табелама са великим прометом података.

У дистрибуираним системима, ULID омогућава да чворови генеришу јединствене идентификаторе без координације – сваки чвор само дода сопствени идентификатор чвора или случајни део. Наравно, ULID не гарантује глобални редослед ако се генерише на више чворова истовремено, али је за многе примене довољан.

Колизіја ULID‑ова је теоретски могућа због 80‑битног случајног дела, али је вероватноћа изузетно мала. Са 80 случајних битова, постоји 2⁸⁰ ≈ 1,2×10²⁴ могућности. У пракси, генерисање милиона ULID‑ова у секунди не би произвело колизију годинама. Ипак, системи који захтевају строгу јединственост треба да додају провере пре уписа у базу.

Безбедност и приватност генерисања

Све операције се извршавају директно у вашeм прегледачу. Алатка користи crypto.getRandomValues(), који је уграђени механизам за криптографски безбедне случајне бројеве у свим савременим прегледачима. Ниједан део идентификатора – ни временски печат ни случајни део – не напушта вашу машину. Алатка не шаље захтеве ка серверу, не прикупља податке и не чува историју генерисања. Ово је кључна разлика у односу на онлајн генераторе који зависе од серверске логике и потенцијално могу да евидентирају генерисане вредности.

Статусне поруке на страници обавештавају вас о тренутном стању: „Ready“ (спреман), „Generated“ (генерисано) и „Copied all!“ (све копирано) када копирате целу листу. Сваки појединачни ULID можете копирати кликом на текст, што је корисно када вам треба само један идентификатор.

Честа питања (FAQ)

Да ли се ULID‑ови могу понављати?
Теоретски је могуће, али је вероватноћа занемарљива при практичним количинама генерисања. Случајни део од 80 битова даје 2⁸⁰ различитих комбинација.

Зашто је ULID краћи од UUID?
Зато што користи base32 алфабет уместо хексадецималног. Base32 кодира 5 бита по знаку, док хексадецимални кодује само 4 бита по знаку. За истих 128 битова, base32 захтева 26 знакова (128 / 5 ≈ 25,6, заокружено навише), док хексадецимални захтева 32 знака (128 / 4 = 32), плус четири цртице код UUID.

Како да копирам све генерисане ULID‑ове одједном?
Кликните на дугме или линк који покреће копирање целе листе. Када се копирање заврши, видећете поруку „Copied all!“. Сваки појединачни ULID можете копирати кликом на њега.

Могу ли да генеришем мање од 1 или више од 100 ULID‑ова?
Не. Ограничење је од 1 до 100 укључујући обе границе. Ако вам треба више, покрените генерисање више пута.

Да ли временски печат у ULID‑у зависи од системског сата?
Да. Првих 10 знакова кодира време у тренутку генерисања, према системском сату вашег прегледача. Ако је сат подешен нетачно, и идентификатори ће носити нетачну временску ознаку.

Могу ли да користим ULID као примарни кључ у SQL бази?
Можете. ULID је сортабилан и компактан, али морате да будете свесни да не гарантује строги редослед унутар исте милисекунде. За већину примена то није проблем, али ако вам треба апсолутна хронолошка прецизност, размотрите алтернативе попут секвенцијалних бројева.