UUID ģenerators

Ģenerējiet UUID savā pārlūkprogrammā: pilnībā nejaušus v4, laikā sakārtotus v7 vai deterministiskus v5. Līdz 1000 vienlaikus, un nekas nepamet jūsu ierīci.

Nospiediet Ģenerēt, lai izlozētu
Versija
Papildu iestatījumi

Vai nepieciešams identifikators, kas nesakritīs ar cita izveidotu identifikatoru datorā, par kuru nekad neesat dzirdējis, un nevienam neprasot atļauju? Tieši to dara UUID. Tas ir 128 bitu skaitlis, kas tiek rakstīts kā 36 rakstzīmes parastajā 8-4-4-4-12 formātā, un tā pamatā ir tas, ka divi šādi skaitļi nekad nebūs vienādi, pat ja nekas nekoordinē to sadali. Šis bezmaksas ģenerators izveido tos jūsu pārlūkprogrammā: izvēlieties versiju laukā „Versija”, norādiet vajadzīgo daudzumu laukā „Skaits” un nospiediet „Ģenerēt”. Lapa tiek atvērta ar vienu v4 identifikatoru, kas ir lielākajai daļai projektu nepieciešamā versija, tāpēc pirmais identifikators ir pieejams ar vienu klikšķi.

Katra identifikatora izveidi nodrošina jūsu pārlūkprogramma, izmantojot Web Crypto API. 4. versijai (v4) tiek izmantots crypto.randomUUID(), ja pārlūkprogramma to atbalsta, vai crypto.getRandomValues() pretējā gadījumā – kriptogrāfiski drošs nejaušības avots, nevis JavaScript pseidonejaušā funkcija, piemēram, Math.random(). 7. versija (v7) sākumā iekļauj 48 bitu laikspiedolu ar milisekunžu precizitāti, kam seko 12 bitu skaitītājs, kas palielinās vienas milisekundes ietvaros, un 62 nejauši biti – šī ir RFC 9562 aprakstītā kārtošanas metode; pateicoties šim skaitītājam, tūkstoš identifikatoru partija tiek ģenerēta secīgi, nevis sajauktā secībā. 1. versija (v1) apvieno laikspiedolu ar nejaušu mezgla identifikatoru, kuram ir iestatīts multiraides bits, tāpēc tā nekad nesatur jūsu tīkla kartes adresi, kā to darīja sākotnējās 1990. gadu realizācijas. 3. un 5. versija (v3 un v5) vispār nav nejauša: tā jauc (hash) vārdtelpu kopā ar nosaukumu, izmantojot attiecīgi MD5 un SHA-1, un šī jaukšana arī notiek jūsu ierīcē. Nekas netiek sūtīts uz serveri, nekas netiek reģistrēts, un, tiklīdz lapa ir ielādēta, tā turpina darboties pat bez interneta savienojuma.

„Versija” ir lauks, kas izšķir visu pārējo. 4. versija sastāv no 122 nejaušiem bitiem bez jebkādas struktūras – tā ir noklusējuma izvēle un pareizā atbilde gadījumos, kad identifikatoram vienkārši jābūt unikālam. 7. versija saglabā 62 nejaušus bitus, bet sākas ar tās izveides laiku, tāpēc to kopa tiek sakārtota to izveidošanas secībā; tieši tādēļ šī versija jāizvēlas, kad identifikators kļūs par datubāzes atslēgu. 1. versija ir sākotnējā laikā balstītā shēma, kas šeit saglabāta sistēmām, kuras to joprojām pieprasa. 3. un 5. versija ir neparasts pāris: tās ir deterministiskas, kas nozīmē, ka vieni un tie paši ievades dati vienmēr rada to pašu identifikatoru, un tām nepieciešami divi papildu lauki – „Vārdtelpa”, kas ir viena no standarta telpām DNS, URL, OID un X.500 vai jūsu izveidota pielāgota telpa („Pielāgots”), un „Nosaukums”, kas ir identificējamā virkne. Norādiet v5 identifikatoram URL vārdtelpu un https://example.com/a, un jūs saņemsiet to pašu UUID šodien, rīt un cita lietotāja datorā. Šī iemesla dēļ „Skaits” pazūd, ja izvēlēta v3 vai v5 versija: tūkstoš deterministiskas vērtības kopijas būtu vienkārši tūkstoš kopijas vienai un tai pašai vērtībai. Visām pārējām versijām skaits laukā „Skaits” var būt no 1 līdz 1000.

