Безплатен генератор на UUID - Създайте V1 и V4 UUID идентификатори мигновено
Генерирайте уникални идентификатори мигновено с нашия безплатен генератор на UUID. Създайте Version 1 (базирани на време) и Version 4 (случайни) UUID идентификатори за бази данни, API и разпределени системи.
Генератор на 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
2UUID се определят от 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 бита
Четири бита в time_hi_and_version съдържат номера на версията на UUID, а два бита в clock_seq_hi_and_reserved съдържат варианта, който указва на софтуера как да прочете останалите полета. Определени са осем версии.
Имената на полетата по-горе идват от версия 1, при която те действително съдържат стойности за време и възел. Другите версии запазват същото разположение 8-4-4-4-12 и същите граници на полетата, но запълват повечето битове със случайни данни. В UUID от версия 4 групата с етикет time_low е случайна, а не представлява време.
Как да генерирате UUID с този инструмент
- Изберете версия: версия 1 (на основата на времето) или версия 4 (случайна).
- Прочетете UUID в полето с резултата. Нов UUID се появява веднага щом страницата се зареди или версията се промени.
- Изберете „Генериране“, за да създадете друг UUID.
- Изберете „Копиране“, за да копирате резултата в клипборда, след което го поставете в код, база данни или конфигурационен файл.
Панелът под резултата разделя 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:
- Генерирайте 128 случайни бита.
- Задайте четирите бита на версията, тоест първата шестнадесетична цифра на третата група, на
0100(шестнадесетично4). - Задайте двата най-старши бита на четвъртата група на
10(така че първата шестнадесетична цифра на тази група да бъде8,9,aилиb).
Само 122 от 128-те бита са действително случайни, тъй като 6 бита са фиксирани от стъпки 2 и 3. Това дава 2^122, или приблизително 5,3 × 10^36, възможни UUID от версия 4.
Версия 1:
- Вземете текущото време като брой интервали от 100 наносекунди от 15 октомври 1582 г., датата на реформата на Григорианския календар. На практика това е обичайното Unix време в милисекунди плюс 12 219 292 800 000, като всичко се умножи по 10 000.
- Разделете този брой от 60 бита между три полета: най-младшите 32 бита отиват в
time_low, следващите 16 – вtime_mid, а най-старшите 12 – вtime_hi_and_version. - Генерирайте последователност на часовника от 14 бита, използвана за избягване на сблъсъци, ако системният часовник бъде върнат назад.
- Генерирайте стойност на възела от 48 бита, като най-младшият бит на първия му байт е зададен на 1.
- Задайте битовете на версията на
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 700 000 000 000 + 12 219 292 800 000 = 13 919 292 800 000 ms.
- Умножете по 10 000, за да получите интервали от 100 наносекунди: 139,192,928,000,000,000. В шестнадесетичен вид това е
01EE833B04AFC000. - Разделете го:
time_low=04AFC000(най-младшите 8 шестнадесетични цифри),time_mid=833B(следващите 4), а най-старшите 12 бита са1EE. - Поставете цифрата на версията
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 са предназначени за директно сортиране като текст.
Източници
- Davis, K., Peabody, B. и Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
- Leach, P., Mealling, M. и Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
- Универсално уникален идентификатор. В Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Идентификатор Snowflake. В Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- Спецификация на ULID. GitHub. https://github.com/ulid/spec