Whiz Tools

UUID-Generator

Generierte UUID

UUID-Struktur
Zeit niedrig

UUID-Generator

Einführung

Eine Universally Unique Identifier (UUID) ist eine 128-Bit-Zahl, die verwendet wird, um Informationen in Computersystemen zu identifizieren. UUIDs sind vom Open Software Foundation (OSF) als Teil der Distributed Computing Environment (DCE) standardisiert. Diese Identifikatoren sind so konzipiert, dass sie sowohl im Raum als auch in der Zeit eindeutig sind, was sie ideal für verschiedene Anwendungen in verteilten Systemen und darüber hinaus macht.

Dieses UUID-Generator-Tool ermöglicht es Ihnen, sowohl Version 1 (zeitbasiert) als auch Version 4 (zufällig) UUIDs zu erstellen. Diese Identifikatoren sind in verschiedenen Szenarien nützlich, in denen eine eindeutige Identifikation erforderlich ist, wie z.B. Datenbank-Schlüssel, verteilte Systeme und Netzwerkprotokolle.

Wie UUIDs funktionieren

UUID-Struktur

Eine UUID wird typischerweise als 32 hexadezimale Ziffern dargestellt, die in fünf Gruppen unterteilt sind, die durch Bindestriche getrennt sind, in der Form 8-4-4-4-12 für insgesamt 36 Zeichen (32 alphanumerische Zeichen und 4 Bindestriche). Zum Beispiel:

550e8400-e29b-41d4-a716-446655440000

Die 128 Bits einer UUID sind in spezifische Felder unterteilt, die je nach UUID-Version unterschiedliche Informationen tragen:

  • 32 Bits für das Feld time_low
  • 16 Bits für das Feld time_mid
  • 16 Bits für das Feld time_hi_and_version
  • 8 Bits für das Feld clock_seq_hi_and_reserved
  • 8 Bits für das Feld clock_seq_low
  • 48 Bits für das Feld node

Hier ist ein Diagramm, das die UUID-Struktur veranschaulicht:

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-Versionen

Es gibt mehrere Versionen von UUIDs, jede mit ihrer eigenen Generierungsmethode:

  1. Version 1 (Zeitbasiert): Verwendet den aktuellen Zeitstempel und die MAC-Adresse des Computers.
  2. Version 2 (DCE-Sicherheit): Ähnlich wie Version 1, enthält jedoch einen lokalen Domänenbezeichner.
  3. Version 3 (Namensbasiert, MD5): Generiert durch Hashing eines Namensraumbezeichners und eines Namens.
  4. Version 4 (Zufällig): Generiert mit einem zufälligen oder pseudo-zufälligen Zahlengenerator.
  5. Version 5 (Namensbasiert, SHA-1): Ähnlich wie Version 3, verwendet jedoch SHA-1-Hashing.

Dieses Tool konzentriert sich auf die Generierung von Version 1 und Version 4 UUIDs.

Formel

Version 1 UUID-Generierung

Version 1 UUIDs werden mit den folgenden Komponenten generiert:

  1. Zeitstempel: Ein 60-Bit-Wert, der die Anzahl der 100-Nanosekunden-Intervalle seit dem 15. Oktober 1582 (dem Datum der gregorianischen Reform des christlichen Kalenders) darstellt.
  2. Uhrsequenz: Ein 14-Bit-Wert, der verwendet wird, um Duplikate zu vermeiden, falls die Uhr zurückgestellt wird.
  3. Knoten: Ein 48-Bit-Wert, der normalerweise aus der MAC-Adresse des Computers abgeleitet wird.

Die Formel zur Generierung einer Version 1 UUID kann wie folgt ausgedrückt werden:

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

Version 4 UUID-Generierung

Version 4 UUIDs werden mit einem kryptografisch starken Zufallszahlengenerator generiert. Die Formel ist einfach:

UUID = random_128_bit_number

Mit spezifischen Bits, die gesetzt werden, um die Version (4) und die Variante anzuzeigen.

Anwendungsfälle

