Whiz Tools

UUID-generator

Gegenereerde UUID

UUID-structuur
Tijd laag

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:

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

UUID-versies

Er zijn verschillende versies van UUID's, elk met zijn eigen generatie methode:

  1. Versie 1 (Tijd-gebaseerd): Gebruikt de huidige tijdstempel en het MAC-adres van de computer.
  2. Versie 2 (DCE-beveiliging): Vergelijkbaar met versie 1, maar bevat een lokale domeinidentificator.
  3. Versie 3 (Naam-gebaseerd, MD5): Genereerd door een namespace-identificator en naam te hashen.
  4. Versie 4 (Random): Genereerd met behulp van een willekeurige of pseudo-willekeurige nummergenerator.
  5. 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:

  1. 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.
  2. Klokvolgorde: Een 14-bits waarde die wordt gebruikt om duplicaten te vermijden in het geval de klok achteruit wordt gezet.
  3. 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:

  1. Database Sleutels: UUID's worden vaak gebruikt als primaire sleutels in databases, vooral in gedistribueerde systemen waar meerdere knooppunten records gelijktijdig kunnen genereren.

  2. Gedistribueerde Systemen: In grootschalige gedistribueerde systemen helpen UUID's bij het uniek identificeren van bronnen, transacties of gebeurtenissen over meerdere knooppunten of datacenters.

  3. Inhoudsadressering: UUID's kunnen worden gebruikt om unieke identificatoren voor inhoud in inhoudsadresserende opslagsystemen te creëren.

  4. Sessiebeheer: Webtoepassingen gebruiken vaak UUID's om gebruikerssessies te beheren, zodat elke sessie een unieke identificator heeft.

  5. 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:

  1. Auto-incrementerende ID's: Eenvoudig en veel gebruikt in enkel-database systemen, maar niet geschikt voor gedistribueerde omgevingen.

  2. Tijd-gebaseerde ID's: Kunnen nuttig zijn voor tijd-geordende gegevens, maar kunnen tegen botsingsproblemen aanlopen in scenario's met hoge gelijktijdigheid.

  3. Snowflake ID's: Ontwikkeld door Twitter, deze ID's combineren tijdstempel en werkernummer om unieke ID's in gedistribueerde systemen te genereren.

  4. 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}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Genereer een versie 4 (random) UUID
const randomUuid = uuidv4();
console.log(`Versie 4 UUID: ${randomUuid}`);

// Genereer een versie 1 (tijd-gebaseerd) UUID
const timeBasedUuid = uuidv1();
console.log(`Versie 1 UUID: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Genereer een versie 4 (random) UUID
        UUID randomUuid = UUID.randomUUID();
        System.out.println("Versie 4 UUID: " + randomUuid);

        // Genereer een versie 1 (tijd-gebaseerd) UUID
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("Versie 1 UUID: " + timeBasedUuid);
    }
}
require 'securerandom'

## Genereer een versie 4 (random) UUID
random_uuid = SecureRandom.uuid
puts "Versie 4 UUID: #{random_uuid}"

## Ruby heeft geen ingebouwde methode voor versie 1 UUID's
## Je zou een gem zoals 'uuidtools' hiervoor moeten gebruiken
<?php
// Genereer een versie 4 (random) UUID
$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
    mt_rand(0, 0xffff), mt_rand(0, 0xffff),
    mt_rand(0, 0xffff),
    mt_rand(0, 0x0fff) | 0x4000,
    mt_rand(0, 0x3fff) | 0x8000,
    mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
echo "Versie 4 UUID: " . $randomUuid . "\n";

// PHP heeft geen ingebouwde methode voor versie 1 UUID's
// Je zou een bibliotheek zoals 'ramsey/uuid' hiervoor moeten gebruiken
?>

Referenties

  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
Feedback