Loading AI tools
numero pseudo-casuale usato nella programmazione software, per poter distinguere vari oggetti Da Wikipedia, l'enciclopedia libera
Il GUID (Globally Unique Identifier, identificatore unico globale) è un numero pseudo-casuale usato nella programmazione software, per poter distinguere vari oggetti. Il tipo più noto di GUID è l'utilizzo di Microsoft dell'UUID, ideato dalla Open Software Foundation, ma vi sono anche altri usi, come quello all'interno di XML.
I GUID vengono utilizzati soprattutto nell'ambito del Component Object Model (COM) di Microsoft, tuttavia sono diffusi anche in altri sistemi software, quali Oracle e Novell.
Il GUID viene utilizzato per identificare in maniera univoca un determinato componente software COM; in questo modo due versioni (potenzialmente incompatibili) di uno stesso componente, anche con lo stesso nome, possono essere distinte tramite i loro codici GUID. Sebbene il GUID non garantisca un'effettiva unicità, il numero possibile di combinazioni (2128) è talmente elevato da scongiurare una coincidenza tra due codici. Per rendere l'idea, considerando che in tutto l'universo osservabile sono contenute 5×1022 stelle, ad ogni singola stella potrebbero essere assegnati 6.8×1015 diversi GUID.
Oltre ai componenti, sono marcati tramite GUID anche i documenti Office e i file in formato Advanced Streaming Format. La maggior parte dei GUID utilizzati da diverse applicazioni sono contenute nel registro di sistema di Windows.
Nella pratica un GUID è un numero di 128 bit (16 byte) in formato esadecimale quale può essere:
3F 25 04 E0 4F 89 11 D3 9A 0C 03 05 E8 2C 33 01
I GUID di Microsoft vengono spesso scritti tra parentesi graffe e divisi in cinque blocchi, uno di 4 byte, tre di 2 byte e uno di 6 byte. Nell'esempio precedente si avrebbe:
{3f2504e0-4f89-11d3-9a0c-0305e82c3301}
La notazione è quindi una sequenza formata dai seguenti gruppi di caratteri, divisi da un trattino (-).
Nella definizione di una struttura atta a contenere un GUID, in un qualunque linguaggio di programmazione, la struttura più utilizzata è la seguente.
GUID STRUCT Data1 dd Data2 dw Data3 dw Data4 db 8 GUID ENDS
In C, la definizione contenuta nella libreria guiddef.h è questa:
typedef struct _GUID { unsigned long Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4[8]; } GUID;
Nel framework .NET, è presente una classe apposita per la creazione di GUID, System.Guid
L'algoritmo specificato dalla OSF e utilizzato da Microsoft per la generazione dei GUID è stato oggetto di critica. Infatti tale algoritmo utilizzava come punto di partenza gli indirizzi MAC delle schede di rete degli utenti che lo generavano. Il vantaggio di questo metodo era l'assoluta certezza dell'univocità del GUID generato (perché non esistono due indirizzi MAC uguali), ma in questo modo era possibile risalire da un GUID al computer che l'aveva generato, con potenziali conseguenze sulla privacy e sulla sicurezza.
Dopo che venne alla luce questo problema, Microsoft modificò l'algoritmo (implementato nell'API UuidCreate) in modo che non dipendesse più dagli indirizzi MAC. È ancora possibile generare volontariamente GUID dipendenti dall'indirizzo MAC usando l'API UuidCreateSequential.
Per sapere se un GUID è stato generato con la prima o con la seconda versione dell'algoritmo, bisogna fare riferimento alla prima cifra del terzo blocco. Quindi, nell'esempio precedente
{3F2504E0-4F89-11D3-9A0C-0305E82C3301}
Se questa cifra è un 1, come in questo caso, il codice è generato dalla prima versione; viceversa, se la cifra è un 4, è generato dalla seconda.
I GUID utilizzati nei COM possono essere di diverso tipo, a seconda della loro funzione:
Le DCOM hanno introdotto altri sottotipi
Due uguali GUID di diverso sottotipo possono coesistere senza problemi nello stesso sistema, ma non è ammessa l'esistenza di due uguali GUID dello stesso sottotipo.
Esistono anche dei GUID all'interno di alcune versioni di RSS, marcati appunto dal tag guid
, tuttavia non hanno niente a che fare con i GUID dei COM Microsoft. All'interno di RSS, infatti, i GUID possono essere un qualsiasi numero, una qualsiasi stringa o un URL, valida o meno. Tipicamente si usa utilizzare come GUID l'URL univoco del post.