2009-11-20 10 views
6

Essere in grado di distinguere un GUID da dati casuali può essere utile quando si esegue il debug di difetti di codice oscuri.C'è un modo per distinguere un GUID da un numero casuale?

Su Windows, ogni GUID generato è della versione 4 quindi ha '4' come primo mezzo byte della terza parte. Quindi se la sequenza di 16 byte viola quella regola non è un GUID versione 4. Ad esempio,

567E1ECB-EA1C-42D3-A3ED-87A5D824D167 

potrebbe essere o un GUID versione 4 o qualsiasi altra cosa, ma

567E1ECB-EA1C-02D3-A3ED-87A5D824D167 //third section starts with 0, not with 4 

non è una versione 4 GUID.

Quali sono altri segni di un blocco di memoria a 16 byte che è o non è un GUID valido?

risposta

1

GUID sono esadecimale, così da poter verificare quali caratteri sono inclusi (ad esempio 'X', 'Y', ecc non sono validi)

Controllare wikipedia per la definizione e, probabilmente, si potrebbe scoprire ulteriori idee là .

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

+2

In un blocco di memoria da 16 byte, si hanno solo byte, non caratteri, e nella sua rappresentazione esadecimale (32 nibbles) per definizione non ne avete nessuno. – MSalters

1

Oltre versione GUID (0100), c'è anche una cosa chiamata la variante GUID. Questo sarà 2 bit (10) nell'ottetto 8. I bit rimanenti a del GUID v4 sono per definizione casuali.

+0

Vuoi dire che in ogni GUID i primi 2 bit nell'ottetto 8 devono essere "10"? – sharptooth

+0

In realtà la variante è i tre bit più significativi dell'ottetto 8 e può essere '000',' 010', '110' o' 111'. Quello standard è '010' e per i GUID generati nello stesso modo in cui questi bit avranno sempre lo stesso valore. – configurator

+0

Mi spiace, intendevo l'ottetto 10. – configurator