Domanda

Perché ci sono trattini in un GUID .NET? Ci sono trattini nella maggior parte delle implementazioni di un GUID o è solo una cosa di Microsoft?

È stato firmato,

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

È stato utile?

Soluzione

Tecnicamente, non ci sono & #; trattini " in un GUID . Un GUID è un valore a 128 bit che di solito viene memorizzato nel modo seguente (usando qui C # per rappresentare la struttura):

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

I trattini si trovano nella rappresentazione di stringa di un GUID.

I trattini sono opzionali e non sono richiesti nella rappresentazione di una stringa di un GUID.

Detto questo, ci sono ragioni storiche su dove siano posizionati i trattini , legati a come erano i GUID generato, ma quel semantico storico non si applica più.

Altri suggerimenti

Nella versione iniziale della specifica UUID (Universally Unique Identifier), ciascuno degli elementi di dati aveva un significato semantico:

{ time_low } & # 8211; { time_mid } & # 8211; { time_high_and_version } & # 8211; {& nbsp; clock_seq_and_reserved & nbsp; clock_seq_low } & # 8211; { node_id }

Questi elementi sono stati progettati per fornire unicità temporale (bit temporali) e spaziali (bit host).

Cronologia versioni

Dato che la probabilità matematica di collisioni in uno spazio di chiavi di 2 ^ 1024 bit casuali è risultata astronomicamente improbabile, le versioni successive delle specifiche UUID hanno gradualmente eliminato il tempo e i dati dell'host per motivi di sicurezza e privacy.

Gli unici elementi che mantengono un significato sono i bit della versione e i bit riservati.

Gli UUID versione 3 sono derivati ??da un hash MD5 di un URI o altro nome distinto.

La versione 4 viene generata con dati casuali ed è, attualmente, l'implementazione più comune che vedrai in natura.

La versione 5 è derivata da un hash SHA1.

Formati di archiviazione

Poiché i trattini sono specificati per la formattazione ASCII degli UUID nell'RFC, anche se le singole sezioni non mantengono più il loro significato originale, sono comunque necessarie se è necessaria l'interoperabilità.

Gli UUID vengono talvolta archiviati come stringa codificata base64 o ascii85 per risparmiare spazio per la trasmissione su trasporti non sicuri per i binari e non è richiesta l'adesione all'RFC.

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

Riferimenti:
RFC4122 (vedi pagina 3 specifica per la descrizione ABNF del formato UUID)
Wikipedia GUID UUID

I trattini indicano la struttura in byte di un Guid.

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

Per:

(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)

Probabilmente puoi rimuoverli prima di salvare. Almeno in .NET il costruttore del tipo Guid inizializzerà una variabile Guid dalla sua rappresentazione di stringa indipendentemente dal fatto che i trattini siano ancora presenti o rimossi.

Puoi ottenere la tua guida in vari formati.

Supponendo che tu stia utilizzando 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)

Questo è un esempio di chunking, proprio come i numeri di telefono, i numeri di carta di credito, ecc.

Ecco un buon articolo di Wikipedia a riguardo.

Quasi ogni rappresentazione visiva di una guida che ho visto usa il formato tratteggiato. È molto più facile per gli occhi.

La classe Guid di .NET riconosce una serie di formati diversi: trattini come separatori, nessun separatore, parentesi come delimitatori, parentesi come delimitatori, nessun delimitatore, ecc.

I trattini sono usati per separare ogni numero

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

Questo è solo per comodità. Il GUID è composto da 16 byte che costituiscono 32 caratteri nella rappresentazione di testo esadecimale. Senza trattini I GUID sono più difficili da percepire dall'uomo e più difficili da riconoscere come GUID e non da alcuni numeri a 16 byte di natura casuale.

Se si desidera memorizzare un guid da qualche parte, quindi memorizzarlo come un array di 16 byte, non come rappresentazione testuale. Risparmierai molto spazio e non sorgerà la questione dei trattini.

Il GUID è davvero solo un numero. I trattini mostrano come i vari componenti sono suddivisi ma non fanno realmente parte del numero. È come un indirizzo IP: puoi memorizzare un numero a 32 bit o puoi memorizzare una stringa con punti, sono equivalenti.

Gli hypens non hanno assolutamente alcun effetto sull'unicità o sulla casualità del valore. Sono semplicemente un blocco dalla definizione di un GUID e separano visivamente le quattro parti distinte di dati che compongono il GUID.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top