UUIDs haben zahlreiche Anwendungen in verschiedenen Bereichen der Informatik und Softwaretechnik:

  1. Datenbank-Schlüssel: UUIDs werden häufig als Primärschlüssel in Datenbanken verwendet, insbesondere in verteilten Systemen, in denen mehrere Knoten gleichzeitig Datensätze generieren könnten.

  2. Verteilte Systeme: In großen verteilten Systemen helfen UUIDs, Ressourcen, Transaktionen oder Ereignisse über mehrere Knoten oder Rechenzentren hinweg eindeutig zu identifizieren.

  3. Inhaltsadressierung: UUIDs können verwendet werden, um eindeutige Identifikatoren für Inhalte in inhaltsadressierten Speichersystemen zu erstellen.

  4. Sitzungsmanagement: Webanwendungen verwenden häufig UUIDs, um Benutzersitzungen zu verwalten und sicherzustellen, dass jede Sitzung einen eindeutigen Identifikator hat.

  5. IoT-Geräteidentifikation: In Anwendungen des Internets der Dinge (IoT) können UUIDs verwendet werden, um einzelne Geräte in einem Netzwerk eindeutig zu identifizieren.

Alternativen

Obwohl UUIDs weit verbreitet sind, gibt es alternative Ansätze zur Generierung eindeutiger Identifikatoren:

  1. Auto-incrementing IDs: Einfach und häufig in Single-Datenbanksystemen verwendet, aber nicht für verteilte Umgebungen geeignet.

  2. Zeitstempelbasierte IDs: Können für zeitlich geordnete Daten nützlich sein, können jedoch in Hochkonkurrenzszenarien auf Kollisionsprobleme stoßen.

  3. Snowflake-IDs: Entwickelt von Twitter, kombinieren diese IDs Zeitstempel und Worker-Nummer, um eindeutige IDs in verteilten Systemen zu generieren.

  4. ULID (Universally Unique Lexicographically Sortable Identifier): Eine neuere Alternative, die darauf abzielt, menschlicher lesbar und sortierbar zu sein als UUIDs.

Geschichte

Das Konzept der UUIDs wurde erstmals im Apollo Network Computing System eingeführt und später von der Open Software Foundation (OSF) als Teil der Distributed Computing Environment (DCE) in den 1990er Jahren standardisiert. Die ursprüngliche Spezifikation wurde 1997 als ISO/IEC 11578:1996 veröffentlicht und 2005 im Rahmen von ISO/IEC 9834-8:2005 überarbeitet.

Wichtige Meilensteine in der Geschichte der UUID:

  • 1980er: Apollo Computer entwickelt das UUID-Konzept für ihr Network Computing System.
  • 1997: Erste UUID-Spezifikation veröffentlicht als ISO/IEC 11578:1996.
  • 2005: UUID-Spezifikation überarbeitet und veröffentlicht als Teil von ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 definiert das UUID-Format und die heute verwendeten Generierungsalgorithmen.

Im Laufe der Zeit sind UUIDs zu einem wesentlichen Werkzeug in verteilten Systemen und Datenbankdesign geworden, mit verschiedenen Implementierungen und Anpassungen in verschiedenen Programmiersprachen und Plattformen.

Codebeispiele

Hier sind Beispiele zur Generierung von UUIDs in verschiedenen Programmiersprachen:

import uuid

## Generiere eine Version 4 (zufällige) UUID
random_uuid = uuid.uuid4()
print(f"Version 4 UUID: {random_uuid}")

## Generiere eine Version 1 (zeitbasierte) UUID
time_based_uuid = uuid.uuid1()
print(f"Version 1 UUID: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Generiere eine Version 4 (zufällige) UUID
const randomUuid = uuidv4();
console.log(`Version 4 UUID: ${randomUuid}`);

// Generiere eine Version 1 (zeitbasierte) UUID
const timeBasedUuid = uuidv1();
console.log(`Version 1 UUID: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Generiere eine Version 4 (zufällige) UUID
        UUID randomUuid = UUID.randomUUID();
        System.out.println("Version 4 UUID: " + randomUuid);

        // Generiere eine Version 1 (zeitbasierte) UUID
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("Version 1 UUID: " + timeBasedUuid);
    }
}
require 'securerandom'

## Generiere eine Version 4 (zufällige) UUID
random_uuid = SecureRandom.uuid
puts "Version 4 UUID: #{random_uuid}"

## Ruby hat keine eingebaute Methode für Version 1 UUIDs
## Sie müssten eine Bibliothek wie 'uuidtools' dafür verwenden
<?php
// Generiere eine Version 4 (zufällige) 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 "Version 4 UUID: " . $randomUuid . "\n";

// PHP hat keine eingebaute Methode für Version 1 UUIDs
// Sie müssten eine Bibliothek wie 'ramsey/uuid' dafür verwenden
?>

Referenzen

  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://de.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). In Wikipedia. https://de.wikipedia.org/wiki/Snowflake_ID
  5. ULID-Spezifikation. (n.d.). GitHub. https://github.com/ulid/spec
Feedback