Perché ci sono trattini in un GUID .NET?
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
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)
È solo una comodità.
Questo è un esempio di chunking, proprio come i numeri di telefono, i numeri di carta di credito, ecc.
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.