🛠️

Whiz Tools

Build • Create • Innovate

Generer UUID'er til applikationer og distribuerede systemer

Generer Universelt Unikke Identifikatorer (UUID'er) til forskellige applikationer. Opret både version 1 (tidsbaseret) og version 4 (tilfældig) UUID'er til brug i distribuerede systemer, databaser og mere.

UUID-generator

Genereret UUID

UUID-struktur
Tid lav
📚

Dokumentation

UUID Generator

Introduktion

En Universally Unique Identifier (UUID) er et 128-bit nummer, der bruges til at identificere information i computersystemer. UUID'er er standardiseret af Open Software Foundation (OSF) som en del af Distributed Computing Environment (DCE). Disse identifikatorer er designet til at være unikke på tværs af både rum og tid, hvilket gør dem ideelle til forskellige anvendelser i distribuerede systemer og videre.

Dette UUID-generatorværktøj giver dig mulighed for at oprette både version 1 (tidsbaseret) og version 4 (tilfældig) UUID'er. Disse identifikatorer er nyttige i forskellige scenarier, hvor unik identifikation er påkrævet, såsom database-nøgler, distribuerede systemer og netværksprotokoller.

Hvordan UUID'er fungerer

UUID-struktur

En UUID repræsenteres typisk som 32 hexadecimale cifre, vist i fem grupper adskilt af bindestreger, i formen 8-4-4-4-12 for i alt 36 tegn (32 alfanumeriske tegn og 4 bindestreger). For eksempel:

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

De 128 bit af en UUID er opdelt i specifikke felter, der hver bærer forskellige oplysninger afhængigt af UUID-versionen:

  • 32 bit til time_low-feltet
  • 16 bit til time_mid-feltet
  • 16 bit til time_hi_and_version-feltet
  • 8 bit til clock_seq_hi_and_reserved-feltet
  • 8 bit til clock_seq_low-feltet
  • 48 bit til node-feltet

Her er et diagram, der illustrerer UUID-strukturen:

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

UUID-versioner

Der er flere versioner af UUID'er, hver med sin egen genereringsmetode:

  1. Version 1 (Tidsbaseret): Bruger det nuværende tidsstempel og MAC-adressen på computeren.
  2. Version 2 (DCE-sikkerhed): Ligner version 1, men inkluderer en lokal domæneidentifikator.
  3. Version 3 (Navnebasseret, MD5): Genereres ved at hash'e en navneområdeidentifikator og navn.
  4. Version 4 (Tilfældig): Genereres ved hjælp af et tilfældigt eller pseudo-tilfældigt nummer.
  5. Version 5 (Navnebasseret, SHA-1): Ligner version 3, men bruger SHA-1 hashing.

Dette værktøj fokuserer på at generere Version 1 og Version 4 UUID'er.

Formel

Version 1 UUID-generering

Version 1 UUID'er genereres ved hjælp af følgende komponenter:

  1. Tidsstempel: En 60-bit værdi, der repræsenterer antallet af 100-nanosekunders intervaller siden 15. oktober 1582 (datoen for den gregorianske reform af den kristne kalender).
  2. Clock sequence: En 14-bit værdi, der bruges til at undgå dubletter i tilfælde af, at uret sættes tilbage.
  3. Node: En 48-bit værdi, der normalt er afledt af MAC-adressen på computeren.

Formlen for at generere en Version 1 UUID kan udtrykkes som:

1UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
2

Version 4 UUID-generering

Version 4 UUID'er genereres ved hjælp af en kryptografisk stærk tilfældig talgenerator. Formlen er simpelthen:

1UUID = random_128_bit_number
2

Med specifikke bits sat for at angive versionen (4) og varianten.

Anvendelsestilfælde

UUID'er har mange anvendelser på tværs af forskellige domæner inden for datalogi og softwareudvikling:

  1. Database-nøgler: UUID'er bruges ofte som primære nøgler i databaser, især i distribuerede systemer, hvor flere noder kan generere poster samtidig.

  2. Distribuerede systemer: I storskala distribuerede systemer hjælper UUID'er med at identificere ressourcer, transaktioner eller begivenheder unikt på tværs af flere noder eller datacentre.

  3. Indholdsadressere: UUID'er kan bruges til at oprette unikke identifikatorer for indhold i indholds-adresserbare lagringssystemer.

  4. Session Management: Webapplikationer bruger ofte UUID'er til at administrere bruger-sessioner, hvilket sikrer, at hver session har en unik identifikator.

  5. IoT-enhedsidentifikation: I Internet of Things (IoT) applikationer kan UUID'er bruges til at identificere individuelle enheder unikt i et netværk.

Alternativer

Selvom UUID'er er meget anvendte, er der alternative tilgange til at generere unikke identifikatorer:

  1. Auto-incrementing IDs: Enkle og almindeligt anvendte i enkelt-database systemer, men ikke egnede til distribuerede miljøer.

  2. Tidsstempel-baserede IDs: Kan være nyttige til tidsordnede data, men kan stå over for kollisionsproblemer i høj-konkurrence scenarier.

  3. Snowflake IDs: Udviklet af Twitter, disse IDs kombinerer tidsstempel og arbejdere nummer for at generere unikke IDs i distribuerede systemer.

  4. ULID (Universally Unique Lexicographically Sortable Identifier): Et nyere alternativ, der sigter mod at være mere menneskevenligt og sortérbart end UUID'er.

Historie

Konceptet med UUID'er blev først introduceret i Apollo Network Computing System og senere standardiseret af Open Software Foundation (OSF) som en del af Distributed Computing Environment (DCE) i 1990'erne. Den første specifikation blev offentliggjort i 1997 som ISO/IEC 11578:1996 og senere revideret i 2005 som en del af ISO/IEC 9834-8:2005.

Nøglemilepæle i UUID-historien:

  • 1980'erne: Apollo Computer udvikler UUID-konceptet til deres Network Computing System.
  • 1997: Første UUID-specifikation offentliggjort som ISO/IEC 11578:1996.
  • 2005: UUID-specifikation revideret og offentliggjort som en del af ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 definerer UUID-formatet og genereringsalgoritmerne, der bruges i dag.

Over tid er UUID'er blevet et vigtigt værktøj i distribuerede systemer og database-design, med forskellige implementeringer og tilpasninger på tværs af forskellige programmeringssprog og platforme.

Kodeeksempler

Her er eksempler på at generere UUID'er i forskellige programmeringssprog:

1import uuid
2
3## Generer en Version 4 (tilfældig) UUID
4random_uuid = uuid.uuid4()
5print(f"Version 4 UUID: {random_uuid}")
6
7## Generer en Version 1 (tidsbaseret) UUID
8time_based_uuid = uuid.uuid1()
9print(f"Version 1 UUID: {time_based_uuid}")
10

Referencer

  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