UUID Գեներատոր

Ստեղծեք ստանդարտ UUID-ներ առցանց: Այս էջն օգտագործում է պատահական UUID v4՝ 122 պատահական բիթերով և ծանոթ 36-նիշանոց տեսքով:

Ձևաչափ
Գեներացված ID-ներ
Պատրաստ է: Ստեղծեք UUID-ներ Ձեր բրաուզերում:

Ինչպես է կառուցված այս ID-ն

Կառուցվածք
UUID v4. 8-4-4-4-12 տասնվեցական խմբեր RFC տեսակի բիթերով:
Էնտրոպիա
122 պատահական բիթ. տարբերակը և տեսակը զբաղեցնում են 128-բիթանոց արժեքի 6 բիթը:
Ժամանակ
Ժամանակային դրոշմ կամ սարքի տվյալներ չեն կոդավորվում:
Բախման ռիսկ
Ծննդյան օրվա պարադոքսի սահմանը 122 պատահական բիթերի համար աննշան է սովորական հավելվածների, թեստերի և տվյալների բազաների ID-ների համար:
Օրինակ
24918401-e68c-46cf-aa5e-c22e6ef4db44

Ձեր ID-ները գեներացվում են տեղում՝ բրաուզերի հուսալի պատահականության միջոցով: BroBroGo-ին ոչինչ չի ուղարկվում:

Հաճախ տրվող հարցեր

Ի՞նչ տեսակի UUID է ստեղծում այս էջը:

Այն ստեղծում է UUID v4 արժեքներ՝ պատահական UUID-ներ ստանդարտ գծիկներով տեսքով: Օգտագործեք UUID v4 էջը, երբ ցանկանում եք նույն համակարգը՝ v4-ին ուղղված մանրամասներով:

Արդյո՞ք UUID-ները ուղարկվում են սերվեր:

Ոչ: Ստեղծումը կատարվում է Ձեր բրաուզերում Web Crypto API-ի միջոցով, ուստի արժեքները մնում են Ձեր սարքում:

UUID v4-ի ստեղծում. արագ, անվտանգ և հուսալի գեներատոր

UUID v4-ը (Universally Unique Identifier, տարբերակ 4) 36 նիշանոց պատահական տող է, որը կազմված է 32 տասնվեցական թվանշանից և չորս գծիկից (երբ գծիկները միացված են)։ Ստանդարտ 8-4-4-4-12 ձևաչափը յուրաքանչյուր UUID-ին տալիս է կանխատեսելի կառուցվածք, բայց բովանդակությունը լիովին պատահական է։ Այս էջի գեներատորն օգտագործում է բրաուզերի ուժեղ պատահականության աղբյուրները (cryptographic pseudorandom number generator)՝ 122 բիթ պատահականություն ապահովելու համար։ Դա նշանակում է, որ յուրաքանչյուր ստեղծված UUID-ն գործնականում անկրկնելի է, և բախման հավանականությունը չափազանց փոքր է։

Ի տարբերություն ժամանակի վրա հիմնված UUID v7-ի կամ ULID-ի, UUID v4-ը չի պարունակում ժամանակային դրոշմ։ Սա նշանակում է, որ նույնիսկ նույն վայրկյանում ստեղծված երկու UUID-ներ կարող են ունենալ բոլորովին տարբեր արժեքներ, և դրանք չեն դասավորվում ըստ ժամանակագրության։ Այս հատկությունը հանգեցնում է տվյալների բազայի ինդեքսների մասնատման (index fragmentation) երբ UUID v4-ն օգտագործվում է որպես առաջնային բանալի — տեսակավորման կամայական կարգը ստեղծում է լրացուցիչ էջային բաժանումներ (page splits) B-tree ինդեքսներում։

Ինչն է առանձնացնում այս էջը

