Генератор UUID v4 – 122 бита случајности у сваком идентификатору
Ова страница генерише један или више UUID v4 идентификатора – насумичне низове од 36 знакова у стандардном 8‑4‑4‑4‑12 хексадецималном формату. Корисник контролише број (1–100), употребу великих слова и укључивање цртица. Идентификатори се појављују тренутно у прегледачу, а сваки се може копирати кликом или сви одједном притиском на дугме.
Шта чини ову страницу другачијом
За разлику од многих генератора који производе UUID на серверу или користе временске печате, овај генератор користи 122 чисто случајна бита по UUID‑у. Преосталих 6 бита су фиксни битови верзије и варијанте, што је дефинисано стандардом RFC 4122. Главна последица: UUID v4 вредности се сортирају произвољно – не носе никакву временску или редоследну информацију. То значи да ако их користите као примарни кључ у бази података, долази до фрагментације B‑стабала, за разлику од временски сортираних формата попут UUID v7 или ULID.
Вероватноћа да се два генерисана UUID‑а поклопе је занемарљива за практичне потребе. Страница излаже посебне прекидаче за формат (велика слова, цртице) који су релевантни само за UUID (v4 и v7); друге врсте ID‑ова на истом алату користе другачије контроле.
Како се генерише 122 бита случајности
UUID v4 је дефинисан у RFC 4122, верзија 4. Сваки знак у хексадецималном низу представља 4 бита. У канонском облику (8‑4‑4‑4‑12) укупан број хексадецималних цифара је 32, што даје 128 бита. Од тога су:
- 4 бита фиксна за верзију (0001, што одговара броју 4 у првом знаку треће групе)
- 2 бита фиксна за варијанту (10, што одговара бројевима 8,9,a,b на почетку четврте групе)
- Преосталих 122 бита су потпуно случајна.
Генерисање се обавља у прегледачу помоћу JavaScript API‑ја crypto.randomUUID() или crypto.getRandomValues(), који користе криптографски јак генератор псеудослучајних бројева (CSPRNG). То значи да резултат није подложан предвиђању нити утицају спољашњих фактора. Никакви подаци се не шаљу на сервер – све се обрађује локално.
Када корисник промени било коју опцију (формат, број, велика слова, цртице), сви идентификатори се одмах поново генеришу. Нема одлагања, нема мрежних захтева.
Вероватноћа колизије – бројке које говоре
122 бита случајности значи да постоји 2¹²² могућих вредности (отприлике 5,3×10³⁶). Колизија – када се два генерисана UUID‑а поклопе – може се израчунати помоћу проблема рођендана у теорији вероватноће. Да би вероватноћа колизије достигла 50%, потребно је генерисати око 2,71×10¹⁸ UUID‑ова (квадратни корен из 2¹²²). У пракси, ако генеришете милијарду UUID‑ова на секунд непрекидно 73 године, вероватноћа колизије је и даље мања од 50%.
За већину апликација, један UUID v4 је довољно јединствен без икакве координације између чворова. За разлику од UUID v1 који користи MAC адресу и време, или UUID v7 који користи временски печат, v4 не открива никакве информације о пореклу нити редоследу креирања. То је кључно за сигурносне инжењере који желе недвосмислено случајне токене, или за дистрибуиране системе где није могуће усклађивање централног редоследа.
Утицај на индексе база података
Када се UUID v4 користи као примарни кључ у релационој бази (нпр. PostgreSQL, MySQL, SQL Server), индекси типа B‑стабло пате од фрагментације. Разлог: нови UUID‑еви су насумично распоређени у целом опсегу вредности. Уметање новог реда готово никада не пада на крај стабла, већ у средину, што изазива често цепање страница, повећање дубине индекса и лошију кеш ефикасност.
Насупрот томе, временски сортирани идентификатори (попут UUID v7 или класичне истоветности) убацују се на крај индекса, чиме се фрагментација минимизира. Ако вам је перформанса уписивања критична, а потребан вам је случајни UUID, размотрите чување UUID‑а истовремено са додатком временске колоне за сортирање. Алтернативно, неке базе (нпр. Postgres) нуде типове попут uuid_sequence или екстензије за генерисање сортабилних UUID‑ова.
Важно: ова страница не нуди сортиране формате. Ако вам је потребан временски сортабилан ID, пребаците се на UUID v7 или ULID из падајућег менија. Ограничење на 1–100 идентификатора по генерисању је намерно – довољно за тестирање, али не и за масовно пуњење база.
Прилагођавање формата – велика слова и цртице
Стандардни UUID се приказује у доњим хексадецималним словима (a–f) са цртицама. Страница нуди две опције:
- Велика слова – када је укључено, слова се приказују као A–F. Ово не мења саму вредност, већ само визуелни приказ. Уобичајено је у системима где се хексадецималне вредности често копирају у окружења која захтевају велика слова (нпр. неки формати токена, JSON шеме, или системи за управљање идентитетима).
- Изостављање цртица – када је опција искључена, цртице се уклањају. Формат (8‑4‑4‑4‑12) постаје низ од 32 хексадецимална знака без раздвајања. Ово је погодно када се UUID користи у URL‑овима, именима фајлова или API параметрима, где цртице могу бити непожељне. Важно: уклањање цртица не мења саму случајну вредност; то је само промена серијализације.
Промена било које опције тренутно регенерише све UUID‑ове. Не постоји могућност да се само промени приказ постојећих – правило је да се при свакој промени ствара потпуно нови сет.
Поређење са временски заснованим идентификаторима
Исти алат нуди и UUID v7, ULID и NanoID. Кључна разлика: UUID v4 је потпуно случајан, док су v7 и ULID делимично временски печатирани. На пример:
- UUID v7 – првих 48 бита садрже временски печат у милисекундама, преосталих 74 бита су случајни. То га чини сортабилним по времену настајања, али и даље веома отпорним на колизије. Индексна фрагментација је драстично мања.
- ULID – 48 бита временски печат у милисекундама, 80 бита случајности. Кодиран у Base32, краћи од UUID‑а (26 знакова). Сортабилан и лакши за руковање.
- NanoID – користи много мање битова случајности (најчешће 64–128 бита), али компактнији (21 знак уз подразумеване симболе). Није део RFC стандарда, али популаран у JavaScript екосистему.
Избор између ових формата зависи од конкретног сценарија. Ако вам је потребна временска сортабилност (нпр. дневници, хронолошки приказ, избегавање фрагментације), користите v7 или ULID. Ако вам је потребна максимална случајност без икаквог реда (нпр. токени, анонимни идентификатори, скривање броја записа), UUID v4 је прави избор.
Често постављана питања
1. Да ли постоји ризик да се два UUID v4 поклопе када генеришем велики број?
Теоријски да, али практично занемарљив. Да би вероватноћа колизије достигла 1%, потребно је генерисати око 2,6×10¹⁶ UUID‑ова. Чак и ако генеришете милијарду дневно, требало би милионе година. За апликације са мање од милијарде записа, ризик је нижи од случајног удара грома.
2. Зашто се UUID‑ови поново генеришу када променим само велика слова или цртице?
То је дизајн алата – свака промена опције третира се као захтев за свежу серију случајних идентификатора. Ако желите да само промените приказ постојећих вредности, морате да их копирате пре промене подешавања.
3. Могу ли да унесем произвољан број већи од 100?
Не. Ограничење у контроли броја је постављено на 1–100. Ако покушате да унесете вредност ван овог опсега, страница је неће прихватити. За масовније потребе користите скрипту у командној линији или специјализовану библиотеку.
4. Да ли се UUID‑ови генеришу на серверу или у прегледачу?
У потпуности у прегледачу. Користи се уграђени JavaScript API crypto.randomUUID() (где је доступан) или crypto.getRandomValues(). Никакви подаци не напуштају ваш рачунар. Чак и статусна порука „Generated.“ или „Copied all!“ служи само за визуелну повратну информацију.
5. Која је разлика између UUID v4 и UUID v7?
UUID v4 има 122 случајна бита; нема временску компоненту. UUID v7 користи 48 бита за временски печат (милисекундску прецизност), а преосталих 74 бита су случајни. То значи да се v7 вредности могу сортирати по времену настајања, док су v4 потпуно непредвидиве. Избор зависи од тога да ли вам је потребна временска сортабилност или само случајност.
6. Да ли могу да користим UUID‑ове без цртица као примарне кључеве?
Да. Цртице су само визуелни раздвајачи, не утичу на јединственост. База података може да складишти 32‑карактерни хексадецимални низ (или бинарни запис од 16 бајтова) без икаквих проблема. Међутим, индексирање остаје изазовно због случајног редоследа, без обзира на присуство цртица.