Þarftu auðkenni sem rekst ekki á við auðkenni sem einhver annar bjó til, á tölvu sem þú hefur aldrei heyrt um, án þess að biðja nokkurn um leyfi? Það er nákvæmlega hlutverkið sem UUID sinnir. Þetta er 128 bita tala, skrifuð sem 36 stafir í hinu þekkta 8-4-4-4-12 mynstri, og öll hönnun hennar snýst um að tvær slíkar tölur verði aldrei eins, jafnvel þótt ekkert kerfi stýri því hver fær hvaða tölu. Þessi ókeypis rafall býr þær til í vafranum þínum: veldu útgáfu undir „Útgáfa“, segðu hversu margar þú vilt í „Fjöldi“ og smelltu á „Búa til“. Síðan opnast með einu v4, sem er sú útgáfa sem flest verkefni þurfa, svo fyrsta auðkennið er aðeins einum smelli í burtu.
Hvert auðkenni er búið til af vafranum þínum í gegnum Web Crypto API. Útgáfa 4 notar crypto.randomUUID() þar sem vafrinn býður upp á það en annars crypto.getRandomValues() — dulkóðunarfræðilega sterka uppsprettu slembitalna frekar en JavaScript slembifall á borð við Math.random(). Útgáfa 7 setur 48 bita tímastimpil í millisekúndum fremst, síðan 12 bita teljara sem hækkar innan sömu millisekúndu, og loks 62 slembibita, sem er flokkunaraðferðin lýst í RFC 9562; sá teljari er ástæðan fyrir því að þúsund auðkenni koma út í réttri röð frekar en í ruglingi. Útgáfa 1 sameinar tímastimpil og slembivalin hnút sem hefur fjölvarpsbitann stilltan, þannig að hún ber aldrei vistfang netkortsins þíns líkt og upprunalegu útfærslurnar frá tíunda áratugnum gerðu. Útgáfur 3 og 5 eru alls ekki slembivaldar: þær tæta saman nafnarými og nafn, með MD5 og SHA-1 í sömu röð, og sú tæting fer einnig fram í tækinu þínu. Ekkert er sent á netþjón, ekkert er skráð, og þegar síðan hefur hlaðist heldur hún áfram að virka þótt nettengingin sé rofin.
„Útgáfa“ er reiturinn sem ákvarðar allt annað. Útgáfa 4 samanstendur af 122 slembibitum án nokkurrar uppbyggingar — sjálfgefna valið og rétta svarið þegar auðkenni þarf aðeins að vera einstakt. Útgáfa 7 heldur 62 slembibitum en byrjar á tímanum þegar hún var búin til, svo safn af þeim raðast í þá röð sem þau voru búin til í; það er það sem gerir hana að bestu útgáfunni þegar auðkennið verður gagnagrunnslykill. Útgáfa 1 er upprunalega tímabyggða aðferðin, haldið hér inni fyrir kerfi sem biðja enn um hana. Útgáfur 3 og 5 eru dálítið sérstakar: þær eru ákvarðanlegar, sem þýðir að sama inntak skilar alltaf sama auðkenni, og þær taka við tveimur aukareitum — „Nafnarými“, sem er eitt af staðlaðra rýmunum DNS, URL, OID og X.500 eða „Sérsniðið“ sem þú býrð til sjálfur („Sérsniðið nafnarými (UUID)“), og „Nafn“, sem er strengurinn sem verið er að auðkenna. Ef þú setur URL nafnarýmið og https://example.com/a inn í v5 færðu sama UUID í dag, á morgun og í tölvu hjá einhverjum öðrum. Vegna þessa hverfur reiturinn „Fjöldi“ þegar v3 eða v5 er valið: þúsund afrit af einu ákvarðanlegu gildi væru bara þúsund afrit af einu ákvarðanlegu gildi. Fyrir allar aðrar útgáfur liggur „Fjöldi“ frá 1 upp í 1000.
Fjórir rofar breyta útliti úttaksins án þess að breyta 128 bitunum undir niðri. „Hástafir“ prentar sextándakerfistölurnar sem stóra stafi, „Án bandstrika“ gefur þjappað 32 stafa form sem sumir dálkar og skráarnöfn kjósa, og „Slaufusvigar“ vefur gildinu inn í { } — það form sem Windows og .NET heimurinn kalla GUID. Undir „Ítarlegar stillingar“ bætir urn:uuid: við því forskeyti sem gerir það að formlegu URN; það slekkur á „Slaufusvigar“ og „Án bandstrika“ á meðan það er kveikt, því staðallinn leyfir nákvæmlega eitt URN form og það er upprunalega formið með bandstrikum. „Afrita snið“ ræður því hvernig hópur er tengdur saman þegar þú afritar hann: eitt í hverri línu, aðskilin með kommum, eða hvert gildi í gæsalöppum með kommu á eftir, sem límist beint inn í fylki í kóða. Fyrir neðan niðurstöðuna er lína sem sýnir slembistigið í bitum — 122 fyrir v4, 62 fyrir v7 — og, fyrir v7, tímastimpilinn sem er umritaður í fyrsta auðkenni hópsins, svo tíminn inni í gildinu er sýnilegur en ekki gefinn í skyn. Bæði „Afrita allt“ og „Vista í skrá“ virða valin í „Afrita snið“. „Saga“ geymir síðustu 10 hópa þína í vafranum þínum: smelltu á einn til að kalla hann fram, afritaðu eða eyddu einni færslu, eða hreinsaðu listann. „Hreinsa“ tæmir niðurstöðurnar og skilur stillingarnar eftir óhreyfðar, og eftir 50 auðkenni verður listinn að einni skrunanlegri blokk í stað fimmtíu raða.
Mikilvægasta atriðið á þessari síðu er munurinn á v4 og v7 sem aðallykli, og það er ekki spurning um smekk. Gagnagrunnsvísar eru tré sem geymd eru í flokkaðri röð, og hvar nýr lykill lendir í þeirri röð ákvarðar hversu mikla vinnu innsetningin krefst. v4 lykill er slembivalinn, svo samfelldar innsetningar lenda í ótengdum hornum vísisins: síður sem voru fullar klofna, hlutar trésins sem gagnagrunnurinn geymir í minni eru sjaldnast hlutarnir sem næsta innsetning þarf á að halda, og vísirinn endar stærri og brotnari en raðirnar sem hann vísar á gefa tilefni til. v7 lykill byrjar á yfirstandandi millisekúndu, svo samfelldar innsetningar lenda hlið við hlið á hægri brún trésins, sem er mynstrið sem sjálfhækkandi heiltala framkallar og mynstrið sem vísauppbyggingar voru byggðar í kringum. Það eru öll skiptin: v7 kaupir þér innsetningarhegðun raðbundins lykils en heldur þeim eiginleika sem fékk þig til að velja UUID í upphafi, sem er sá að hver sem er getur búið til lykil án þess að biðja netþjón um leyfi. Það sem það kostar er að tími sköpunar er nú lesanlegur inni í auðkenninu, og hvort það skiptir máli er spurning um gögnin þín, ekki sniðið.
Ekkert athugar nokkurn tíma hvort UUID sé einstakt; stærð þess er tryggingin. Það er engin skrá, engin netþjónafyrirspurn, engin leit — rafall býr til tölu og afhendir hana, og ástæðan fyrir því að tvær þeirra rekast ekki á er einfaldlega sú að til eru 2^122 möguleg v4 gildi, sem eru um það bil 5,3 sextilljónir. Afmælisdagavandamálið er heiðarlega leiðin til að meta það stærðarhlutfall: þú þyrftir gróflega 2,7 trilljónir auðkenna áður en það væru jafnar líkur á að einhver tvö þeirra væru eins, sem er milljarður nýrra UUID á sekúndu í 86 ár. Það er þess virði að vera nákvæmur um hvað það lofar og lofar ekki. Þetta er tölfræðileg trygging, ekki stærðfræðileg, og hún gildir aðeins á meðan slembin undir niðri er raunveruleg — illa frumstilltur rafall, eða sýndarvél sem klónuð er ásamt óreiðusafni sínu, brýtur hana á þann hátt sem sniðið getur ekki greint. Útgáfa 7 þrengir spurninguna enn frekar: innan einnar millisekúndu getur einn rafall alls ekki endurtekið sig, því teljarinn hækkar frekar en að kasta teningum, og milli sjálfstæðra rafalla sjá 62 slembibitar um verkið.
UUID er auðkenni, ekki lykilorð. Útgáfa 4 er ófyrirsjáanleg, og það freistar fólks til að meðhöndla hana sem leyndarmál — endurstillingartengill lykilorðs, vefslóð sem ekki er hægt að giska á, setutákn, eða API lykill. Ófyrirsjáanleikinn er raunverulegur, en leynd er eiginleiki sem stjórnast af því hvernig gildi er meðhöndlað, og auðkenni eru hönnuð til að vera meðhöndluð af kæruleysi: þau sitja í vefslóðum, sem lenda í vafraferli, netþjónaskrám, vísihausum og greiningartólum, og eru límd inn í spjallskilaboð. Hinar útgáfurnar eru enn verri kostir. Bæði útgáfa 1 og útgáfa 7 umrita augnablikið sem þær voru búnar til, svo hver sem heldur á einni veit nokkurn veginn hvenær hún var búin til og getur þrengt nærumhverfi alls sem búið var til við hlið hennar. Útgáfur 3 og 5 eru ákvarðanlegar af ásettu ráði: v5 UUID af netfangi er ekki dulkóðað leyndarmál, það er gildi sem hver sem er með sama netfang getur reiknað út á sekúndu. Notaðu UUID til að nefna hlut. Notaðu lykilorðarafall eða tákn úr safni sem smíðað er fyrir leyndarmál, þegar gildið verður að vera óþekkt.
Af hverju að velja þennan UUID rafal?
- Framköllun aðeins í vafra: auðkenni eru búin til í tækinu þínu og aldrei send neitt
- Web Crypto API slembi: dulkóðunarfræðilega öruggt, ekki Math.random()
- Fimm útgáfur á einum stað: v1, v3, v4, v5 og v7, án þess að skipta um tól
- Raunverulega röðuð v7: teljari innan millisekúndunnar, eins og RFC 9562 lýsir
- Ákvarðanleg v3 og v5 með stöðluðu nafnarýmunum fjórum eða þínu eigin
- Allt að 1000 í einu, með þéttum skrunanlegum lista eftir fimmtíu
- Hvert algengt form: með bandstrikum, autt, hástafir, slaufusvigar eða urn:uuid: URN
- Afrita sem línur, kommur eða tilvitnuð gildi sem límast beint í kóða
- Ótakmarkað og ókeypis: engin skráning, engin notkunartakmörk, ekkert á okkar netþjónum
UUID birtast hvar sem þarf að nefna eitthvað áður en nokkuð getur staðfest að nafnið sé laust. Forritskóði býr þau til fyrir raðir sem hann er að fara að setja inn, svo hluturinn hafi auðkenni áður en hann kemst í gagnagrunninn og biðlari geti vísað í hann á meðan skrifunin er enn í gangi. Dreifð kerfi treysta enn meira á þau: nokkrar þjónustur sem skrifa í eina töflu, ótengdur snjallsímabiðlari sem býr til færslur í flugvél, eða biðröð sem þarf að þekkja skilaboðin sem hún er þegar búin að vinna — ekkert þeirra getur beðið eftir sameiginlegum teljara. Útgáfa 5 uppfyllir aðra þörf, sem er stöðugt auðkenni dregið af einhverju sem þú ert nú þegar með: sama skjalið, sama vefslóðin eða sami reikningurinn vísar alltaf á sama UUID, svo innflutningur getur keyrt tvisvar án þess að tvítaka neitt. Annars staðar eru þau einfaldlega það snið sem kerfið krefst — fylgniauðkenni sem þrætt er í gegnum annála og rakningar, skráarnafn sem mun ekki rekast á þegar upphleðslur frá þúsund notendum lenda í sömu fötu, Windows skrásetningarlykill, prófunargögn sem verða að líta út eins og raunveruleg gögn.
Nokkur heiðarleg takmörk eru þess virði að vita um. Einn hópur er ein útgáfa: gildið í „Útgáfa“ á við um allt í honum, þannig að hópur af v4 og hópur af v7 eru tveir hópar. Þetta er rafall, ekki rannsakandi — að líma UUID inn til að lesa útgáfu þess eða tímastimpil til baka er ekki eitthvað sem þessi síða gerir. „Vista í skrá“ skrifar hreina textaskrá fremur en CSV eða JSON. Útgáfa 7 gefur opinskátt upp hvenær hún var búin til, niður í millisekúndu, sem er raunveruleg skipti en ekki galli, og útgáfa 1 lekur tíma á sama hátt; ef það er vandamál fyrir gögnin þín er útgáfa 4 sú útgáfa sem segir engum neitt. Tvö sérstök gildi frá staðlinum eru ekki útgáfur og eru því ekki valkostir undir „Útgáfa“, en þú getur afritað þau héðan: nil UUID, 00000000-0000-0000-0000-000000000000 og max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Allt á þessari síðu fylgir RFC 9562, staðlinum sem kom í stað RFC 4122 árið 2024, þannig að úttakið er tekið gilt af hverju því forritasafni, gagnagrunni eða API sem höndlar UUID yfirhöfuð. Innan þessara marka er tryggingin sterk: hvert auðkenni er byggt samkvæmt staðlinum, út frá dulkóðunarfræðilega öruggri slembi, á þinni eigin vél, og enginn annar sér það nokkurn tímann.