Շատ գործիքներ պարզապես ցույց են տալիս մի քանի UUID-ներ, սակայն այս գեներատորն ունի մի քանի կարևոր առանձնահատկություններ, որոնք այն դարձնում են ավելի ճկուն և օգտակար մշակողների համար.

  • Քանակի վերահսկում. Դուք կարող եք ստեղծել 1-ից մինչև 100 UUID v4 արժեք միանգամից։ Ցանկացած պարամետրի փոփոխություն (քանակ, մեծատառ, գծիկներ) անմիջապես վերագեներացնում է ամբողջ ցանկը։
  • Մեծատառ և փոքրատառ. Լռելյայն UUID-ները ցուցադրվում են փոքրատառով (a-f), բայց կարող եք միացնել մեծատառ ռեժիմը (A-F)։ Սա չի փոխում ներքին արժեքը, միայն արտաքին տեսքը։
  • Գծիկների անջատում. Գծիկները կարելի է հեռացնել՝ ստանալով 32 նիշանոց տասնվեցական տող առանց բաժանարարների։ Օգտակար է, երբ UUID-ն անհրաժեշտ է ներդնել URL-ի մեջ կամ այնպիսի միջավայրում, որտեղ գծիկները թույլատրելի չեն։
  • Մեկ կամ բոլորի պատճենում. Ցանկացած UUID-ի վրա սեղմելով՝ այն պատճենվում է clipboard-ում։ «Copy all» կոճակը միանգամից պատճենում է բոլոր ցուցադրված արժեքները։
  • Տեղական մշակում. Ամբողջ գեներացիան կատարվում է բրաուզերում՝ օգտագործելով crypto.getRandomValues API-ն։ Ոչ մի տվյալ չի ուղարկվում սերվեր, ինչը երաշխավորում է գաղտնիությունն ու անվտանգությունը, ինչպես նաև թույլ է տալիս աշխատել առցանց և առանց ցանցի (եթե էջը բեռնված է)։

Ինչպես է աշխատում UUID v4-ի գեներացիան

UUID v4 ստանդարտը (RFC 4122) սահմանում է, որ 128 բիթանոց UUID-ի 122 բիթը պետք է լինի պատահական, մնացած 6 բիթը ֆիքսված է՝ 4 բիթ տարբերակի համար (հաստատուն 0100 = 4) և 2 բիթ տարբերակի ներսում (10xx տարբերակիչ)։ Այսպիսով, յուրաքանչյուր UUID v4 ունի 2^122 հնարավոր արժեք, ինչը կազմում է մոտ 5.3×10^36 եզակի համակցություն։ Բախման հավանականությունը նկարագրվում է ծննդյան պարադոքսի միջոցով — 2.71×10^18 UUID-ներ ստեղծելուց հետո բախման հավանականությունը կազմում է 50% (երբ 122 բիթ է)։ Գործնականում, նույնիսկ միլիարդավոր UUID-ներ ստեղծելու դեպքում, կրկնություն գրեթե անհնար է։

Բրաուզերում crypto.getRandomValues() ապահովում է կրիպտոգրաֆիկորեն ամուր պատահականություն՝ օգտագործելով համակարգի մակարդակի entropy-ն (օրինակ՝ /dev/urandom Linux-ում կամ CNG Windows-ում)։ Այս ֆունկցիան արտադրում է 8, 16, 32 կամ 64 բիթանոց ամբողջ թվերի զանգված, որոնք այնուհետև վերածվում են տասնվեցական թվանշանների և ձևաչափվում ըստ կարգավորումների։

