GUID
O GUID ( G lobally U nique Id entifier ) é um número pseudo -aleatório usado na programação de software , para poder distinguir vários objetos. O tipo mais conhecido de GUID é o uso do UUID pela Microsoft , desenvolvido pela Open Software Foundation , mas também existem outros usos, como o XML .
Os GUIDs são usados principalmente no Component Object Model (COM) da Microsoft, mas também são populares em outros sistemas de software, como Oracle e Novell .
O GUID da Microsoft
O GUID é usado para identificar exclusivamente um componente de software COM específico; desta forma, duas versões (potencialmente incompatíveis) do mesmo componente, mesmo com o mesmo nome, podem ser distinguidas por seus códigos GUID. Embora o GUID não garanta a unicidade efetiva, o número possível de combinações (2 128 ) é tão alto que evita uma coincidência entre dois códigos. Para se ter uma ideia, considerando que em todo o universo observável existem 5 × 10 22 estrelas, cada estrela poderia receber 6,8 × 10 15 GUIDs diferentes.
Além dos componentes, os documentos e arquivos do Office no Advanced Streaming Format também são marcados via GUID . A maioria dos GUIDs usados por vários aplicativos estão contidos no registro do Windows .
Estrutura
Na prática, um GUID é um número de 128 bits (16 bytes ) em formato hexadecimal que pode ser:
3F 25 04 E0 4F 89 11 D3 9A 0C 03 05 E8 2C 33 01
GUIDs são escritos entre chaves e divididos em cinco blocos, um de 4 bytes, três de 2 bytes e um de 6 bytes. No exemplo anterior teríamos:
{3F2504E0-4F89-11D3-9A0C-0305E82C3301}
A notação é, portanto, uma sequência formada pelos seguintes grupos de caracteres, divididos por um hífen (-).
- Grupo 1 ( 8 caracteres )
- Grupo 2 ( 4 caracteres )
- Grupo 3 ( 4 caracteres )
- Dois elementos iniciais do grupo 4 ( 4 caracteres )
- Dois elementos restantes do grupo 4 ( 4 caracteres ) seguidos do grupo 5 ( 8 caracteres , para um total de 12 caracteres )
Na definição de uma estrutura adequada para conter um GUID, em qualquer linguagem de programação , a estrutura mais utilizada é a seguinte.
ESTRUTURA GUIA Data1 dd Data2 dw Dados3 dw Dados4 db 8 TERMINAIS GUID
Em C , a definição contida na biblioteca guiddef.h é esta:
typedef estrutura _GUID {
Data1 longo não assinado;
Data2 curto não assinado;
Data3 curto não assinado;
caractere não assinado Data4 [8];
} GUID;
No framework .NET existe uma classe especial para criação de GUIDs, System.Guid
Algoritmo
O algoritmo especificado pelo OSF e usado pela Microsoft para gerar GUIDs foi criticado. De fato, esse algoritmo utilizou como ponto de partida os endereços MAC das placas de rede dos usuários que o geraram. A vantagem deste método era a certeza absoluta da unicidade do GUID gerado (pois não há dois endereços MAC iguais), mas desta forma era possível rastrear um GUID de volta ao computador que o gerou, com potenciais consequências sobre privacidade e segurança.
Depois que esse problema veio à tona, a Microsoft mudou o algoritmo (implementado na API UuidCreate ) para que ele não dependesse mais de endereços MAC. Ainda é possível gerar voluntariamente GUIDs dependentes de endereço MAC usando a API UuidCreateSequential.
Para saber se um GUID foi gerado com a primeira ou segunda versão do algoritmo, é necessário consultar o primeiro dígito do terceiro bloco. Então, no exemplo anterior
{3F2504E0-4F89-1 1D3-9A0C -0305E82C3301}
Se este dígito for 1, como neste caso, o código é gerado pela primeira versão; vice-versa, se o dígito for um 4, ele é gerado pelo segundo.
Subtipos
Os GUIDs usados em COMs podem ser de diferentes tipos, dependendo de sua função:
- IID - identificadores de interface
- ClsID - identificadores de classe (contidos em HKEY_CLASSES_ROOT\CLSID)
- LibID - identificadores de biblioteca
- CatID - identificadores de categoria (a presença de um CATID em uma classe identifica essa classe como pertencente a uma determinada categoria)
DCOMs introduziram outros subtipos
- AppID - identificadores de aplicativos
- MID - identificadores de máquina
- IpID - identificadores de ponteiro de interface
- CID - identificadores aleatórios referentes a uma sessão RPC
- OID - identificadores de objetos
- OxID - identificadores do exportador de objetos
- SetID - identificadores de um grupo de objetos
Dois GUIDs idênticos de subtipos diferentes podem coexistir sem problemas no mesmo sistema, mas não é permitida a existência de dois GUIDs idênticos do mesmo subtipo.
GUID em XML
Existem também GUIDs dentro de algumas versões do RSS , marcados precisamente pela tag guid, porém eles não têm nada a ver com os GUIDs COM da Microsoft. Na verdade, dentro do RSS, os GUIDs podem ser qualquer número, qualquer string ou URL , válidos ou não. Normalmente, usamos a URL exclusiva da postagem como GUID.
Links externos
- Padrão Internacional "Geração de registro de Identificadores Únicos Universais (UUIDs) e seu uso como componentes de identificador de objeto ASN.1" (ITU-T Rec. X.667 | ISO/IEC 9834-8, tecnicamente compatível com IETF RFC 4122 )
- Gerador de UUID/GUID online , em famkruithof.net .
- Extensão do Firefox de geração de GUID
- Sintaxe e semântica da variante DCE de UUIDs , em opengroup.org .
- Geração de UUID - UUID (ou GUID) em Java , em johannburkard.de .
- Gerador de UUID / GUID on-line (inglês, húngaro) , em nowan.hu .