UUID генератор

Генеришите UUID у прегледачу: потпуно насумични v4, временски уређени v7 за кључеве базе података, или детерминистички v5. До 1000 одједном, и ништа не напушта ваш уређај.

Притисните Генериши за извлачење
Верзија
Напредне опције

Потребан вам је идентификатор који се неће поклопити са неким који је направио неко други, на машини за коју никада нисте чули, без тражења дозволе од било кога? То је посао који обавља UUID. То је 128-битни број, записан као 36 знакова у познатом обрасцу 8-4-4-4-12, а цео његов дизајн се заснива на томе да два таква броја никада неће бити иста, иако ништа не координише ко ће добити који. Овај бесплатни генератор их ствара у вашем прегледачу: изаберите верзију у пољу „Верзија“, наведите колико вам их треба у пољу „Број“ и притисните „Генериши“. Страница се отвара са једним v4, верзијом коју већина пројеката тражи, тако да сте на само један клик од првог идентификатора.

Сваки идентификатор ваш прегледач гради путем Web Crypto API интерфејса. Верзија 4 користи crypto.randomUUID() тамо где га прегледач пружа, а иначе crypto.getRandomValues() — криптографски јак извор насумичности, а не псеудонасумичну JavaScript функцију као што је Math.random(). Верзија 7 ставља 48-битну временску ознаку у милисекундама на почетак, затим 12-битни бројач који се повећава унутар исте милисекунде, па 62 насумична бита, што представља метод редоследа описан у стандарду RFC 9562; тај бројач је разлог зашто серија од хиљаду вредности излази по реду, а не промешана. Верзија 1 комбинује временску ознаку са насумичним идентификатором чвора који има подешен бит за вишесмерно слање (multicast), тако да никада не носи адресу ваше мрежне картице као што су то чиниле првобитне имплементације из 1990-их. Верзије 3 и 5 уопште нису насумичне: оне спајају именски простор са именом користећи MD5, односно SHA-1, а то хеширање се такође дешава на вашем уређају. Ништа се не шаље на сервер, ништа се не бележи у дневницима, а када се страница учита, она наставља да ради и без интернет везе.

„Верзија“ је поље које одлучује о свему осталом. Верзија 4 садржи 122 насумична бита без икакве структуре — то је подразумевана опција и прави одговор када идентификатор само треба да буде јединствен. Верзија 7 задржава 62 насумична бита, али почиње временом када је креирана, тако да се скуп ових идентификатора сортира по редоследу настанка; то је верзија за којом посежете када ће идентификатор постати кључ у бази података. Верзија 1 је оригинална шема заснована на времену, задржана овде за системе који је и даље захтевају. Верзије 3 и 5 су посебан пар: оне су детерминистичке, што значи да исти улазни подаци увек производе исти идентификатор, и оне захтевају два додатна поља — „Именски простор“, што је један од стандардних простора DNS, URL, OID и X.500 или ваш „Прилагођени именски простор (UUID)“, као и „Име“, стринг који се идентификује. Проследите верзији v5 URL именски простор и https://example.com/a и добићете исти UUID данас, сутра и на туђој машини. Због тога поље „Број“ нестаје када је изабрана v3 или v5: хиљаду копија једне детерминистичке вредности било би само хиљаду копија исте вредности. За све остале верзије опсег за „Број“ је од 1 до 1000.

Четири прекидача мењају облик излаза без промене 128 битова у основи. „Велика слова“ исписује хексадецималне цифре верзалима, „Без цртица“ даје компактну форму од 32 знака коју неке колоне и имена датотека више воле, а „Витичасте заграде“ обавија вредност у { } — облик који Windows и .NET свет називају GUID. У оквиру картице „Напредне опције“, urn:uuid: додаје префикс који га чини формалним URN-ом; он искључује опције „Витичасте заграде“ и „Без цртица“ док је укључен, јер стандард дозвољава тачно један URN облик, и то је онај канонски, са цртицама. „Формат копирања“ одлучује како је серија спојена када је преузмете: по један у сваком реду, одвојени зарезима, или свака вредност под наводницима са зарезом на крају, што можете директно налепити у низ у коду. Испод резултата налази се ред који извештава о насумичности у битовима — 122 за v4, 62 за v7 — и, за v7, временску ознаку кодирану у првом идентификатору серије, тако да је време унутар вредности видљиво, а не само имплицирано. И дугме „Копирај све“ и „Сачувај у датотеку“ поштују одабрани формат копирања. „Историја“ чува ваших последњих 10 серија у вашем прегледачу: кликните на једну да је вратите, копирајте или избришите појединачни унос, или очистите целу листу. Опција „Обриши“ празни резултат, а ваша подешавања оставља нетакнутим, при чему након 50 идентификатора листа постаје један блок по којем се може скроловати, уместо педесет редова.