Որ դեպքերում է UUID v4-ը լավագույն ընտրությունը

  • Անվտանգության նշաններ (security tokens). UUID v4-ի կանխատեսելիության բացակայությունը այն դարձնում է հարմար ժամանակավոր նշաններ ստեղծելու համար, ինչպիսիք են session IDs-ը, CSRF tokens-ը կամ API keys-ը (եթե ավելի մեծ entropy չի պահանջվում)։
  • Անկանխատեսելի բանալիներ. Երբ տվյալների բազայում անհրաժեշտ է եզակի բանալի, որը չի բացահայտում ինդեքսի աճի կամ տեղադրման ժամանակը, UUID v4-ը թաքցնում է այդ տեղեկությունը։
  • Անանուն տվյալներ. Եթե պահանջվում է ստեղծել կեղծ ID-ներ, որոնք ոչ մի կերպ կապված չեն իրական տվյալների հետ, ապա UUID v4-ը կատարյալ տարբերակ է։
  • Թեստային տվյալների ստեղծում. 100 միավոր ստեղծելու հնարավորությունը թույլ է տալիս արագ լրացնել թեստային միջավայրերը պատահական ID-ներով։
  • Արտաքին համակարգերի ID-ներ. Երբ ID-ն պետք է փոխանցվի տարբեր համակարգերի միջև, UUID v4-ի ձևաչափը ստանդարտ է և ընդունված գրեթե բոլոր պլատֆորմներում։

Սահմանափակումներ և խնդիրներ

UUID v4-ի ամենամեծ թերությունը տվյալների բազայի ինդեքսների վրա ունեցած ազդեցությունն է։ Ի տարբերություն auto-increment-ի կամ UUID v7-ի (որը պարունակում է ժամանակային դրոշմ), UUID v4-ն ունի պատահական տեսակավորում։ Սա նշանակում է, որ B-tree ինդեքսում նոր գրառումները չեն մտցվում միայն վերջում, այլ ցրվում են ամբողջ ծառի մեջ, ինչը հանգեցնում է էջերի հաճախակի բաժանման, կատարողականի նվազման և I/O-ի ավելացման։ Խոշոր տվյալների բազաներում (ավելի քան միլիոն տող) այս ազդեցությունը կարող է զգալի լինել։

Մյուս սահմանափակումը UUID-ի 36 նիշանոց տողն է, որը զբաղեցնում է ավելի շատ տարածք, քան ամբողջ թվերը (4 կամ 8 բայթ)։ 16 բայթ երկուական տեսքով պահելը կարող է նվազեցնել տարածքը, բայց ամեն դեպքում այն ավելի մեծ է, քան 4-բայթանոց int-ը։

Համեմատություն UUID v7-ի, ULID-ի և NanoID-ի հետ

Ֆորմատ Բիթեր Ժամանակային դրոշմ Տեսակավորում Օգտագործում
UUID v4 128 (122 պատահական) Ոչ Պատահական Անվտանգություն, եզակիություն
UUID v7 128 (62 ժամանակ + 62 պատահական) Այո (milisek) Ժամանակագրական Տվյալների բազայի բանալի
ULID 128 (48 ժամանակ + 80 պատահական) Այո (milisek) Ժամանակագրական Տվյալների բազա, մանրադիտակ
NanoID 64-126 (կախված երկարությունից) Ոչ Պատահական URL-ներ, կարճ ID-ներ

UUID v4-ն ապահովում է ամենաբարձր entropy-ն (122 բիթ) առանց ժամանակային տվյալների, ուստի այն ամենաանկանխատեսելին է։ ULID-ը և UUID v7-ն ավելի հարմար են տվյալների բազաների համար, քանի որ դրանք տեսակավորվում են ըստ ժամանակի, ինչը նվազեցնում է ինդեքսի մասնատումը։ NanoID-ն ավելի կարճ է, բայց ավելի քիչ entropy ունի (երկարությունը 21 նիշ 64-բիթանոց տարբերակում)։

Ինչպես օգտագործել գեներատորը

Էջը սկզբում ցույց է տալիս մեկ UUID v4՝ փոքրատառ, գծիկներով, «Ready.» կարգավիճակով։ Դուք կարող եք փոխել հետևյալ պարամետրերը.

  • Ձևաչափ (Format): Ընտրեք «UUID v4» մյուս տարբերակներից (UUID v7, ULID, NanoID)։ Այս հոդվածը կենտրոնանում է միայն UUID v4-ի վրա։
  • Քանակ (Count): Մուտքագրեք 1-100 միջակայքում։ Ցանկացած այլ արժեք չի ընդունվում։
  • Մեծատառ (Uppercase): Միացրեք toggle-ը՝ տառերը մեծացնելու համար (A-F)։ Սա փոխում է միայն ցուցադրումը, ոչ թե հիմքում ընկած 128-բիթանոց արժեքը։
  • Ընդգրկել գծիկները (Include hyphens): Անջատելով toggle-ը՝ կստանաք 32 նիշանոց տող առանց գծիկների։

