15 Stimmen

Fragen zu GUID's: Haben sie immer eine feste Länge, und ist die mittlere Zahl immer 4?

Ich habe gerade ein paar Millionen GUIDs generiert, sie in einen String verwandelt und die Länge ermittelt... es war immer die gleiche. Kann ich mich bei der Konvertierung in einen String auf diese feste Länge der GUID verlassen?

Ist die mittlere Zahl der GUID immer "4", wie in diesem Screenshot gezeigt?

alt text

13voto

Jim L Punkte 2267

Ja, die Länge ist festgelegt und ja, die mittlere Zahl ist immer 4, wenn Sie das Standardformat tostring verwenden. Einige der Bits in der GUID (fast überall, wo es sich nicht um Windows handelt, als UUID bekannt) sind fest, um Dinge wie Version usw. anzugeben.

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

EDIT Ich sollte hinzufügen, dass die "4" nur für Guids gilt, die nach dem in .NET implementierten Algorithmus Guid.NewGuid erzeugt wurden. Es gibt nichts, was Sie daran hindert, ein beliebiges Byte[16] zu nehmen und es in eine Guid zu konvertieren. Sie können sich also nur darauf verlassen, dass es bei der aktuellen Implementierung des Algorithmus in .Net 4 sind. Wenn Sie Guids aus einer anderen Quelle beziehen, können Sie sich nicht auf die 4 verlassen. Ein Update von .Net oder möglicherweise Windows (je nachdem, ob .Net seinen eigenen oder den Windows-Generator verwendet) kann die festen Zahlen der GUID ändern

Der folgende Code z.B. ist vollständig funktionsfähig und hat keine 4 an der Stelle:

        var rand = new Random();
        var byteArray = new byte[16];
        rand.NextBytes(byteArray);
        var g = new Guid(byteArray);

4voto

Gabe Punkte 82268

Von der Dokumentation zu Guid.ToString (ohne Parameter):

Der Wert dieser Guid wie folgt: xxxxxxxx-xxxx-xxxx-xxxxxxxx-xxxxxxxx wobei der Wert der GUID als eine Reihe von Kleinbuchstaben dargestellt wird hexadezimalen Ziffern in Gruppen von 8, 4, 4, 4, 4 und 12 Ziffern und getrennt durch Bindestriche. Ein Beispiel für einen Rückgabewert ist "382c74c3-721d-4f34-80e5-57657b6cbc27".

Die Antwort lautet also "ja", es wird siempre die gleiche Länge haben.

Was die 4 betrifft, so handelt es sich um eine Versionsnummer (gemäß http://en.wikipedia.org/wiki/Uuid ). Jede GUID, die Sie mit diesem Algorithmus erzeugen, wird an dieser Stelle eine 4 haben, aber ältere GUIDs werden eine 1, 2 oder 3 haben. Künftige GUIDs könnten eine 5 oder etwas höheres haben.

3voto

Dominik Weber Punkte 699

Nein - eine GUID muss keine UUID des Typs 4 sein. Tatsächlich sind viele GUIDS unter Windows UUIDs des Typs 1.

Typ 1 benötigt den primären MAC, eine Uhr und eine Sequenz. Dies führt zu Datenlecks, da alle UUID1, die auf demselben System erstellt werden, dieselbe MAC haben. Deshalb nehmen die meisten GUID-Funktionen diese Daten, verschlüsseln sie und wandeln sie in eine hashbasierte UUID um

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X