Најважнија ствар на овој страници је разлика између v4 и v7 када се користе као примарни кључ (primary key), и то није ствар укуса. Индекси базе података су B-стабла која се чувају у сортираном редоследу, и од тога где нови кључ слети у том редоследу зависи колико ће посла то уметање захтевати. Кључ v4 је насумичан, тако да узастопна уметања слећу у неповезане углове индекса: странице (page split) које су биле пуне се деле, делови стабла које база података држи у меморији ретко су они делови који су потребни за следеће уметање, а индекс на крају постаје већи и фрагментиранији него што то редови на које показује оправдавају. Кључ v7 почиње тренутном милисекундом, тако да узастопна уметања слећу једно поред другог на десну ивицу стабла, што је образац који производи ауто-инкрементирајући цео број и образац око којег су изграђене индексне структуре. У томе је цео компромис: v7 вам купује понашање приликом уметања секвенцијалног кључа, задржавајући својство због којег сте уопште изабрали UUID, а то је да свако може да га креира без питања сервера. То кошта само толико што је време креирања сада читљиво унутар идентификатора, а да ли је то уопште важно, питање је за ваше податке, а не за формат.

Никада ништа не проверава да ли је UUID јединствен; његова величина је његова гаранција. Нема регистра, нема слања захтева ка серверу, нема претраживања — генератор производи број и предаје га, а разлог зашто се два не поклопе је једноставно тај што постоји 2^122 могућих вредности за v4, око 5,3 секстилиона. Парадокс рођендана (birthday problem) је искрен начин да се то процени: требало би вам отприлике 2,7 трилиона идентификатора пре него што би постојала једнака шанса да се било која два поклопе, што значи милијарду нових UUID-јева сваке секунде током 86 година. Вреди бити прецизан о томе шта то обећава, а шта не. То је статистичка гаранција, а не аритметичка, и она важи само док је насумичност испод ње права — лоше иницијализован генератор (seed), или виртуелна машина клонирана заједно са својим базеном ентропије, разбија то на начин који сам формат не може да открије. Верзија 7 још више сужава то питање: унутар једне једине милисекунде генератор уопште не може да се понови, јер се бројач само повећава уместо да баца коцкице, а код потпуно независних генератора посао обављају та 62 насумична бита.

UUID је идентификатор, а не лозинка. Верзија 4 је непредвидива, и то људе доводи у искушење да је третирају као тајну — као везу за ресетовање лозинке, URL који се не може погодити, токен за сесију, API кључ. Непредвидивост јесте стварна, али тајност је својство тога како се поступа са вредношћу, а идентификаторима се намерно рукује немарно: они стоје у URL-овима који завршавају у историји прегледача, дневницима сервера, заглављима referrer и аналитици, и често се лепе у поруке за ћаскање. Остале верзије су још лошији кандидати. И верзија 1 и верзија 7 кодирају тренутак креирања, тако да свако ко има једну зна отприлике када је направљена и може да сузи комшилук свега осталог што је направљено заједно са њом. Верзије 3 и 5 су намерно детерминистичке: v5 UUID адресе е-поште није хеширана тајна, већ је то вредност коју свако са истом адресом може да израчуна у секунди. Користите UUID да нешто именујете. За ствари које морају остати непознате, користите генератор лозинки или токен из библиотеке направљене за тајне.

Зашто изабрати овај UUID генератор?