Ցանկացած փոփոխություն անմիջապես վերագեներացնում է ամբողջ ցանկը, և կարգավիճակը փոխվում է «Generated.», ապա «Ready.» վերադառնում է միայն վերագեներացիայից հետո։ «Copy all»-ից հետո ցուցադրվում է «Copied all!» հաղորդագրությունը։

Հաճախ տրվող հարցեր

1. Ինչու՞ է UUID v4-ի երկարությունը 36 նիշ։

Որովհետև 128 բիթ = 16 բայթ, և յուրաքանչյուր բայթ ներկայացվում է երկու տասնվեցական թվանշանով (32 թվանշան) + 4 գծիկներ (8-4-4-4-12) = 36 նիշ։ Առանց գծիկների՝ 32 նիշ։

2. Կարո՞ղ է արդյոք UUID v4-ը կրկնվել։

Տեսականորեն՝ այո, բայց գործնականում հավանականությունը աննշան է։ 122 բիտ entropy նշանակում է, որ 2.71×10^18 UUID-ներ ստեղծելուց հետո 50% հավանականություն կա բախման (ծննդյան պարադոքս)։ Իրական օգտագործման մեջ բախումը գրեթե անհնար է, եթե random bit-ների աղբյուրը որակյալ է (ինչպես crypto.getRandomValues)։

3. Ինչո՞ւ պետք է անջատել գծիկները։

Երբ UUID-ն օգտագործվում է URL-ի մեջ (օրինակ՝ api.example.com/uuid/), գծիկները կարող են խնդիրներ ստեղծել (չնայած դրանք URL-valid են)։ Դրանք նաև ավելորդ են, եթե UUID-ն պահվում է տվյալների բազայում որպես 32 նիշանոց տող կամ երկուական տեսքով։ Որոշ համակարգեր (օրինակ՝ Windows Registry) չեն ընդունում գծիկներ UUID-ում։

4. Որքա՞ն է UUID v4-ի հավանականությունը, որ այն չի կանխատեսվի։

Եթե random generator-ը կրիպտոգրաֆիկորեն ամուր է (ինչպես crypto.getRandomValues), ապա 122 բիթը ապահովում է 5.3×10^36 հնարավոր արժեք։ Հարձակվողը չի կարող կանխատեսել արժեքը, եթե նա չունի մուտք դեպի entropy աղբյուրը կամ random state-ը։ Սա UUID v4-ը դարձնում է հարմար անվտանգության նշանների համար, չնայած 128 բիթը ավելի քիչ է, քան 256-բիթանոց API keys-ը։

5. Ինչպե՞ս է ազդում UUID v4-ը MySQL-ի կամ PostgreSQL-ի աշխատանքի վրա։

MySQL-ում uuid() ֆունկցիան ստեղծում է UUID v1 (ժամանակի վրա հիմնված) կամ v4՝ կախված տարբերակից։ UUID v4-ը B-tree ինդեքսում (ինքնուրույն տեսակավորված) առաջացնում է մեծ մասնատում, քանի որ նոր մուտքերը տեղադրվում են պատահական հերթականությամբ։ PostgreSQL-ում uuid-ossp ընդլայնումը ունի նույն խնդիրը, բայց 8.3-ից հետո uuid_generate_v4-ը աշխատում է ավելի արդյունավետ, քանի որ UUID-ը պահվում է երկուական տեսքով (128 բիթ)։ Ամեն դեպքում, ժամանակային UUID v7-ն ավելի լավ է տվյալների բազաների համար։