Pergunta

Por que existem traços em um .NET GUID? Há traços na maioria das implementações de um GUID, ou é apenas uma coisa Microsoft?

Assinado,

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

Foi útil?

Solução

Tecnicamente, não há "traços" em um GUID . Um GUID é um valor de 128 bits que é geralmente armazenado no seguinte maneira (usando C # aqui para representar a estrutura):

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

Os traços estão no representação string de um GUID.

Os traços são opcionais e não são necessários em uma representação de cadeia de um GUID.

Dito isso, há razões históricas a respeito de onde a colocação dos traços são , relacionadas à forma como os GUIDs foram gerado, mas isso histórica semântica não se aplica mais.

Outras dicas

Na versão inicial da especificação UUID (Universally Unique Identifier), cada um dos elementos de dados tinha um significado semântico:

{ time_low } - { time_mid } - { time_high_and_version } - { clock_seq_and_reserved clock_seq_low } - {< strong> node_id }

Estes elementos foram concebidos para proporcionar temporais (bits de tempo), e espaciais (bits hospedeiras) singularidade.

Versão Histórico

Como a probabilidade matemática de colisões em um keyspace de 2 ^ 1024 bits aleatórios foi encontrado para ser astronomicamente improvável, versões subsequentes do UUID especs têm reduzido gradualmente os dados de tempo e de acolhimento por razões de segurança e privacidade.

Os únicos elementos que retêm algum significado são os bits de versão e os bits reservados.

A versão 3 UUIDs são derivados de um hash MD5 de um URI ou outro nome distinto.

A versão 4 é gerado com dados aleatórios e é, atualmente, a implementação mais comum que você verá em estado selvagem.

A versão 5 é derivado de um hash SHA1.

Armazenamento formatos

Uma vez que os hífens são especificados para o ASCII formatação de UUIDs na RFC, embora as seções individuais não mantêm o seu significado original, eles ainda são necessários se você precisar de interoperabilidade.

UUIDs são também, por vezes, armazenado como um base64 ou ASCII85 codificado corda para economizar espaço para transmissão através de transportes que não são compatível com dados binários, e adesão ao RFC não é necessária.

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

Referências:
RFC4122 (ver página 3 especificamente para a descrição ABNF do formato UUID)
Wikipedia GUID UUID

hifens indicam a estrutura de bytes de um GUID.

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

Para:

(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)

Você provavelmente pode tira-los antes de salvar. Pelo menos em .NET o construtor do tipo Guid irá inicializar uma variável Guid de sua representação de seqüência independentemente dos hífens ainda estão lá ou removido.

Você pode obter o seu guid em vários formatos.

Assumindo que você está usando 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)

É apenas uma conveniência.

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

Este é um exemplo de segmentação, como números de telefone, números de cartão de crédito, etc.

Aqui está um bom artigo da Wikipedia sobre ele.

Apenas sobre cada representação visual de um guid que eu vi usa o formato tracejadas. É muito mais fácil sobre os olhos.

A classe Guid de .NET reconhece um monte de diferentes formatos: traços como separadores, sem separadores, suportes como delimitadores, parênteses como delimitadores, sem delimitadores, etc

Os hífens são usados ??para separar cada número

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

Isso é apenas por conveniência. GUID consiste de 16 bytes, o que torna-se 32 caracteres de texto representação hex. Sem hífens GUIDs são mais difíceis de perceber por seres humanos e mais difícil de ser reconhecido como GUIDs e não alguma natureza aleatória números de 16 bytes.

Se você deseja armazenar a algum lugar guid, em seguida, armazená-lo como um array de 16 bytes, não como a sua representação textual. Você vai guardar um monte de espaço, ea questão da hífens não irá surgir.

O GUID é realmente apenas um número. Os hífens mostrar como os vários componentes são divididos, mas não são realmente parte do número. É como um endereço IP -. Você pode armazenar um número de 32 bits, ou você pode armazenar uma string com pontos nele, eles são equivalentes

Os hypens tem avsolutely nenhum efeito sobre a singularidade ou aleatoriedade do valor. Eles são apenas um resquício da definição de um GUID e visualmente separar as quatro partes distintas de dados que compõem o GUID.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top