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 комбинира времевия маркер със случаен идентификатор на възела, в който е зададен мултикаст битът, така че никога не носи адреса на вашата мрежова карта, както правеха оригиналните реализации от 90-те години. Версии 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-tree), които се поддържат сортирани, и мястото, където нов ключ попада в тази подредба, определя колко работа струва вмъкването. Ключът v4 е случаен, така че последователните вмъквания попадат в несвързани краища на индекса: страниците (pages), които са били пълни, се разцепват (page split), частите от дървото, които базата данни държи в паметта, рядко са тези, които ще трябват за следващото вмъкване, и в крайна сметка индексът става по-голям и по-фрагментиран, отколкото редовете, към които сочи, изискват. Ключът v7 започва с текущата милисекунда, така че последователните вмъквания попадат едно до друго в десния край на дървото — моделът, който създава автоматично нарастващо цяло число и около който са изградени структурите на индексите. Това е целият компромис: v7 ви дава поведението при вмъкване на последователен ключ, като същевременно запазва свойството, заради което сте избрали UUID на първо място, а именно, че всеки може да генерира такъв без да пита сървър. Цената за това е, че времето на създаване вече може да се прочете от идентификатора, и дали това има значение е въпрос, свързан с вашите данни, а не с формата.

Нищо никога не проверява UUID за уникалност; неговият размер е гаранцията. Няма регистър, няма запитване до сървър, няма търсене — генераторът създава число и го предава, а причината две от тях да не се сблъскат е просто, че има 2^122 възможни стойности за v4, около 5,3 ундецилиона. Парадоксът на рождения ден е най-честният начин за оценка на този мащаб: ще ви трябват приблизително 2,7 квинтилиона идентификатора, преди да има 50% шанс кои да е два от тях да съвпаднат, което означава един милиард нови UUID всяка секунда в продължение на 86 години. Струва си да бъдем точни какво това обещава и какво не. Това е статистическа гаранция, а не аритметична, и тя е валидна само докато случайността е истинска — лошо инициализиран генератор или виртуална машина, клонирана заедно с нейния ентропиен пул, я нарушават по начин, който форматът не може да открие. Версия 7 стеснява въпроса още повече: в рамките на една милисекунда един генератор изобщо не може да се повтори, защото броячът се увеличава, вместо да хвърля зарове, а при независими генератори 62-те случайни бита вършат работата.

UUID е идентификатор, а не парола. Версия 4 е непредсказуема и това изкушава хората да се отнасят към нея като към тайна — линк за нулиране на парола, непознаваем URL адрес, сесиен токен, API ключ. Непредсказуемостта е реална, но секретността е свойство на това как се борави с дадена стойност, а с идентификаторите по дизайн се борави невнимателно: те попадат в URL адреси, които остават в историята на браузъра, сървърните логове, заглавките referrer и анализите, и се поставят в съобщения в чатове. Останалите версии са още по-лоши кандидати. Версия 1 и версия 7 кодират момента на създаване, така че всеки, който притежава такъв, знае приблизително кога е създаден и може да стесни кръга на всичко, направено покрай него. Версии 3 и 5 са умишлено детерминистични: v5 UUID на имейл адрес не е хеширана тайна, това е стойност, която всеки със същия адрес може да изчисли за секунда. Използвайте UUID, за да именувате неща. Използвайте генератор на пароли или токен от библиотека, предназначена за тайни, когато стойността трябва да остане неизвестна.

Защо да изберете този генератор на UUID?

UUID се появяват навсякъде, където нещо трябва да бъде именувано, преди някой да може да потвърди, че името е свободно. Кодът на приложението ги генерира за редове, които предстои да вмъкне, така че обектът има идентичност, още преди да е стигнал до базата данни, и клиентът може да се позовава на него, докато записът все още се изпълнява. Разпределените системи разчитат на тях още повече: няколко услуги, записващи в една таблица, мобилен клиент в офлайн режим, създаващ записи в самолет, опашка, която трябва да разпознае съобщение, което вече е обработила — нито едно от тях не може да чака реда си за споделен брояч. Версия 5 покрива различна нужда — това е стабилен идентификатор, извлечен от нещо, което вече имате: същият документ, същият URL адрес или същият акаунт винаги се съпоставя със същия UUID, така че един импорт може да се изпълни два пъти, без да дублира нищо. На други места те са просто форматът, който дадена система изисква — корелационен идентификатор в логове и трейсове (traces), име на файл, което няма да съвпадне, когато качвания от хиляда потребители попаднат в един бакет, ключ в системния регистър на Windows, или тестови данни, които трябва да изглеждат като истински.

