Прескочи на садржај

Бесплатни UUID генератор - Креирајте V1 и V4 UUID-ове тренутно

Генеришите јединствене идентификаторе тренутно помоћу нашег бесплатног UUID генератора. Креирајте Version 1 (временски базиране) и Version 4 (случајне) UUID-ове за базе података, API-је и дистрибуиране системе.

Генератор УУИДа

Верзија УУИДа
Генерисани УУИД
Kalkulator učitavanja...
📚

Dokumentacija

Генератор UUID-ова

Генератор UUID-ова је алат који прави универзално јединствени идентификатор, односно UUID: код од 128 битова који се користи за означавање дела података, тако да ниједна друга ставка, било где, вероватно неће имати исту ознаку. Ова страница генерише UUID-ове верзије 1 (засноване на времену) и верзије 4 (случајне).

Шта је UUID?

UUID је број од 128 битова, записан као 32 хексадецималне цифре (знаци 0–9 и a–f). Подељен је у пет група раздвојених цртицама, према обрасцу 8-4-4-4-12, што укупно даје 36 знакова. Пример UUID-а изгледа овако:

1550e8400-e29b-41d4-a716-446655440000
2

УУИД-ови су дефинисани RFC-ом 9562, који је Радна група за интернет инжењерство објавила у мају 2024, а који је заменио старији RFC 4122 из 2005. Оба документа описују исти формат од 128 битова. Софтвер их користи за идентификовање редова у базама података, датотека, корисничких сесија и других записа, без потребе за централним ауторитетом који додељује бројеве. Пошто је простор могућих УУИД-ова веома велики, два рачунара могу независно да генеришу УУИД-ове у истом тренутку, а да готово никада не добију исти.

Формат и структура UUID-а

128 битова UUID-а подељено је на именована поља. Свако поље заузима унапред одређен број битова:

  • time_low – 32 бита
  • time_mid – 16 битова
  • time_hi_and_version – 16 битова
  • clock_seq_hi_and_reserved – 8 битова
  • clock_seq_low – 8 битова
  • node – 48 битова
Распоред поља UUID-а time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

Четири бита унутар поља time_hi_and_version садрже број верзије UUID-а, а два бита унутар поља clock_seq_hi_and_reserved садрже варијанту, која софтверу говори како да прочита остала поља. Дефинисано је осам верзија.

Називи наведених поља потичу из верзије 1, у којој она заиста садрже време и вредност чвора. Друге верзије задржавају исти распоред 8-4-4-4-12 и исте границе поља, али већину битова попуњавају случајним подацима. У UUID-у верзије 4 група означена са time_low садржи случајну вредност, а не време.

Како генерисати UUID овим алатом

  1. Изаберите верзију: верзију 1 (засновану на времену) или верзију 4 (случајну).
  2. Прочитајте UUID у пољу са резултатом. Нови UUID се појављује чим се страница учита или се промени верзија.
  3. Изаберите „Генериши“ за генерисање новог УУИД-а.
  4. Изаберите „Копирај“ да бисте копирали резултат у међуспремник, а затим га налепите у код, базу података или конфигурациону датотеку.

Панел испод резултата дели UUID на његових пет поља и именује свако од њих, па се цифра верзије и цифра варијанте лако проналазе.

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

UUID верзија 1 у односу на верзију 4

Верзија 1 кодира тренутну временску ознаку, уз случајно изабрану секвенцу такта и вредност чвора. Стандард дозвољава да вредност чвора буде стварна мрежна (MAC) адреса рачунара, али дозвољава и случајно генерисану вредност чвора као алтернативу која штити приватност. Овај алат увек користи случајну опцију: његови UUID-ови верзије 1 никада не читају нити откривају стварну MAC адресу. Стандард такође захтева да најнижи бит првог бајта поља чвора буде постављен на 1 код случајне вредности чвора, што овај алат и ради. Тај бит никада није постављен код стварних мрежних картица, па се случајни чвор не може помешати са стварним. Зато је друга хексадецимална цифра пете групе увек непарна у UUID-у верзије 1 са ове странице: 1, 3, 5, 7, 9, b, d или f.