UUID-јеви се појављују свуда где нешто мора да буде именовано пре него што било шта може да потврди да је то име слободно. Апликацијски код их кује за редове које намерава да уметне, тако да објекат има идентитет пре него што уопште стигне до базе података, а клијент може да се позове на њега док је уписивање још у току. Дистрибуирани системи се још више ослањају на њих: неколико услуга које пишу у једну табелу, офлајн мобилни клијент који креира записе у авиону, ред чекања (queue) који мора да препозна поруку коју је већ обрадио — нико од њих не може да чека свој ред на заједничком бројачу. Верзија 5 покрива другачију потребу, а то је стабилан идентификатор изведен из нечега што већ имате: исти документ, исти URL или исти кориснички налог увек се мапирају у потпуно исти UUID, тако да се увоз може покренути два пута без дуплирања било чега. На другим местима, то је једноставно формат који систем захтева — идентификатор корелације који се провлачи кроз дневнике, име датотеке које се неће сударити када се отпремања хиљаду корисника нађу у једном фолдеру, кључ регистратора за Windows, тестни подаци који морају да изгледају као прави подаци.

Вреди знати неколико искрених ограничења. Једна серија је једна верзија: вредност наведена у пољу „Верзија“ важи за све у њој, тако да су покретање за v4 и покретање за v7 две серије. Ово је генератор, а не инспектор — лепљење UUID-ја да би се очитала његова верзија или његова временска ознака није нешто што ова страница ради. Дугме „Сачувај у датотеку“ пише обичну текстуалну датотеку, а не извоз у CSV или JSON. Верзија 7 отворено открива када је креирана, до у милисекунду, што је стварни компромис, а не мана, а верзија 1 пропушта време на исти начин; ако је то проблем за ваше податке, верзија 4 је верзија која ником ништа не говори. Две посебне вредности из стандарда нису верзије и стога нису опције у пољу „Верзија“, али их можете копирати одавде: нулти UUID (nil UUID), 00000000-0000-0000-0000-000000000000, и максимални UUID (max UUID), ffffffff-ffff-ffff-ffff-ffffffffffff. Све на овој страници прати стандард RFC 9562, спецификацију која је 2024. године заменила RFC 4122, тако да је излаз прихватљив за сваку библиотеку, базу података или API који уопште рукује са UUID-јевима. Унутар тих ограничења гаранција је јака: сваки идентификатор је изграђен по стандарду, од криптографски сигурне насумичности, на вашој сопственој машини, и нико други га никада не види.

FAQ

Како да генеришем UUID?

Изаберите верзију у пољу „Верзија“, подесите колико вам их треба у пољу „Број“ и притисните „Генериши“. Страница се отвара на једном идентификатору верзије 4, што је оно што већина пројеката жели, тако да сте од обичног UUID-ја удаљени само један клик. Свака вредност се појављује са сопственим дугметом за копирање, а „Копирај све“ узима целу серију одједном.

Која је разлика између UUID v4 и v7?

Верзија 4 има 122 насумична бита без икакве структуре, тако да два таква идентификатора немају никакав међусобни однос. Верзија 7 троши првих 48 битова на милисекунду у којој је створена, додаје бројач и 62 насумична бита, и стога се може сортирати: серија излази у редоследу у којем је направљена. Користите v4 када идентификатор треба само да буде јединствен, а v7 када ће он бити и кључ у бази података.

Коју UUID верзију треба да користим?

Верзију 4, осим ако немате разлог да изаберете неку другу. Изаберите верзију 7 ако идентификатор постаје примарни кључ и перформансе уметања су важне, верзију 5 ако вам је потребно да исти улаз увек произведе исти идентификатор, а верзију 1 само ако систем са којим морате да комуницирате то специфично захтева. Верзија 3 је у ствари верзија 5 са MD5 уместо SHA-1, и постоји ради компатибилности.

Да ли су генерисани UUID-јеви стварно насумични и сигурни?

Насумичност је криптографски сигурна: долази из Web Crypto API-ја вашег прегледача, кроз crypto.randomUUID() или crypto.getRandomValues(), а не из Math.random(). Сигуран у смислу да се не може погодити је друго питање у односу на сигуран у смислу тајне — UUID је идентификатор, и не би требало да се користи као лозинка, токен сесије или API кључ.

Могу ли да генеришем пуно UUID-јева одједном?

Да, до 1000 у једном потезу. Подесите „Број“ и притисните „Генериши“; након педесет вредности, резултат постаје један блок по којем можете скроловати уместо дуге листе редова. Опције „Копирај све“ и „Сачувај у датотеку“ узимају целу серију, спојену онако како налаже „Формат копирања“ — по један у реду, одвојено зарезима, или под наводницима за лепљење у низ.

