Frage

Warum gibt es Striche in einem .NET GUID?Gibt es Striche in den meisten Implementierungen eine GUID, oder ist es nur ein Microsoft-Sache?

Unterzeichnet,

741ecf77-9c92-4435-8e6b-85975bd13452

War es hilfreich?

Lösung

Technisch gibt es keine "Striche" in einem GUID . Ein GUID ist ein 128-Bit-Wert, der in der Regel auf die folgende Weise gespeichert wird (unter Verwendung von C # hier die Struktur darzustellen):

public struct Guid
{
  public ulong Data1;
  public ushort Data2;
  public ushort Data3;
  public fixed byte Data4[8];
}

Die Striche sind in der String-Darstellung von einer GUID.

Die Striche sind optional und werden nicht in einer Zeichenfolgendarstellung einer GUID erforderlich ist.

Wie gesagt, gibt es historische Gründe, wo die Platzierung der Striche werden, damit zusammen, wie die GUIDs waren erzeugt, aber die historische Semantik nicht mehr gilt.

Andere Tipps

In der ersten version der UUID (Universally Unique Identifier) Spezifikation, die jeweils die Daten, die Elemente hatten eine semantische Bedeutung:

{ time_low } – { time_mid } – { time_high_and_version } – { clock_seq_and_reserved clock_seq_low } – { node_id }

Diese Elemente wurden entwickelt, um zeitliche (Zeit-bits), und räumlicher (host-bits) Einzigartigkeit.

Version History

Als die mathematische Wahrscheinlichkeit von Kollisionen in einem Schlüsselraum von 2^1024 zufälligen bits, die war gefunden zu werden astronomisch unwahrscheinlich, spätere Versionen des UUID-spec haben Auslaufen der Zeit-und host-Daten für Sicherheits-und Privatsphäre-Gründen.

Die einzigen Elemente behalten, dass alle Bedeutung sind die bit-version und die reservierten bits.

Version 3 UUIDs sind abgeleitet von der MD5-hash eines URI oder andere Distinguished Name.

Version 4 wird erzeugt mit zufälligen Daten und ist derzeit die häufigste Umsetzung werden Sie in freier Wildbahn sehen.

Version 5 ist abgeleitet von einem SHA1-hash.

Lagerung Formate

Da die Bindestriche angegeben werden, für die ASCII-Formatierung von UUIDs in der RFC, auch wenn die einzelnen Abschnitte nicht mehr behalten Ihre ursprüngliche Bedeutung, Sie sind immer noch erforderlich, wenn Sie brauchen die Interoperabilität.

UUIDs sind allerdings auch manchmal so gespeichert, wie Sie einem base64-oder ascii85 encoded string, um Platz zu sparen für die übertragung über Transporte, die nicht binary safe, und die Einhaltung der RFC ist nicht erforderlich.

Ascii:   3F2504E0-4F89-11D3-9A0C-0305E82C3301
Base64:  7QDBkvCA1+B9K/U0vrQx1A
Ascii85: 5:$Hj:Pf\4RLB9%kU\Lj

Referenzen:
RFC4122 (siehe Seite 3, die speziell für die ABNF Beschreibung des UUID-format)
Wikipedia GUID UUID

Bindestriche bezeichnen die Byte-Struktur eines Guid.

typedef struct _GUID 
{  
   DWORD Data1;  
   WORD Data2;  
   WORD Data3;  
   BYTE Data4[8];
} GUID;

Für:

(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)

Sie können sie wahrscheinlich Streifen vor dem Speichern. Mindestens in .NET den Konstruktor des Guid Typs eine Guid Variable aus seiner String-Darstellung, unabhängig davon, wird initialisiert, ob die Bindestriche sind immer noch da oder entfernt werden.

Sie können Ihre guid in verschiedenen Formaten erhalten.

Angenommen, Sie sind mit C #:

Guid guid = Guid.NewGuid();

Console.WriteLine(guid.ToString("N"))

63be6f7e4e564f0580229f958f492077

Console.WriteLine(guid.ToString("D"))

63be6f7e-4e56-4f05-8022-9f958f492077

Console.WriteLine(guid.ToString("B"))

{63be6f7e-4e56-4f05-8022-9f958f492077}

Console.WriteLine(guid.ToString("P"))

(63be6f7e-4e56-4f05-8022-9f958f492077)

Es ist nur eine Bequemlichkeit.

http://en.wikipedia.org/wiki/GUID

Dies ist ein Beispiel für Chunking, wie Telefonnummern, Kreditkartennummern, etc.

Hier ist ein guter Wikipedia-Artikel über sie.

So gut wie jede visuelle Darstellung eines guid, die ich habe das gestrichelte Format gesehen verwendet. Es ist viel einfacher auf den Augen.

Die Guid Klasse von .NET erkennt eine Reihe von verschiedenen Formaten: Striche als Trennzeichen, keine Separatoren, Klammern als Trennzeichen, Klammern als Trennzeichen, ohne Begrenzer, etc

Die Bindestriche werden verwendet, um jede Zahl zu trennen

E93416C5-9377-4A1D-8390-7E57D439C9E7

Hex digits  Description
8           Data1
4           Data2
4           Data3
4           Initial two bytes from Data4
12          Remaining six bytes from Data4

Das ist nur für die Bequemlichkeit. GUID besteht aus 16 Bytes, die 32 Zeichen in hex Textdarstellung bildet. Ohne Bindestriche GUIDs härter sind durch den Menschen und schwerer zu erkennen anerkannt als GUIDs werden und nicht einige zufällige Natur 16-Byte-Zahlen.

Wenn Sie eine guid irgendwo speichern möchten, dann speichern Sie es als ein Array von 16 Bytes, nicht als Textdarstellung. Sie werden eine Menge Platz sparen, und die Frage der Bindestriche nicht entstehen.

Die GUID ist wirklich nur eine Zahl. Die Bindestriche zeigen, wie die verschiedenen Komponenten abgebaut werden, sind aber nicht wirklich Teil der Zahl. Es ist wie eine IP-Adresse -. Sie können speichern Sie eine 32-Bit-Zahl, oder Sie können einen String mit Punkten darin speichern, sie sind gleichwertig

Die Bindestriche haben avsolutely keine Auswirkungen auf die Einzigartigkeit oder Zufälligkeit des Wertes. Sie sind lediglich ein Überbleibsel aus der Definition einer GUID und optisch trennen die vier Teile der Daten, die die GUID bilden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top