Četri slēdži maina rezultāta formu, nemainot zem tās esošos 128 bitus. „Lielie burti” attēlo heksadecimālos ciparus ar versāliem, „Bez defisēm” nodrošina kompakto 32 rakstzīmju formu, kurai dod priekšroku noteiktas kolonnas un failu nosaukumi, un „Figūriekavas” iekļauj vērtību starp { } – formā, ko Windows un .NET pasaule dēvē par GUID. Sadaļā „Papildu iestatījumi” esošais urn:uuid: pievieno prefiksu, kas to padara par formālu URN; tā ieslēgšana izslēdz laukus „Figūriekavas” un „Bez defisēm”, jo standarts pieļauj tikai vienu URN formu, un tā ir kanoniskā forma ar defisēm. „Kopēšanas formāts” nosaka, kā partija tiek apvienota tās kopēšanas laikā: pa vienam rindā, atdalīti ar komatiem, vai katra vērtība pēdiņās, kam seko komats, ko var tieši iekopēt koda masīvā. Zem rezultāta ir redzama rinda, kas norāda nejaušību bitos – 122 bitu v4 versijai, 62 bitu v7 versijai – un, v7 gadījumā, partijas pirmajā identifikatorā iekodēto laikspiedolu, lai vērtībā ietvertais laiks būtu redzams, nevis netiešs. Gan „Kopēt visu”, gan „Saglabāt failā” ievēro „Kopēšanas formāts” iestatījumus. „Vēsture” jūsu pārlūkprogrammā saglabā 10 pēdējās partijas: noklikšķiniet uz vienas no tām, lai to atjaunotu, kopējiet vai dzēsiet atsevišķu ierakstu, vai notīriet visu sarakstu. Poga „Notīrīt” iztukšo rezultātu un atstāj jūsu iestatījumus nemainītus, un pēc 50 identifikatoriem saraksts kļūst par vienu ritināmu bloku, nevis piecdesmit rindām.

Visbūtiskākā atšķirība šajā lapā ir starp v4 un v7 kā primāro atslēgu, un tas nav gaumes jautājums. Datubāzu indeksi ir koki, kas tiek uzturēti sakārtotā secībā, un tas, kur jaunā atslēga nonāk šajā secībā, nosaka tās ievietošanas darbietilpību. v4 atslēga ir nejauša, tāpēc secīgi ievietojumi nonāk nesaistītos indeksa stūros: lapas, kas bija pilnas, tiek sadalītas, koka daļas, kuras datubāze glabā atmiņā, reti ir tās, kas nepieciešamas nākamajai ievietošanai, un indekss kļūst lielāks un vairāk fragmentēts, nekā to pamato rindas, uz kurām tas norāda. v7 atslēga sākas ar pašreizējo milisekundi, tāpēc secīgi ievietojumi nonāk blakus viens otram koka labajā malā, kas atbilst automātiski pieaugoša veselā skaitļa modelim, un tas ir modelis, ap kuru tika veidotas indeksu struktūras. Tā ir galvenā kompromisa būtība: v7 sniedz jums secīgas atslēgas ievietošanas uzvedību, vienlaikus saglabājot īpašību, kuras dēļ sākotnēji izvēlējāties UUID — ikviens var izveidot identifikatoru, to neprasot serverim. Par to nākas maksāt ar to, ka izveides laiks identifikatorā tagad ir nolasāms, un tas, vai tam ir nozīme, ir jautājums par jūsu datiem, nevis par formātu.

Nekas nekad nepārbauda UUID unikālumu; tā izmērs ir garantija. Nav nekāda reģistra, nav datu apmaiņas ar serveri, nav meklēšanas – ģenerators izveido skaitļus un tos nodod, un iemesls, kāpēc divi no tiem nesakrīt (neveido sadursmi), ir vienkārši tas, ka ir 2^122 iespējamās v4 vērtības, kas ir aptuveni 5,3 sekstiljoni. Dzimšanas dienas paradokss ir godīgs veids, kā to novērtēt: jums būtu nepieciešami aptuveni 2,7 triljoni identifikatoru, pirms pastāvētu 50% iespēja, ka jebkuri divi no tiem sakrīt, kas nozīmē ģenerēt miljardu jaunu UUID katru sekundi 86 gadus. Ir vērts precīzi apzināties, ko tas sola un ko nē. Tā ir statistiska, nevis aritmētiska garantija, un tā ir spēkā tikai tad, ja pamatā esošā nejaušība ir patiesa – slikti inicializēts ģenerators vai virtuālā mašīna, kas klonēta kopā ar tās entropijas fondu, to sabojā tā, kā formāts to nespēj atklāt. 7. versija šo jautājumu sašaurina vēl vairāk: vienas milisekundes ietvaros ģenerators vispār nespēj atkārtoties, jo skaitītājs palielinās secīgi, nevis metot kauliņus, bet starp neatkarīgiem ģeneratoriem galveno darbu paveic 62 nejaušie biti.

