C# - O Identificador Global Único - Guid


O struct Guid representa um identificador único global: um valor de 16 bytes que se gerado randomicamente irá gerar um identificador (quase) único.

É óbvio que GUIDs gerados podem colidir. Desde de que os GUIDs possuem 128 bits, basta gerar 2^128+1 deles (não é tão simples como escrever isso) e pelo princípio de pombal deve haver uma colisão.

Quando dizemos que um GUID é único, o que realmente queromos dizer é que o espaço da chave é tão grande que é praticamente impossível para gerar
acidentalmente o mesmo GUID duas vezes (assumindo que estamos gerando GUIDs aleatoriamente).
O princípio do pombal ou princípio da casa dos pombos é a afirmação de que se n pombos devem ser postos em m casas, e se n > m, então pelo menos uma casa irá conter mais de um pombo. Matematicamente falando, isto quer dizer que se o número de elementos de um conjunto finito A é maior do que o número de elementos de um outro conjunto B, então uma função de A em B não pode ser injetiva.

É também conhecido como teorema de Dirichlet ou princípio das gavetas de Dirichlet, pois supõe-se que o primeiro relato deste principio foi feito por Dirichlet em 1834, com o nome de Schubfachprinzip ("princípio das gavetas").

O princípio do pombal é um exemplo de um argumento de calcular que pode ser aplicado em muitos problemas formais, incluindo aqueles que envolvem um conjunto finito.

Embora se trate de uma evidência extremamente elementar, o princípio é útil para resolver problemas que, pelo menos à primeira vista, não são imediatos. Para aplicá-lo, devemos identificar, na situação dada, quem faz o papel dos objetos e quem faz o papel das gavetas.

  • Quantas pessoas são necessárias para se ter certeza que haverá pelo menos duas delas fazendo aniversário no mesmo mês?

Resposta: 13 pessoas. Pelo princípio da casa dos pombos se houver mais pessoas (13) do que meses (12) é certo que pelos menos duas pessoas terão nascido no mesmo mês.

http://pt.wikipedia.org/wiki/Princ%C3%ADpio_de_Pigeonhole

Os guids são usados para chaves e outros cenários onde um identificador único seja necessário.

Existem identificadores de 2^128 a 3.4 x 10 ^38.

Para criar um novo Guid randômico basta chamar o método estático Guid.NewGuid():

Para instanciar um valor existente podemos usar um dos seguintes construtores:

public Guid (byte[] b);     // Aceita um array de 16 byte
public Guid (string g);     
 // Aceita uma string

Quando representando como uma string, um Guid é formatado como um número hexadecimal de 32 dígitos, com hífens opcionais depois do oitavo, décimo segundo e vigésimo dígito.

A string inteira pode também ser envolvida por colchetes [] ou chaves {}:

O método ToByteArray converte um Guid para um array de bytes.

A propriedade Guid.Empty retorna um Guid vazio (todos com zeros).

Mateus 15:13 Respondeu-lhes ele: Toda planta que meu Pai celestial não plantou será arrancada.

Mateus 15:14 Deixai-os; são guias cegos; ora, se um cego guiar outro cego, ambos cairão no barranco.

Referências:


José Carlos Macoratti