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 комбинира временски печат со случаен идентификатор на јазол кај кој битот за мултикаст е поставен, па никогаш не ја содржи адресата на вашата мрежна картичка како што правеа оригиналните имплементации од 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 како примарен клуч, и тоа не е прашање на вкус. Индексите во базите на податоци се дрвја кои се одржуваат во подреден редослед, и местото каде што новиот клуч паѓа во тој редослед одредува колку работа чини вметнувањето. Клучот v4 е случаен, па последователните вметнувања паѓаат во неповрзани агли на индексот: страниците што биле полни се делат, деловите од дрвото кои базата ги држи во меморија ретко се оние кои му требаат на следното вметнување, а индексот на крајот станува поголем и пофрагментиран отколку што оправдуваат редовите кон кои покажува. Клучот v7 започнува со тековната милисекунда, па последователните вметнувања паѓаат едно до друго на десниот раб од дрвото, што е шемата која ја произведува авто-инкрементирачки цел број и шемата околу која се изградени структурите на индексите. Целиот компромис е во тоа: v7 ви го дава однесувањето при вметнување на секвенцијален клуч, притоа задржувајќи го својството поради кое воопшто сте избрале UUID, а тоа е дека секој може да генерира таков клуч без да праша сервер. Она што чини е фактот дека времето на креирање сега е читливо внатре во идентификаторот, а дали тоа е важно е прашање за вашите податоци, а не за форматот.

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

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

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

UUID се појавуваат секаде каде што нешто треба да се именува пред било што да може да потврди дека името е слободно. Кодот на апликацијата ги креира за редовите што ќе ги вметне, така што објектот има идентитет пред воопшто да стигне до базата на податоци, а клиентот може да се повика на него додека запишувањето сè уште е во тек. Дистрибуираните системи уште повеќе се потпираат на нив: неколку сервиси кои запишуваат во една табела, офлајн мобилен клиент што креира записи во авион, редица што треба да го препознае пораката што веќе ја обработила — ниту едно од овие не може да го чека својот ред за заеднички бројач. Верзијата 5 покрива поинаква потреба, а тоа е стабилен идентификатор изведен од нешто што веќе го имате: истиот документ, истото URL или истата сметка секогаш се мапираат на истиот UUID, така што импортот може да се изврши двапати без ништо да се дуплира. На други места тие едноставно се форматот кој системот го бара — идентификатор за корелација провлечен низ логови и траги, име на датотека што нема да направи колизија кога аплоадирањата од илјада корисници ќе завршат во еден бакет, 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 ако идентификаторот станува примарен клуч и перформансите на вметнување се важни, верзија 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-адреси, историјата на прелистувачите, логовите на серверите, реферер-хедерите и аналитиката. Верзиите 1 и 7 дополнително откриваат кога се креирани, а верзиите 3 и 5 може да ги пресмета секој кој ги знае влезовите. За било што што мора да остане тајно, користете генератор на лозинки или токен од библиотека наменета за тајни.

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

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

Дали UUID v1 ја открива мојата MAC адреса?

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

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

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