UUID

**UUID** (*Universally Unique Identifier*, suom. *universaalisti yksilöivä tunniste*) on yleiseen käyttöön suunniteltu tunnistemuoto, jota noudattavien tunnisteiden perusteella jokaisen olion tietojärjestelmässä voi yksilöidä. UUID:t tunnetaan myös nimellä *GUID* (*Globally Unique Identifier*), jota käytetään etenkin Microsoftin järjestelmistä puhuttaessa.

UUID-tunnisteet ovat 128-bittisiä. Yleisin tekstiesitysmuoto on 32 heksadesimaalinumerona, jotka ryhmitetään yhdysviivoilla. Ryhmityksessä ensimmäinen ryhmä on kahdeksan merkkiä pitkä, seuraavat kolme neljä merkkiä pitkiä, ja viides viimeinen ryhmä kaksitoista merkkiä pitkä. Esimerkiksi tietty UUID tekstimuodossa on ca759773-5714-4bc1-a293-58064ecff9c4. GUID:t esitetään muuten samoin, mutta yleensä aaltosulkeissa (esimerkiksi {21EC2020-3AEA-4069-A2DD-08002B30309D}).

UUID:t kehitettiin alun perin 1980-luvulla Apollo Computerin Network Computing System (NCS) -hajautettua tietojärjestelmää varten. Myöhemmin Open Software Foundation otti ne käyttöön omassa Distributed Computing Environment (DCE) -järjestelmässään.

## Muunnelmat
Nykyään UUID on standardoitu RFC 9562 -dokumentissa (aiemmin RFC 4122). Standardi-UUID:eissa on aina kaksi kenttää, versio (*version*) ja muunnelma (*variant*).

Muunnelmabitit sijaitsevat kahdeksannen tavun yläbiteissä ja ovat yhdestä kolmeen bittiä pitkiä.

Standardi-UUID:eiden versiokenttä sijaitsee kuudennen tavun neljässä yläbitissä, mistä sen tunnistaa helposti tekstimuodon kolmannen ryhmän ensimmäisenä merkkinä. Bitit esittävät lukua väliltä 0&ndash;15.

Muiden bittien sisältö riippuu muunnelmasta ja versiosta.

Näistä versioista vain versioita 4, 5, 7 ja 8 suositetaan käytettäväksi uusissa järjestelmissä. Versioiden 1 ja 6 sijasta suositetaan versiota 7 ja version 3 sijasta versiota 5. Versio 2 ei ole yleisessä käytössä.

### Versiot 1 (UUIDv1) ja 6 (UUIDv6)
Versiossa 1 on useampi kenttä:

Aikaleima määritellään 100 nanosekunnin yksikköinä nollakohdasta, joka on gregoriaanisen kalenterin käyttöönottoajankohta, keskiyö 15. lokakuuta 1582 (UTC). Kellosarja on satunnaisluvuksi (tai vähintään laitekohtaisesta tunnuksesta riippumattomaksi luvuksi) alustettu arvo, joka alustetaan uudelleen laitekohtaisen tunnuksen muuttuessa. Jos laitteen kello siirtyy taaksepäin tai on saattanut siirtyä taaksepäin, kellosarjaa kuuluu kasvattaa yhdellä.

Laitekohtainen tunnus on alun perin ollut laitteen MAC-osoite, mutta nykyään suositellaan luotavaksi satunnaisesti.

Versio 6 on sama kuin versio 1, paitsi että aikaleimabittien järjestys on eri: versiossa 1 aikaleimabittien vähiten merkitsevä bitti on ensin, kun taas versiossa 6 aikaleimabittien eniten merkitsevä bitti on ensin. RFC 9562 suosittaa version 7 UUID:eiden käyttöä versioiden 1 ja 6 sijasta uusissa järjestelmissä.

### Versiot 3 (UUIDv3) ja 5 (UUIDv5)
Versiot 3 ja 5 ovat hyvin samanlaisia. Molemmissa luodaan tiiviste nimiavaruus-UUID:sta ja vapaavalintaisesta tavujonosta (nimiavaruuskohtaisesti voidaan määritellä tavujonoissa käytettävä sisältö). Versiossa 3 käytetään MD5-tiivistettä, jonka bitteihin sijoitetaan UUID:n vaatimat versio- ja muunnelmakentät. Sen sijasta suositetaan käytettävän versiota 5, jossa käytetään uudempaa SHA-1-tiivistettä. SHA-1-tiiviste on 160-bittinen, joiden ylimmästä 128 bitistä UUID muodostetaan. Tiivistepohjaiset UUID:t voidaan luoda toistetusti, toisin kuin esimerkiksi satunnaisesti generoidut (versio 4).

### Versio 4 (UUIDv4)
Version 4 UUID:eissa kaikki bitit muunnelma- ja versiokenttiä lukuun ottamatta generoidaan satunnaisesti. Satunnaisesti generoituja bittejä on yhteensä 122 bittiä. RFC 9562 kehottaa, että jos bitit luodaan näennäissatunnaislukugeneraattorilla, käytettävä generaattori on suunniteltu kryptografiseen käyttöön.

### Versio 7 (UUIDv7)
Version 7 UUID:eissa ylimmät 48 bittiä esittävät Unix-aikaleimaa millisekunteina. Aikaleiman jälkeen voi olla kaksi valinnaista lisäkenttää, aikaleiman tarkennuskenttä (aikaleiman esittämiseksi tarkemmin kuin millisekunnin tarkkuudella) ja alustettu laskuri. Loput biteistä luodaan satunnaisesti version 4 tavoin.

### Versio 8 (UUIDv8)
Versiolle 8 ei ole määritelty erikseen muotoa, vaan jokainen järjestelmä saa määritellä versio- ja muunnelmakenttiä lukuun ottamatta sisällön itse. UUIDv8:ita käyttävä järjestelmä joutuu itse määrittelemään, kuinka yksiselitteisyys toteutetaan. Näiden UUID:eiden ei saa siten yleisesti ottaen olettaa olevan yksiselitteisiä.

### Erikois-UUID:t
Täysin nolla UUID () 00000000-0000-0000-0000-000000000000 esittää varsinaisen UUID:n puutetta. Maksimi-UUID:ta () FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF voi käyttää esimerkiksi esittämään luettelon loppua.

## Käyttötarkoituksia
* GUID:eita käytetään GUID Partition Table (GPT)-osiotauluissa, jossa jokaisella osiolla on oma GUID.
* UUID:t ovat yleinen pääavaintyyppi tietokantatauluissa. Monissa tietokantaohjelmissa (kuten MySQL:ssä, MariaDB:ssä ja PostgreSQL:ssä) ja ohjelmointikielissä (kuten Javassa ja Pythonissa) on suora tuki UUID:eille.
* Microsoft Windows käyttää GUID:eita COM-objektien tunnistamiseen. Jokaisella käyttöjärjestelmässä olevalla objektilla on oma ainutkertainen numero, jotka tallennetaan rekisteriin.
* Microsoft Office -dokumenteilla ja ASF-tiedostoilla on ainutkertaiset GUIDit.
* Atom-syötteissä jokaisella viitattavalla dokumentilla on oma UUID.
* UUID:eista voidaan muodostaa myös URN etuliitteellä ``, esimerkiksi .

## Esimerkit

## Katso myös
* DOI (Digital Object Identifier)
* URI (Uniform Resource Identifier)
* ISBN (International Standard Book Number)
* OID

## Lähteet
* : A Universally Unique IDentifier (UUID) URN Namespace
* : Universally Unique IDentifiers (UUIDs)

## Viitteet