Question

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 uniquement de Microsoft?

Signé,

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

Était-ce utile?

La solution

Techniquement, il n'y a pas de "tirets". dans un GUID . Un GUID est une valeur de 128 bits qui est généralement stockée de la manière suivante (en utilisant 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 de chaîne d'un GUID.

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

Cela étant dit, il existe des raisons historiques de l'emplacement des tirets , liées à la manière dont les GUID étaient généré, mais cette sémantique historique ne s'applique plus.

Autres conseils

Dans la version initiale de la spécification UUID (Universally Unique Identifier), chacun des éléments de données avait une signification sémantique:

{ time_low } - { time_mid } - { time_high_and_version } - {strong> clock_seq_and_reserver & nbsp; clock_seq_low } - { id_noeud }

Ces éléments ont été conçus pour fournir une unicité temporelle (bits temporels) et spatiale (bits hôtes).

Historique des versions

La probabilité mathématique de collisions dans un espace clé de 2 ^ 1024 bits aléatoires étant astronomiquement improbable, des versions ultérieures de la spécification UUID ont progressivement supprimé les données d'heure et d'hôte pour des raisons de sécurité et de confidentialité.

Les seuls éléments qui conservent une signification sont les bits de version et les bits réservés.

Les UUID de la version 3 sont dérivés d'un hachage MD5 d'un URI ou d'un autre nom distinctif.

La version 4 est générée avec des données aléatoires et constitue actuellement l’implémentation la plus courante que vous verrez à l’état sauvage.

La version 5 est dérivée d'un hachage SHA1.

Formats de stockage

Étant donné que les traits d'union sont spécifiés pour la mise en forme ASCII des UUID dans la RFC, même si les sections individuelles ne conservent plus leur signification d'origine, elles sont toujours nécessaires si vous avez besoin d'interopérabilité.

Les UUID sont également parfois stockés sous forme de chaîne codée en base64 ou ascii85 pour économiser de l'espace pour la transmission sur des transports qui ne sont pas sécurisés sur le plan binaire, et le respect du RFC n'est pas requis.

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

Références:
RFC4122 (voir la page 3 spécifiquement pour la description ABNF du format UUID)
Wikipedia GUID UUID

Les traits d'union désignent la structure d'octets d'un Guid.

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

Pour:

(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)

Vous pouvez probablement les supprimer avant de les enregistrer. Au moins dans .NET, le constructeur de type Guid initialisera une variable Guid à partir de sa représentation sous forme de chaîne, que les traits d'union soient toujours présents ou supprimés.

Vous pouvez obtenir votre guide 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)

C'est juste une commodité.

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

Ceci est un exemple de segmentation, tout comme les numéros de téléphone, les numéros de carte de crédit, etc.

Voici un bon article de Wikipedia à ce sujet.

À peu près toutes les représentations visuelles d'un guide que j'ai vu utilisent le format en pointillé. C'est beaucoup plus facile pour les yeux.

La classe Guid de .NET reconnaît un grand nombre de formats différents: tirets en tant que séparateurs, pas de séparateurs, crochets en tant que délimiteurs, parenthèses en tant que délimiteurs, aucun séparateur, etc.

Les traits d'union servent à séparer chaque numéro

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

C'est juste pour votre commodité. Le GUID est composé de 16 octets, ce qui représente 32 caractères en représentation textuelle. Sans les traits d'union, les GUID sont plus difficiles à percevoir par les humains et à être reconnus comme des GUID et non par des nombres aléatoires de 16 octets.

Si vous souhaitez stocker un GUID quelque part, stockez-le sous la forme d'un tableau de 16 octets et non sous sa représentation textuelle. Vous économiserez beaucoup d'espace et la question des traits d'union ne se posera pas.

Le GUID est vraiment juste un nombre. Les traits d'union vous montrent comment les divers composants sont décomposés mais ne font pas vraiment partie du nombre. C'est comme une adresse IP: vous pouvez stocker un nombre sur 32 bits ou une chaîne contenant des points, ils sont équivalents.

Les hypens n’ont pratiquement aucun effet sur l’unicité ou le caractère aléatoire de la valeur. Celles-ci ne sont que des restes de la définition d’un GUID et séparent visuellement les quatre parties distinctes de données constituant le GUID.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top