🛠️

Whiz Tools

Build • Create • Innovate

UUID Generator Tool for Creating Unique Identifiers

Generer Universelt Unike Identifikatorer (UUID-er) for ulike applikasjoner. Lag både versjon 1 (tidsbasert) og versjon 4 (tilfeldig) UUID-er for bruk i distribuerte systemer, databaser og mer.

UUID-generator

Generert UUID

UUID-struktur
Tid lav
📚

Dokumentasjon

UUID-generator

Innledning

En Universelt Unik Identifikator (UUID) er et 128-bit tall som brukes til å identifisere informasjon i datasystemer. UUID-er er standardisert av Open Software Foundation (OSF) som en del av Distributed Computing Environment (DCE). Disse identifikatorene er designet for å være unike på tvers av både rom og tid, noe som gjør dem ideelle for ulike applikasjoner i distribuerte systemer og utover.

Dette UUID-generatorverktøyet lar deg opprette både versjon 1 (tidsbasert) og versjon 4 (tilfeldig) UUID-er. Disse identifikatorene er nyttige i ulike scenarier der unik identifikasjon er nødvendig, som database-nøkler, distribuerte systemer og nettverksprotokoller.

Hvordan UUID-er fungerer

UUID-struktur

En UUID er vanligvis representert som 32 heksadesimale sifre, vist i fem grupper adskilt av bindestreker, i formen 8-4-4-4-12 for totalt 36 tegn (32 alfanumeriske tegn og 4 bindestreker). For eksempel:

1550e8400-e29b-41d4-a716-446655440000
2

De 128 bitene av en UUID er delt inn i spesifikke felt, hver med forskjellig informasjon avhengig av UUID-versjonen:

  • 32 biter for time_low-feltet
  • 16 biter for time_mid-feltet
  • 16 biter for time_hi_and_version-feltet
  • 8 biter for clock_seq_hi_and_reserved-feltet
  • 8 biter for clock_seq_low-feltet
  • 48 biter for node-feltet

Her er et diagram som illustrerer UUID-strukturen:

A B C D E F A: time_low (32 biter) B: time_mid (16 biter) C: time_hi_and_version (16 biter) D: clock_seq_hi_and_reserved (8 biter) E: clock_seq_low (8 biter) F: node (48 biter)

UUID-versjoner

Det finnes flere versjoner av UUID-er, hver med sin egen genereringsmetode:

  1. Versjon 1 (Tidsbasert): Bruker den nåværende tidsstempelet og MAC-adressen til datamaskinen.
  2. Versjon 2 (DCE-sikkerhet): Ligner på versjon 1, men inkluderer en lokal domeneidentifikator.
  3. Versjon 3 (Navn-basert, MD5): Generert ved å hash en navneromidentifikator og navn.
  4. Versjon 4 (Tilfeldig): Generert ved hjelp av et tilfeldig eller pseudo-tilfeldig tall.
  5. Versjon 5 (Navn-basert, SHA-1): Ligner på versjon 3, men bruker SHA-1 hashing.

Dette verktøyet fokuserer på å generere versjon 1 og versjon 4 UUID-er.

Formel

Versjon 1 UUID-generering

Versjon 1 UUID-er genereres ved hjelp av følgende komponenter:

  1. Tidsstempel: En 60-bit verdi som representerer antall 100-nanosekund intervaller siden 15. oktober 1582 (datoen for den gregorianske reformen av den kristne kalenderen).
  2. Klokkesekvens: En 14-bit verdi som brukes for å unngå duplikater i tilfelle klokken settes tilbake.
  3. Node: En 48-bit verdi, vanligvis avledet fra MAC-adressen til datamaskinen.

Formelen for å generere en versjon 1 UUID kan uttrykkes som:

1UUID = (tidsstempel * 2^64) + (klokkesekvens * 2^48) + node
2

Versjon 4 UUID-generering

Versjon 4 UUID-er genereres ved hjelp av en kryptografisk sterk tilfeldig tallgenerator. Formelen er ganske enkelt:

1UUID = tilfeldig_128-bit_nummer
2

Med spesifikke biter satt for å indikere versjonen (4) og varianten.

Bruksområder

UUID-er har mange bruksområder på tvers av ulike domener innen datavitenskap og programvareutvikling:

  1. Database-nøkler: UUID-er brukes ofte som primærnøkler i databaser, spesielt i distribuerte systemer der flere noder kan generere poster samtidig.

  2. Distribuerte systemer: I store distribuerte systemer hjelper UUID-er med å unikt identifisere ressurser, transaksjoner eller hendelser på tvers av flere noder eller datasentre.

  3. Innholdsadressere: UUID-er kan brukes til å lage unike identifikatorer for innhold i innholdsadressable lagringssystemer.

  4. Sesjonsadministrasjon: Nettapplikasjoner bruker ofte UUID-er til å administrere brukerøkter, og sikrer at hver økt har en unik identifikator.

  5. IoT-enhetsidentifikasjon: I Internet of Things (IoT) applikasjoner kan UUID-er brukes til å unikt identifisere individuelle enheter i et nettverk.

Alternativer

Selv om UUID-er er mye brukt, finnes det alternative tilnærminger for å generere unike identifikatorer:

  1. Auto-inkrementerende ID-er: Enkle og vanlig brukt i enkelt-database systemer, men ikke egnet for distribuerte miljøer.

  2. Tidsstempel-baserte ID-er: Kan være nyttige for tidsbestemte data, men kan møte kollisjonsproblemer i høy-konkurranse scenarier.

  3. Snowflake ID-er: Utviklet av Twitter, disse ID-ene kombinerer tidsstempel og arbeidernummer for å generere unike ID-er i distribuerte systemer.

  4. ULID (Universally Unique Lexicographically Sortable Identifier): Et nyere alternativ som har som mål å være mer menneskevennlig og sortert enn UUID-er.

Historie

Konseptet med UUID-er ble først introdusert i Apollo Network Computing System og senere standardisert av Open Software Foundation (OSF) som en del av Distributed Computing Environment (DCE) på 1990-tallet. Den første spesifikasjonen ble publisert i 1997 som ISO/IEC 11578:1996 og senere revidert i 2005 som en del av ISO/IEC 9834-8:2005.

Viktige milepæler i UUID-historien:

  • 1980-tallet: Apollo Computer utvikler UUID-konseptet for sitt Network Computing System.
  • 1997: Første UUID-spesifikasjon publisert som ISO/IEC 11578:1996.
  • 2005: UUID-spesifikasjon revidert og publisert som en del av ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 definerer UUID-formatet og genereringsalgoritmene som brukes i dag.

Over tid har UUID-er blitt et viktig verktøy i distribuerte systemer og database-design, med ulike implementeringer og tilpasninger på tvers av forskjellige programmeringsspråk og plattformer.

Kodeeksempler

Her er eksempler på generering av UUID-er i ulike programmeringsspråk:

1import uuid
2
3## Generer en versjon 4 (tilfeldig) UUID
4tilfeldig_uuid = uuid.uuid4()
5print(f"Versjon 4 UUID: {tilfeldig_uuid}")
6
7## Generer en versjon 1 (tidsbasert) UUID
8tidsbasert_uuid = uuid.uuid1()
9print(f"Versjon 1 UUID: {tidsbasert_uuid}")
10

Referanser

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. International Organization for Standardization. (2005). Information technology – Open Systems Interconnection – Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Universally unique identifier. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec