Прескочи към съдържанието

Безплатен генератор на UUID - Създайте V1 и V4 UUID идентификатори мигновено

Генерирайте уникални идентификатори мигновено с нашия безплатен генератор на UUID. Създайте Version 1 (базирани на време) и Version 4 (случайни) UUID идентификатори за бази данни, API и разпределени системи.

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

Версия на UUID
Генериран UUID
Калкулатор за зареждане...
📚

Документация

Генератор на 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

UUID се определят от RFC 9562, публикуван от Работната група за интернет инженерство през май 2024, който замени по-стария RFC 4122 от 2005. И двата документа описват един и същ формат от 128 бита. Софтуерът ги използва за идентифициране на редове в бази данни, файлове, потребителски сесии и други записи, без да е необходим централен орган, който да раздава номера. Тъй като множеството от възможни UUID е толкова голямо, два компютъра могат независимо да генерират UUID едновременно и почти никога да не създадат еднакъв.

Формат и структура на 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. Изберете „Генериране“, за да създадете друг UUID.
  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, възможни UUID от версия 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 г. от идентификатора.

Обичайни приложения на UUID

  • Първични ключове в бази данни, особено когато няколко сървъра създават записи едновременно, без да се координират помежду си.
  • Токени на сесии и API ключове, обикновено от версия 4 заради предлаганата поверителност.
  • Идентификатори за файлове, събития и ресурси в разпределени системи, например микросървиси.
  • Идентификатори на устройства в големи IoT мрежи, където всяко устройство може да генерира собствения си идентификатор офлайн.

Основният компромис е размерът: UUID заема 16 байта памет в сравнение с 4 или 8 байта за обикновен целочислен брояч, а някои бази данни индексират UUID по-бавно от последователните цели числа.

Алтернативи на UUID

Автоматично увеличаващите се цели числа са по-малки и по-прости, но не работят добре, когато повече от един сървър трябва независимо да раздава идентификатори. Идентификаторите Snowflake, разработени в Twitter, комбинират времева отметка с идентификатор на работник, за да създават компактни, сортируеми идентификатори в разпределена система. ULID (универсално уникални лексикографски сортируеми идентификатори) е по-нов формат, предназначен да бъде едновременно случаен и сортируем по време на създаване, за разлика от стандартен UUID от версия 4.

История на стандарта за UUID

Концепцията за UUID възниква през 1980-те години в Apollo Computer като част от нейната мрежова изчислителна система. По-късно Open Software Foundation приема формата за своята разпределена изчислителна среда. Работната група за интернет инженерство публикува 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 работят добре като първични ключове в разпределени системи, защото всеки възел може да създаде такъв без проверка с централен сървър. Цената е 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. В Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. Спецификация на ULID. GitHub. https://github.com/ulid/spec