UUID ir identifikators, nevis parole. 4. versija ir neparedzama, un tas vilina cilvēkus to izmantot kā noslēpumu – paroles atiestatīšanas saiti, neuzminamu URL, sesijas pilnvaru (token), API atslēgu. Neparedzamība ir reāla, taču slepenība ir atkarīga no tā, kā vērtība tiek apstrādāta, un identifikatori pēc to būtības tiek apstrādāti neuzmanīgi: tie parādās URL adresēs, kas nonāk pārlūkprogrammu vēsturē, serveru žurnālos, norāžu galvenēs (referer headers) un analītikā, kā arī tiek ielīmēti tērzēšanas ziņojumos. Citas versijas ir vēl sliktāki kandidāti. 1. un 7. versija iekodē tās izveides laiku, tāpēc ikviens, kuram tas ir, zina aptuveno izveides brīdi un var sašaurināt to objektu loku, kas tika izveidoti tajā pašā laikā. 3. un 5. versija apzināti ir deterministiskas: e-pasta adreses v5 UUID nav jaukts noslēpums, tā ir vērtība, ko ikviens ar šo pašu adresi var aprēķināt sekundes laikā. Izmantojiet UUID, lai piešķirtu objektam nosaukumu. Ja vērtībai jāpaliek nezināmai, izmantojiet paroļu ģeneratoru vai noslēpumiem paredzētas bibliotēkas pilnvaru.

Kāpēc izvēlēties šo UUID ģeneratoru?

UUID tiek izmantoti visur, kur nepieciešams kaut kam piešķirt nosaukumu vēl pirms var apstiprināt, ka šis nosaukums ir brīvs. Lietojumprogrammas kods tos izveido rindām, kuras tas grasās ievietot, tāpēc objektam ir identitāte, vēl pirms tas ir sasniedzis datubāzi, un klients uz to var atsaukties pat tad, kad ierakstīšanas process vēl noris. Izkliedētās sistēmas uz tiem paļaujas vēl vairāk: vairāki servisi, kas raksta vienā tabulā, mobilais klients, kas ierakstus veido lidmašīnā (bezsaistē), vai rinda, kurai jāatpazīst ziņojums, kas jau ir apstrādāts – neviena no šīm sistēmām nevar gaidīt savu rindu pie koplietošanas skaitītāja. 5. versija atrisina atšķirīgu vajadzību, kas ir stabils identifikators, kas atvasināts no tā, kas jums jau ir: viens un tas pats dokuments, viens un tas pats URL vai viens un tas pats konts vienmēr atbilst tam pašam UUID, tādēļ datu importu var veikt divreiz, nedublējot nevienu ierakstu. Citur tie vienkārši ir sistēmas pieprasīts formāts – korelācijas identifikators, kas izmantots caur žurnāliem un izsekošanu, faila nosaukums, kas neradīs sadursmes, kad tūkstoš lietotāju augšupielādes nonāks vienā glabātuvē (bucket), Windows reģistra atslēga, vai testa dati, kuriem jāizskatās kā īstiem datiem.

Ir vērts zināt dažus godīgus ierobežojumus. Viena partija atbilst vienai versijai: laukā „Versija” norādītā vērtība attiecas uz visu partiju, tādēļ v4 un v7 ģenerēšana ir divas atsevišķas partijas. Tas ir ģenerators, nevis inspektors – šī lapa nepiedāvā funkciju ievietot UUID, lai nolasītu tā versiju vai laikspiedolu. Poga „Saglabāt failā” ieraksta vienkārša teksta failu, nevis CSV vai JSON. 7. versija atklāti parāda savu izveides laiku līdz pat milisekundei, kas ir reāls kompromiss, nevis trūkums, un 1. versija nopludina laiku tieši tādā pašā veidā; ja jūsu datiem tā ir problēma, 4. versija ir tā, kas nevienam neko neatklāj. Divas īpašas standarta vērtības netiek uzskatītas par versijām, tāpēc tās nav iekļautas „Versija” opcijās, bet jūs tās varat nokopēt no šejienes: nil UUID, 00000000-0000-0000-0000-000000000000, un max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Viss šajā lapā atbilst RFC 9562 standartam (specifikācijai, kas 2024. gadā aizstāja RFC 4122), tādēļ izveidoto rezultātu pieņems jebkura bibliotēka, datubāze vai API, kas vispār atbalsta UUID apstrādi. Šajos ietvaros garantija ir stingra: katrs identifikators ir izveidots atbilstoši standartam, iegūts no kriptogrāfiski drošas nejaušības, to izveidojot jūsu pašu datorā, un neviens cits to nekad neredzēs.

