UUID-generator
Genereret UUID
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:
550e8400-e29b-41d4-a716-446655440000
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:
UUID-versioner
Der er flere versioner af UUID'er, hver med sin egen genereringsmetode:
- Version 1 (Tidsbaseret): Bruger det nuværende tidsstempel og MAC-adressen på computeren.
- Version 2 (DCE-sikkerhed): Ligner version 1, men inkluderer en lokal domæneidentifikator.
- Version 3 (Navnebasseret, MD5): Genereres ved at hash'e en navneområdeidentifikator og navn.
- Version 4 (Tilfældig): Genereres ved hjælp af et tilfældigt eller pseudo-tilfældigt nummer.
- 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:
- 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).
- Clock sequence: En 14-bit værdi, der bruges til at undgå dubletter i tilfælde af, at uret sættes tilbage.
- 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:
UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
Version 4 UUID-generering
Version 4 UUID'er genereres ved hjælp af en kryptografisk stærk tilfældig talgenerator. Formlen er simpelthen:
UUID = random_128_bit_number
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:
-
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.
-
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.
-
Indholdsadressere: UUID'er kan bruges til at oprette unikke identifikatorer for indhold i indholds-adresserbare lagringssystemer.
-
Session Management: Webapplikationer bruger ofte UUID'er til at administrere bruger-sessioner, hvilket sikrer, at hver session har en unik identifikator.
-
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:
-
Auto-incrementing IDs: Enkle og almindeligt anvendte i enkelt-database systemer, men ikke egnede til distribuerede miljøer.
-
Tidsstempel-baserede IDs: Kan være nyttige til tidsordnede data, men kan stå over for kollisionsproblemer i høj-konkurrence scenarier.
-
Snowflake IDs: Udviklet af Twitter, disse IDs kombinerer tidsstempel og arbejdere nummer for at generere unikke IDs i distribuerede systemer.
-
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:
import uuid
## Generer en Version 4 (tilfældig) UUID
random_uuid = uuid.uuid4()
print(f"Version 4 UUID: {random_uuid}")
## Generer en Version 1 (tidsbaseret) UUID
time_based_uuid = uuid.uuid1()
print(f"Version 1 UUID: {time_based_uuid}")
Referencer
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- 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
- Universally unique identifier. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec