Konzept GUID

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 17 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Ich verwende GUIDs in einem meiner größten Projekte und habe damit sehr gute Erfahrungen gemacht. Immer wieder kommt die Frage, was ist ein GUID überhaupt, deshalb nun hier eine kleine Erläuterung. Ebenso verwende ich ein GUID als Schlüssel im Plugin ©Feed um dem Feed einen eindeutigen String zuzufügen und damit nach Contentdiebstahl zu suchen.

Ein Globally Unique Identifier (GUID) bzw. ein Universally Unique Identifier (UUID) ist eine global eindeutige Zahl, die in verteilten Computersystemen zum Einsatz kommt.

GUID, auch bekannt als UUID – Universally Unique Identifier – ist 128 Bit lang (32 Zeichen, besteht aus einer 16-Byte-Zahl), feste Größe und ist weltweit gültig für einen Registrierungsprozess. Es wird keine zentralisierte Berechtigung angefordert, um GUIDs zu erzeugen, deshalb kann die Erzeugung vollständig automatisiert werden.

Jede GUID ist praktisch einmalig. Die Wahrscheinlichkeit, dass zwei gleiche GUIDs erzeugt werden, ist sehr gering.

Die interne Darstellung eines UUID ist eine spezifische Sequence der Bits im Speicher. Die korrekte Darstellung des UUID als URN oder als menschliche lesbare Zeichenkette macht es erforderlich, die Bit-Sequence in einen String zu wandeln.
Jedes GUID wird als Integer (Ganzzahl) behandelt und mit Nullen aufgefüllt, zu einer hexadezimalen Zeichenkette. Die hexadezimalen Werte „a“ bis „f“ werden als Kleinbuchstaben ausgeben und sind nicht Case-Sensitive, sind also von Groß- und Kleinschreibung unabhängig.

Formale Darstellung des GUID

      UUID                   = time-low "-" time-mid "-"
                               time-high-and-version "-"
                               clock-seq-and-reserved
                               clock-seq-low "-" node
      time-low               = 4hexOctet
      time-mid               = 2hexOctet
      time-high-and-version  = 2hexOctet
      clock-seq-and-reserved = hexOctet
      clock-seq-low          = hexOctet
      node                   = 6hexOctet
      hexOctet               = hexDigit hexDigit
      hexDigit               = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" /
                               "a" / "b" / "c" / "d" / "e" / "f" /
                               "A" / "B" / "C" / "D" / "E" / "F"

Beispiel eines UIDD als URN

urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6

Beispielhafte Darstellung im XML


 
    
    1bdf546c46bb3b4ce14d52ceecf5e99f 

Erzeugung mit PHP

Einfache Lösung mit Funktion unigid, die allerdings keinen Zufallsanteil besitzt.

md5 (uniqid (""));

Deshalb ist die Erzeugung durch eine Koppelung mit Funktion rand wesentlich besser.

md5 (uniqid (rand()));

Weiterführende Informationen

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

3 Kommentare

  1. 128 Bit oder 32 Zeichen? Irgendwas kann da nicht stimmen – bei 8 Bit pro Zeichen (also z.B. ISO-8859-x) wären 128 Bit 16 Zeichen oder entsprechend 32 Zeichen 256 Bit… Der gleiche Fehler steht in der MSDN aber auch, hab den Link leider grade nicht da…

Kommentare sind geschlossen.