FAQ

Kā ģenerēt UUID?

Izvēlieties versiju laukā „Versija”, norādiet vajadzīgo daudzumu laukā „Skaits” un nospiediet „Ģenerēt”. Lapa tiek atvērta ar vienu 4. versijas identifikatoru, kas nepieciešams lielākajai daļai projektu, tādējādi parasts UUID ir pieejams ar vienu klikšķi. Katra vērtība tiek parādīta ar atsevišķu kopēšanas pogu, un „Kopēt visu” uzreiz iekopē visu partiju.

Kāda ir atšķirība starp UUID v4 un v7?

4. versija satur 122 nejaušus bitus bez jebkādas struktūras, tādēļ diviem šādiem identifikatoriem nav savstarpējas saistības. 7. versija pirmos 48 bitus izmanto to izveidošanas milisekundes noteikšanai, pievieno skaitītāju un 62 nejaušus bitus, un tādējādi ir kārtojama: partija tiek sakārtota izveidošanas secībā. Izmantojiet v4, kad identifikatoram vienkārši jābūt unikālam, un v7, kad tas kļūs arī par datubāzes atslēgu.

Kuru UUID versiju man vajadzētu izmantot?

Izmantojiet 4. versiju, ja vien jums nav konkrēta iemesla izvēlēties citu. Izvēlieties 7. versiju, ja identifikators kļūs par primāro atslēgu un ievietošanas ātrdarbība ir svarīga. Izvēlieties 5. versiju, ja nepieciešams, lai vieni un tie paši ievades dati vienmēr ģenerētu vienu un to pašu identifikatoru. 1. versiju izmantojiet tikai tad, ja to īpaši pieprasa sistēma, ar kuru jāsazinās. 3. versija ir 5. versija ar MD5, nevis SHA-1, un tā pastāv tikai saderības nolūkos.

Vai ģenerētie UUID ir patiesi nejauši un droši?

Nejaušība ir kriptogrāfiski droša: tā nāk no jūsu pārlūkprogrammas Web Crypto API, izmantojot crypto.randomUUID() vai crypto.getRandomValues(), nevis no Math.random(). Taču drošība (kā neuzminamība) atšķiras no drošības kā slepenības – UUID ir identifikators, un to nevajadzētu izmantot kā paroli, sesijas pilnvaru (token) vai API atslēgu.

Vai varu ģenerēt daudz UUID vienlaikus?

Jā, līdz pat 1000 identifikatoriem vienā reizē. Iestatiet „Skaits” un nospiediet „Ģenerēt”; virs piecdesmit vērtībām rezultāts kļūs par vienu ritināmu bloku, nevis garu rindu sarakstu. Poga „Kopēt visu” un „Saglabāt failā” apstrādās visu partiju tādā formātā, kādu norāda „Kopēšanas formāts” – pa vienam rindā, atdalītu ar komatiem, vai pēdiņās, lai tieši ielīmētu masīvā.

Kāpēc v3 un v5 man katru reizi ģenerē vienu un to pašu UUID?

Tāpēc, ka tam tie ir paredzēti. 3. un 5. versija ir deterministiskas: tās sajauc vārdtelpu un jūsu norādīto nosaukumu, tādēļ identiski ievades dati vienmēr radīs identisku identifikatoru jebkurā datorā un jebkurā valodā. Tas padara tās noderīgas stabila identifikatora atvasināšanai no tā, kas jums jau ir, un tādēļ „Skaits” ir paslēpts, kad jūs tās izvēlaties.

Kas ir Vārdtelpa un Nosaukums, un kādu vārdtelpu man izvēlēties?