Струва си да знаете няколко честни ограничения. Една партида е една версия: стойността в полето Версия се прилага за всичко в нея, така че генериране на v4 и генериране на v7 са две отделни партиди. Това е генератор, а не инспектор — поставянето на UUID, за да прочетете неговата версия или времеви маркер, не е нещо, което тази страница прави. Запази във файл записва обикновен текстов файл, а не CSV или JSON. Версия 7 открито разкрива кога е създадена, с точност до милисекунда, което е реален компромис, а не недостатък, и версия 1 разкрива времето по същия начин; ако това е проблем за вашите данни, версия 4 е версията, която не казва на никого нищо. Две специални стойности от стандарта не са версии и следователно не са опции във Версия, но можете да ги копирате от тук: nil UUID, 00000000-0000-0000-0000-000000000000, и max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Всичко на тази страница следва RFC 9562, спецификацията, която замени RFC 4122 през 2024 г., така че резултатът се приема от всяка библиотека, база данни или API, които изобщо работят с UUID. В рамките на тези ограничения гаранцията е много силна: всеки идентификатор е изграден според стандарта, от криптографски сигурна случайност, на вашата собствена машина, и никой друг никога не го вижда.

FAQ

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

Изберете версия в полето Версия, задайте колко ви трябват в Брой и натиснете Генерирай. Страницата се отваря с един идентификатор от версия 4, което е това, което повечето проекти изискват, така че един обикновен UUID е само на един клик разстояние. Всяка стойност се появява със собствен бутон за копиране, а Копирай всичко взима цялата партида наведнъж.

Каква е разликата между UUID v4 и v7?

Версия 4 се състои от 122 случайни бита без абсолютно никаква структура, така че два от тях нямат никаква връзка помежду си. Версия 7 отделя първите 48 бита за милисекундата, в която е създадена, добавя брояч и 62 случайни бита, и следователно може да се сортира: партидата излиза в реда, в който е създадена. Използвайте v4, когато даден идентификатор просто трябва да бъде уникален, и v7, когато той ще бъде и ключ в база данни.

Коя версия на UUID трябва да използвам?

Версия 4, освен ако нямате причина да изберете друга. Изберете версия 7, ако идентификаторът ще стане първичен ключ (primary key) и производителността при вмъкване е от значение, версия 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 години — преди шансът за едно-единствено съвпадение да стане 50%. Гаранцията е статистическа, а не абсолютна, и зависи от това дали случайността е истинска, което е причината този генератор да използва Web Crypto API вместо обикновена псевдослучайна функция.

Мога ли да използвам UUID като парола, API ключ или сесиен токен?

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

Разкрива ли UUID v7 кога е създаден?

Да, с точност до милисекунда, и това е направено нарочно, а не е пропуск — времевият маркер е това, което прави v7 сортируем. Редът под резултата ви показва времето, кодирано в първата стойност от партидата, за да можете да видите точно какво се разкрива. Версия 1 също носи времеви маркер. Ако времето на създаване е нещо, което предпочитате да не публикувате, версия 4 изобщо не съдържа време.

Разкрива ли UUID v1 моя MAC адрес?

Не и тук. Оригиналната схема използваше адреса на мрежовата карта на машината като поле за възел (node field), откъдето идва и репутацията на v1, но стандартът също така позволява случаен идентификатор на възел, маркиран с мултикаст бит, и точно това генерира този инструмент. Вашият хардуерен адрес никога не се чете и никога не се появява в резултата.

Какво променят опциите Главни букви, Без тирета, Фигурни скоби и urn:uuid:?

Само представянето — 128-те бита отдолу са идентични във всяка форма. Главни букви отпечатва шестнадесетичните цифри в горен регистър, Без тирета дава компактната 32-символна версия, Фигурни скоби обгръща стойността в { } (така, както Windows и .NET записват GUID), а urn:uuid: добавя префикса, който го прави официално URN. Когато urn:uuid: е включено, то изключва другите две опции, тъй като стандартът дефинира точно една URN форма и това е каноничната форма с тирета.