Временска ознака у UUID-у верзије 1 може се прочитати, па се записи могу поређати према времену настанка. Сортирање самог текста UUID-а то не омогућава, јер прва група садржи најнижих 32 бита временске ознаке, који се премотавају отприлике сваких 7 минута. Верзија 6, додата у RFC 9562, чува исту временску ознаку тако да су највиши битови први, па сортирање обичног текста функционише.

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

У стандарду постоји још шест верзија, али их овај алат не генерише: верзија 2 (DCE Security, ретко се користи); верзије 3 и 5, направљене хеширањем именског простора и имена помоћу MD5 или SHA-1, тако да исти улаз увек даје исти UUID; и верзије 6, 7 и 8, које је RFC 9562 додао у (24.300 cm) 2024 за идентификаторе који се могу сортирати и прилагођене идентификаторе.

Како израчунати UUID (формула)

Верзија 4:

  1. Генеришите 128 случајних битова.
  2. Поставите четири бита верзије, прву хексадецималну цифру треће групе, на 0100 (хекс 4).
  3. Поставите највиша два бита четврте групе на 10 (тако да прва хексадецимална цифра те групе буде 8, 9, a или b).

Само 122 од 128 битова је заправо случајно, јер је 6 битова фиксирано корацима 2 и 3. То даје 2^122, односно приближно 5,3 × 10^36, могућих УУИД-ова верзије 4.

Верзија 1:

  1. Узмите тренутно време као број интервала од по 100 наносекунди, рачунајући од датума 15. октобар 1582., када је извршена реформа грегоријанског календара. У пракси је то уобичајено Unix време у милисекундама плус 12.219.292.800.000, а затим све помножено са 10.000.
  2. Поделите тај број од 60 битова на три поља: најнижа 32 бита иду у time_low, следећих 16 у time_mid, а највиших 12 у time_hi_and_version.
  3. Генеришите секвенцу такта од 14 битова, која се користи за избегавање колизија ако је системски сат враћен уназад.
  4. Генеришите вредност чвора од 48 битова, при чему је најнижи бит његовог првог бајта постављен на 1.
  5. Поставите битове верзије на 0001, а битове варијанте на 10.

У свим верзијама UUID-а, целокупан простор од 128 битова садржи 2^128, односно приближно 3,4 × 10^38, могућих вредности. Тај број је толико велики да случајне колизије нису практичан проблем.

Решени пример

Читање UUID-а верзије 4. Узмите ранији пример: 550e8400-e29b-41d4-a716-446655440000.

  • Трећа група, 41d4: прва цифра је 4, што означава да је ово UUID верзије 4.
  • Четврта група, a716: прва цифра, a (бинарно 1010), почиње са 10, захтеваним битовима варијанте.
  • Преостале хексадецималне цифре су случајни садржај.

Програм који чита овај UUID проверава образац 4 и 10 да би потврдио формат, а затим остатак третира као случајну вредност чији садржај не тумачи.

Прављење UUID-а верзије 1. Претпоставимо да сат показује 1.700.000.000.000 милисекунди Unix времена, што одговара датуму 14. новембар 2023. у 22:13:20 UTC.

  1. Додајте померај: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
  2. Помножите са 10.000 да бисте добили интервале од 100 наносекунди: 139,192,928,000,000,000. У хексадецималном запису то је 01EE833B04AFC000.
  3. Поделите га: time_low = 04AFC000 (најнижих 8 хексадецималних цифара), time_mid = 833B (следеће 4), а највиших 12 битова су 1EE.
  4. Ставите цифру верзије 1 испред 1EE, чиме се добија time_hi_and_version = 11EE.

UUID затим гласи 04afc000-833b-11ee-, након чега следе секвенца такта и вредност чвора. Софтвер може обрнути ова четири корака да би из идентификатора повратио датум 14. новембар 2023..

