Mithilfe von GUIDs eindeutige IDs erzeugen

Veröffentlicht: 19. Okt 2002 | Aktualisiert: 21. Jun 2004

Von Mathias Schiffer

Ein GUID (Globally Unique Identifier) ist eine 128-Bit-Zahl, die durch den erzeugenden Algorithmus mit an Sicherheit grenzender Wahrscheinlichkeit eindeutig ist. Dieser MSDN Quickie zeigt Ihnen, wie Sie GUIDs erzeugen.

Auf dieser Seite

 GUIDs in Visual Basic erzeugen
 GUIDs in .NET erzeugen

Eindeutige IDs werden häufig benötigt - sei es als Primärschlüssel in einer Datenbank, als Kundennummer oder als Kennzeichner für ein Interface. Das Konzept eines UUID (Universally Unique IDentifier) hat für solche Zwecke bereits vor Jahren Einzug in die EDV-Szenerie gefunden: Ein Zusammensetzungsalgorithmus soll sicherstellen, dass die erzeugte 128 Bit breite Zahl eindeutig ist. Hierfür werden u.a. Hardware- und Datumsinformationen mit in den Algorithmus einbezogen, um es extrem unwahrscheinlich zu machen, dass auf einem anderen Rechner zur gleichen Zeit der gleiche UUID erzeugt werden kann. Microsofts Variante dieses Konzepts nennt sich - im Anspruch des Namens etwas bescheidener - "Globally Unique Identifier".

GUIDs werden auch unter Windows in mannigfaltiger Weise verwendet. So finden Sie beispielsweise in der Windows Registry Tausende von GUIDs, etwa als IDs für Klassen und Schnittstellen von COM-Komponenten. Hier finden Sie die GUIDs allerdings nicht als Binärzahl mit 128 Stellen vor, sondern in einer für Menschen etwas einfacher zu verdauenden Repräsentation als String mit hexadezimalen Angaben. Typischerweise sieht diese String-Repräsentation etwa so aus:

{C200E360-38C5-11CE-AE62-08002B2B79EF}

128 Bit entsprechen acht Byte, was wiederum 32 Stellen in einer hexadezimalen Schreibweise gleichzusetzen ist. In 128 Bit passt eine Zahl, die in exponentialer Schreibweise etwa 3,4 * 1038 entspricht - rund eine Drei mit 38 Nullen. Zum Vergleich: Die Zahl der Atome im Körper eines Menschen mit 70 Kilo Gewicht entspricht rund 1027.

GUIDs in Visual Basic erzeugen

Einen eindeutigen GUID können Sie mithilfe der API-Funktion CoCreateGuid erzeugen: Die Funktion erzeugt unter Verwendung der von ihr intern aufgerufenen Funktion UuidCreate einen GUID, der sich in einem Array aus 16 Bytes ablegen lässt. Um diese 128 Bit in eine menschlich lesbare Form zu bringen, können Sie die Hilfsfunktion StringFromGUID2 verwenden: Sie erzeugt aus dem GUID einen Unicode-String im oben aufgezeigten Format. Diese beiden Schritte führt die nachstehend beschriebene Funktion NewGuid aus und entfernt zusätzlich die geschweiften Klammern, die keine relevante Information enthalten:

Private Const S_OK As Long = 0&
Private Declare Function CoCreateGuid _
  Lib "OLE32.DLL" ( _
  ByRef ptrGuid As Any _
  ) As Long
Private Declare Function StringFromGUID2 _
  Lib "OLE32.DLL" ( _
  ByRef ptrGuid As Any, _
  ByRef ptrString As Any, _
  ByVal MaxLength As Long _
  ) As Long
Public Function NewGUID() As String
' NewGuid gibt die String-Repräsentation einer GUID
' ohne umgebende geschweifte Klammern zurück.
Dim MyGuid(0 To 15) As Byte
Dim baResult(0 To 75) As Byte
  ' Eine neue GUID erzeugen:
  If CoCreateGuid(MyGuid(0)) = S_OK Then
    ' GUID-Repräsentation in ein Byte-Array schreiben:
    StringFromGUID2 MyGuid(0), baResult(0), 76
  End If
  ' Unicode-Array in String kopieren:
  NewGUID = baResult
  ' Umgebende geschweifte Klammern entfernen:
  NewGUID = Mid$(NewGUID, 2, 36)
End Function

 

GUIDs in .NET erzeugen

Die Erzeugung eines GUID mithilfe des .NET Frameworks stellt sich noch einfacher dar: Das .NET Framework bietet zur Erzeugung eines GUID eine vorgefertigte Klasse System.Guid an. Mithilfe ihrer Funktion NewGuid können Sie einen neuen GUID erzeugen, den Sie mithilfe der ToString-Funktion in die String-Repräsentation umwandeln können:

' Code in VB.NET:
Dim MyGuid As String = System.Guid.NewGuid().ToString()
MessageBox.Show (MyGuid)
// Code in C#:
String MyGuid = System.Guid.NewGuid().ToString();
MessageBox.Show (MyGuid);