UUID-generator
Gegenereerde UUID
UUID Generator
Inleiding
Een Universally Unique Identifier (UUID) is een 128-bits nummer dat wordt gebruikt om informatie in computersystemen te identificeren. UUID's zijn gestandaardiseerd door de Open Software Foundation (OSF) als onderdeel van de Distributed Computing Environment (DCE). Deze identificatoren zijn ontworpen om uniek te zijn over zowel ruimte als tijd, waardoor ze ideaal zijn voor verschillende toepassingen in gedistribueerde systemen en daarbuiten.
Deze UUID-generator tool stelt je in staat om zowel versie 1 (tijd-gebaseerd) als versie 4 (random) UUID's te maken. Deze identificatoren zijn nuttig in verschillende scenario's waar unieke identificatie vereist is, zoals database sleutels, gedistribueerde systemen en netwerkprotocollen.
Hoe UUID's Werken
UUID-structuur
Een UUID wordt doorgaans weergegeven als 32 hexadecimale cijfers, weergegeven in vijf groepen gescheiden door koppeltekens, in de vorm 8-4-4-4-12 voor een totaal van 36 tekens (32 alfanumerieke tekens en 4 koppeltekens). Bijvoorbeeld:
550e8400-e29b-41d4-a716-446655440000
De 128 bits van een UUID zijn verdeeld in specifieke velden, waarbij elk verschillende informatie bevat, afhankelijk van de UUID-versie:
- 32 bits voor het time_low-veld
- 16 bits voor het time_mid-veld
- 16 bits voor het time_hi_and_version-veld
- 8 bits voor het clock_seq_hi_and_reserved-veld
- 8 bits voor het clock_seq_low-veld
- 48 bits voor het node-veld
Hier is een diagram dat de UUID-structuur illustreert:
UUID-versies
Er zijn verschillende versies van UUID's, elk met zijn eigen generatie methode:
- Versie 1 (Tijd-gebaseerd): Gebruikt de huidige tijdstempel en het MAC-adres van de computer.
- Versie 2 (DCE-beveiliging): Vergelijkbaar met versie 1, maar bevat een lokale domeinidentificator.
- Versie 3 (Naam-gebaseerd, MD5): Genereerd door een namespace-identificator en naam te hashen.
- Versie 4 (Random): Genereerd met behulp van een willekeurige of pseudo-willekeurige nummergenerator.
- Versie 5 (Naam-gebaseerd, SHA-1): Vergelijkbaar met versie 3, maar gebruikt SHA-1 hashing.
Deze tool richt zich op het genereren van versie 1 en versie 4 UUID's.
Formule
Versie 1 UUID-generatie
Versie 1 UUID's worden gegenereerd met behulp van de volgende componenten:
- Tijdstempel: Een 60-bits waarde die het aantal 100-nanoseconde-intervallen sinds 15 oktober 1582 (de datum van de Gregoriaanse hervorming van de Christelijke kalender) vertegenwoordigt.
- Klokvolgorde: Een 14-bits waarde die wordt gebruikt om duplicaten te vermijden in het geval de klok achteruit wordt gezet.
- Node: Een 48-bits waarde, meestal afgeleid van het MAC-adres van de computer.
De formule voor het genereren van een versie 1 UUID kan worden uitgedrukt als:
UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
Versie 4 UUID-generatie
Versie 4 UUID's worden gegenereerd met behulp van een cryptografisch sterke willekeurige nummergenerator. De formule is eenvoudig:
UUID = random_128_bit_number
Met specifieke bits ingesteld om de versie (4) en variant aan te geven.
Gebruiksscenario's
UUID's hebben talloze toepassingen in verschillende domeinen van de computerwetenschappen en software-engineering:
-
Database Sleutels: UUID's worden vaak gebruikt als primaire sleutels in databases, vooral in gedistribueerde systemen waar meerdere knooppunten records gelijktijdig kunnen genereren.
-
Gedistribueerde Systemen: In grootschalige gedistribueerde systemen helpen UUID's bij het uniek identificeren van bronnen, transacties of gebeurtenissen over meerdere knooppunten of datacenters.
-
Inhoudsadressering: UUID's kunnen worden gebruikt om unieke identificatoren voor inhoud in inhoudsadresserende opslagsystemen te creëren.
-
Sessiebeheer: Webtoepassingen gebruiken vaak UUID's om gebruikerssessies te beheren, zodat elke sessie een unieke identificator heeft.
-
IoT-apparaatidentificatie: In Internet of Things (IoT) toepassingen kunnen UUID's worden gebruikt om individuele apparaten in een netwerk uniek te identificeren.
Alternatieven
Hoewel UUID's veel worden gebruikt, zijn er alternatieve benaderingen voor het genereren van unieke identificatoren:
-
Auto-incrementerende ID's: Eenvoudig en veel gebruikt in enkel-database systemen, maar niet geschikt voor gedistribueerde omgevingen.
-
Tijd-gebaseerde ID's: Kunnen nuttig zijn voor tijd-geordende gegevens, maar kunnen tegen botsingsproblemen aanlopen in scenario's met hoge gelijktijdigheid.
-
Snowflake ID's: Ontwikkeld door Twitter, deze ID's combineren tijdstempel en werkernummer om unieke ID's in gedistribueerde systemen te genereren.
-
ULID (Universally Unique Lexicographically Sortable Identifier): Een recentere alternatieve die probeert mensvriendelijker en sorteerbaar te zijn dan UUID's.
Geschiedenis
Het concept van UUID's werd voor het eerst geïntroduceerd in het Apollo Network Computing System en later gestandaardiseerd door de Open Software Foundation (OSF) als onderdeel van de Distributed Computing Environment (DCE) in de jaren '90. De eerste specificatie werd gepubliceerd in 1997 als ISO/IEC 11578:1996 en later herzien in 2005 als onderdeel van ISO/IEC 9834-8:2005.
Belangrijke mijlpalen in de geschiedenis van UUID's:
- 1980s: Apollo Computer ontwikkelt het UUID-concept voor hun Network Computing System.
- 1997: Eerste UUID-specificatie gepubliceerd als ISO/IEC 11578:1996.
- 2005: UUID-specificatie herzien en gepubliceerd als onderdeel van ISO/IEC 9834-8:2005.
- 2009: RFC 4122 definieert het UUID-formaat en generatie-algoritmen die vandaag de dag worden gebruikt.
In de loop der tijd zijn UUID's een essentieel hulpmiddel geworden in gedistribueerde systemen en databaseontwerp, met verschillende implementaties en aanpassingen in verschillende programmeertalen en platforms.
Code Voorbeelden
Hier zijn voorbeelden van het genereren van UUID's in verschillende programmeertalen:
import uuid
## Genereer een versie 4 (random) UUID
random_uuid = uuid.uuid4()
print(f"Versie 4 UUID: {random_uuid}")
## Genereer een versie 1 (tijd-gebaseerd) UUID
time_based_uuid = uuid.uuid1()
print(f"Versie 1 UUID: {time_based_uuid}")
Referenties
- 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