67 votes

Pourquoi y a-t-il des tirets dans un GUID .NET?

Pourquoi y a-t-il des tirets dans un GUID .NET? Existe-t-il des tirets dans la plupart des implémentations d'un GUID, ou s'agit-il simplement d'un problème Microsoft?

Signé,

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

65voto

casperOne Points 49736

Techniquement, il n'y a pas de "tirets" dans un GUID. Un GUID est de 128 bits, la valeur qui est généralement stocké dans la manière suivante (à l'aide de C# ici pour représenter la structure):

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

Les tirets sont dans la représentation sous forme de chaîne d'un GUID.

Les tirets sont facultatifs et ne sont pas nécessaires dans une représentation sous forme de chaîne d'un GUID.

Cela dit, il y a des raisons historiques à l'emplacement des tirets sont, liées à la façon dont les Guid ont été générés, mais que l'historique de la sémantique ne s'applique plus.

45voto

joshperry Points 17727

À l'origine, incarnation de l'UUID (Universally Unique Identifier) spécification de chacun des éléments de données avait un sens:

time_low - time_mid - time_high_and_version - clock_seq_and_reserved clock_seq_low - node_id (Adresse MAC)

Ces éléments étaient destinés à l'origine à fournir temporelle et spatiale de l'unicité. Dans les dernières versions de l'UUID spec ces éléments de données n'ont plus aucune signification précise, pour diverses raisons (sécurité, confidentialité), sauf pour la version de bits et les bits réservés.

La Version 3 Uuid sont dérivées à partir d'un hash MD5 d'un URI ou un autre Nom unique, la Version 4 est générée par des données aléatoires et la Version 5 est dérivé à partir d'un hash SHA1.

Donc, ces traits d'union font partie de l'historique des données format de l'original de l'UUID de la spec. et ne sont pas nécessaires pour fournir de l'entropie dans l'une de ces versions. Cependant, ces traits d'union sont toujours spécifiées pour utilisation dans la chaîne de la représentation de l'Uuid d'aujourd'hui afin de produire un URN (Uniform Resource Name).

Uuid sont parfois stockées sous un format base64 ou ascii85 chaîne codée pour économiser de l'espace lors de l'adhésion à la RFC n'est pas nécessaire (bien que le stockage binaire est le plus efficace de l'espace):

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

Références:
RFC4122 (voir page 3 spécifiquement pour l'ABNF description de l'UUID format)
Wikipédia GUID UUID

14voto

Nissim Points 2174

Vous pouvez obtenir votre guid dans différents formats.

En supposant que vous utilisez 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)

9voto

Otávio Décio Points 44200

C'est juste une commodité.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X