Зашто ми v3 и v5 дају исти UUID сваки пут?

Зато што им је то и намена. Верзије 3 и 5 су детерминистичке: оне хеширају именски простор и име које им дате, тако да идентични улазни подаци увек производе идентичан идентификатор, на било којој машини и у било ком језику. То их чини корисним за добијање стабилног идентификатора из нечега што већ имате, а то је и разлог зашто је поље „Број“ сакривено када их изаберете.

Шта су Именски простор и Име, и који именски простор да изаберем?

То су два улаза из којих се израчунава UUID верзије 3 или верзије 5. „Именски простор“ говори о каквој ствари се ради — DNS за имена хостова, URL за адресе, OID и X.500 за те шеме директоријума, или „Прилагођено“ („Прилагођени именски простор (UUID)“) ако желите да наведете сопствени UUID именског простора, што је уобичајен избор унутар апликација. „Име“ је сам текстуални низ. Различити именски простори дају потпуно различите резултате за исто име, што је и поента њиховог постојања.

Зашто је UUID v7 бољи од v4 за примарни кључ базе података?

Због тога где вредности слете у индекс. Индекс се чува у сортираном редоследу, а насумичан кључ v4 слеће било где у њега, тако да уметања деле странице по целом стаблу, а делови који се држе у меморији су ретко делови који су следећи потребни. Кључ v7 почиње тренутном милисекундом, тако да узастопна уметања слете заједно на крај индекса, што је начин на који се понаша секвенцијални целобројни кључ — док и даље дозвољава било којој услузи да скује идентификатор без питања централног бројача.

Да ли би два UUID-ја икада могла да буду иста?

У принципу да, у пракси не, и вреди знати разлог. Ништа не проверава јединственост: једноставно постоји 2^122 могућих вредности за верзију 4, око 5,3 секстилиона, и требало би вам отприлике 2,7 трилиона њих — милијарду сваке секунде током 86 година — пре него што би постојала једнака шанса за један једини судар. Гаранција је статистичка, а не апсолутна, и зависи од тога да насумичност буде права, што је и разлог зашто овај генератор користи Web Crypto API, а не обичну псеудонасумичну функцију.

Могу ли да користим UUID као лозинку, API кључ или токен за сесију?

Не, и ово је грешка која највише кошта. UUID верзије 4 је непредвидив, али се идентификатори третирају као јавни: завршавају у URL-овима, историји прегледача, дневницима сервера, заглављима referrer и аналитици. Верзије 1 и 7 додатно откривају када су креиране, а верзије 3 и 5 може поново израчунати свако ко познаје улазне податке. За све што мора остати тајно, користите генератор лозинки или токен из библиотеке намењене за тајне.

Да ли UUID v7 открива када је креиран?

Да, у милисекунду, и то је намерно, а не превид — временска ознака је оно што v7 чини погодним за сортирање. Ред испод резултата вам показује време кодирано у првој вредности серије, тако да можете тачно да видите шта је изложено. И верзија 1 такође носи временску ознаку. Ако је време креирања нешто што не бисте желели да објавите, верзија 4 не садржи никакво време.

Да ли UUID v1 излаже моју MAC адресу?

Не овде. Оригинална шема је користила адресу мрежне картице машине као поље чвора (node), одакле и потиче репутација верзије 1, али стандард такође дозвољава насумичан идентификатор чвора означен битом за вишесмерно слање, и то је оно што овај генератор производи. Ваша хардверска адреса се никада не чита и никада се не појављује у излазу.

Шта мењају опције Велика слова, Без цртица, Витичасте заграде и urn:uuid:?

Само приказ — 128 битова испод је идентично у сваком облику. „Велика слова“ штампа хексадецималне цифре верзалима, „Без цртица“ даје компактну верзију од 32 знака, „Витичасте заграде“ обавија вредност у { } на начин на који Windows и .NET пишу GUID, а urn:uuid: додаје префикс који га чини формалним URN-ом. Опција urn:uuid: искључује друге две док је укључена, јер стандард дефинише тачно један URN облик, а то је канонски облик са цртицама.