Уобичајене примене УУИД-ова

  • Примарни кључеви у базама података, нарочито када више сервера истовремено прави записе без међусобне координације.
  • Токени сесија и API кључеви, обично верзије 4 због заштите приватности коју пружа.
  • Идентификатори датотека, догађаја и ресурса у дистрибуираним системима као што су микросервиси.
  • Идентификатори уређаја у великим IoT мрежама, где сваки уређај може самостално да генерише свој идентификатор ван мреже.

Главни недостатак је величина: UUID заузима 16 бајтова простора за складиштење, у поређењу са 4 или 8 бајтова за једноставан целобројни бројач, а неке базе података индексирају UUID-ове спорије од секвенцијалних целих бројева.

Алтернативе УУИД-овима

Аутоматски увећавајући цели бројеви су мањи и једноставнији, али не функционишу добро када више од једног сервера треба независно да додељује идентификаторе. Snowflake идентификатори, које је развио Twitter, комбинују временску ознаку са идентификатором радника да би произвели компактне идентификаторе који се могу сортирати у дистрибуираном систему. УЛИД-ови (универзално јединствени лексикографски сортибилни идентификатори) су новији формат намењен томе да буде и случајан и сортибилан према времену настанка, за разлику од стандардног УУИД-а верзије 4.

Историја UUID стандарда

Концепт UUID-а настао је током 1980-их у компанији Apollo Computer, као део њеног система Network Computing System (систем за мрежно рачунарство). Open Software Foundation је касније усвојила формат за своје окружење Distributed Computing Environment (окружење за дистрибуирано рачунарство). Радна група за интернет инжењерство објавила је RFC 4122 у (10.500 cm) 2005, а заменила га документом RFC 9562 у мају 2024. RFC 9562 задржава све раније верзије у непромењеном облику и додаје верзије 6, 7 и 8.

Најчешће постављана питања

За шта се користи генератор UUID-ова? Он прави јединствене идентификаторе за базе података, дистрибуиране системе, токене сесија, API кључеве и идентификаторе уређаја, тако да ниједна два записа не морају да деле исти идентификатор.

Која је разлика између UUID-а v1 и v4? Верзија 1 кодира временску ознаку коју софтвер може да прочита како би повратио време настанка. Верзија 4 је потпуно случајна и не садржи временску ознаку. Излаз верзије 1 овог алата користи случајно генерисану вредност чвора уместо стварне MAC адресе, па не открива ни податке који идентификују машину.

Да ли верзија 1 открива моју MAC адресу? Не са овим алатом. Стандард дозвољава да поље чвора UUID-а верзије 1 садржи стварну MAC адресу, али овај генератор то поље увек попуњава случајним битовима и поставља бит који означава да вредност није стварна мрежна адреса.

Да ли је јединственост UUID-ова загарантована? Ниједна шема идентификатора не може да гарантује апсолутну јединственост, али простор од 128 битова садржи приближно 3,4 × 10^38 могућих вредности, а UUID верзије 4 има приближно 5,3 × 10^36 могућих случајних вредности. Вероватноћа дупликата је довољно мала да се може занемарити у готово свакој практичној примени.

Могу ли да користим UUID као примарни кључ базе података? Да. UUID-ови добро функционишу као примарни кључеви у дистрибуираним системима, јер сваки чвор може да генерише UUID без провере са централним сервером. Цена је 16 бајтова простора за складиштење по кључу, што је више од уобичајеног целог броја, као и потенцијално спорије индексирање веома великих табела.

Да ли је UUID исто што и GUID? Да. GUID (глобално јединствени идентификатор) је назив компаније Microsoft за исти концепт дефинисан документом RFC 4122 као UUID.

Могу ли се UUID-ови верзије 4 сортирати према времену настанка? Не. UUID-ови верзије 4 су случајни, па не садрже податак о томе када су направљени. UUID верзије 1 тај податак садржи, али се прво мора декодирати; сортирање текста не даје редослед настанка. Верзије 6 и 7 и ULID-ови пројектовани су тако да се могу директно сортирати као текст.

Литература

  1. Davis, K., Peabody, B. и Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
  2. Leach, P., Mealling, M. и Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
  3. Универзално јединствени идентификатор. У Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. У Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID спецификација. GitHub. https://github.com/ulid/spec