Tie ir divi ievades dati, no kuriem tiek aprēķināts 3. vai 5. versijas UUID. „Vārdtelpa” norāda, kāda veida lieta ir nosaukums – DNS saimniekdatoru nosaukumiem, URL adresēm, OID un X.500 attiecīgajām direktoriju shēmām, vai „Pielāgots” („Pielāgota vārdtelpa (UUID)”), ja vēlaties izveidot pats savu vārdtelpas UUID, kas ir vispārpieņemta izvēle lietojumprogrammas ietvaros. „Nosaukums” ir pati virkne. Dažādas vārdtelpas ģenerē pilnīgi dažādus rezultātus vienam un tam pašam nosaukumam, kas ir to izmantošanas mērķis.

Kāpēc UUID v7 ir labāks par v4 datubāzes primārajai atslēgai?

Iemesls ir tajā, kur vērtības nonāk indeksā. Indekss tiek glabāts sakārtotā secībā, un nejauša v4 atslēga nonāk tajā jebkur, tāpēc ievietojumi sadala lapas visā kokā, un atmiņā glabātās daļas reti ir tās, kas ir nepieciešamas nākamajai darbībai. Savukārt v7 atslēga sākas ar pašreizējo milisekundi, tāpēc secīgi ievietojumi nonāk kopā indeksa beigās, kas atbilst secīgas veselā skaitļa atslēgas uzvedībai — un tajā pašā laikā ļauj jebkuram servisam izveidot identifikatoru, neizmantojot centrālo skaitītāju.

Vai divi UUID jebkad varētu būt vienādi?

Teorētiski jā, praksē nē, un ir vērts zināt atšķirību. Nekas nepārbauda unikālumu: ir vienkārši 2^122 iespējamās 4. versijas vērtības (aptuveni 5,3 sekstiljoni), un jums būtu nepieciešami aptuveni 2,7 triljoni no tām – miljards katru sekundi 86 gadus –, lai būtu 50% iespēja vienai sadursmei. Garantija ir statistiska, nevis absolūta, un tā ir atkarīga no pamatā esošās nejaušības patiesuma, tādēļ šis ģenerators izmanto Web Crypto API, nevis parasto pseidonejaušo funkciju.

Vai es varu izmantot UUID kā paroli, API atslēgu vai sesijas pilnvaru?

Nē, un tā ir visdārgākā kļūda. 4. versijas UUID ir neparedzams, taču identifikatori tiek uztverti kā publiski pieejami dati: tie nonāk URL adresēs, pārlūkprogrammu vēsturēs, serveru žurnālos, norāžu galvenēs (referer headers) un analītikā. Turklāt 1. un 7. versija atklāj to izveides laiku, bet 3. un 5. versiju var pārrēķināt jebkurš, kurš zina ievades datus. Visam, kam jāpaliek noslēpumam, izmantojiet paroļu ģeneratoru vai noslēpumiem paredzētas bibliotēkas pilnvaru.

Vai UUID v7 atklāj, kad tas tika izveidots?

Jā, ar milisekundes precizitāti, un tas ir darīts ar nolūku, nevis kļūdas dēļ – laikspiedols ir tas, kas padara v7 kārtojamu. Zem rezultāta esošā rinda parāda iekodēto laiku partijas pirmajā vērtībā, lai jūs varētu precīzi redzēt, kāda informācija ir atklāta. Arī 1. versija ietver laikspiedolu. Ja izveidošanas laiks ir informācija, ko labprātāk neatklātu, izmantojiet 4. versiju, jo tā nesniedz nevienam nekādu informāciju.

Vai UUID v1 atklāj manu MAC adresi?

Ne šeit. Sākotnējā shēma kā mezgla lauku izmantoja datora tīkla kartes adresi, kas arī radīja v1 slikto slavu, taču standarts atļauj arī izmantot nejaušu mezgla identifikatoru ar iestatītu multiraides bitu, un tieši to veido šis ģenerators. Jūsu aparatūras adrese nekad netiek nolasīta un nekad neparādās izvadē.

Ko maina opcijas Lielie burti, Bez defisēm, Figūriekavas un urn:uuid:?

Mainās tikai prezentācija – pamatā esošie 128 biti ir pilnīgi vienādi jebkurā formā. „Lielie burti” attēlo heksadecimālos ciparus ar versāliem, „Bez defisēm” ģenerē kompakto 32 rakstzīmju versiju, „Figūriekavas” vērtību iekļauj starp { } (šādi GUID tiek rakstīts Windows un .NET vidē), un urn:uuid: pievieno prefiksu, padarot to par formālu URN. urn:uuid: izslēdz abas pārējās opcijas, kamēr tas ir ieslēgts, jo standarts nosaka tikai vienu URN formu, un tā ir kanoniskā ar defisēm.