Eu escrevi o gerador / analisador de UUID para Ruby, por isso considero-me razoavelmente bem informado sobre o assunto. Existem quatro versões principais de UUID:
Os UUIDs da versão 4 são essencialmente apenas 16 bytes de aleatoriedade extraídos de um gerador de números aleatórios criptograficamente seguro, com algumas correções de bits para identificar a versão e a variante do UUID. É extremamente improvável que colidam, mas isso pode acontecer se um PRNG for usado ou se você tiver realmente, realmente, muito, muito, muito azar.
Os UUIDs das versões 5 e 3 usam as funções de hash SHA1 e MD5, respectivamente, para combinar um espaço para nome com uma parte dos dados já exclusivos para gerar um UUID. Isso permitirá, por exemplo, que você produza um UUID a partir de uma URL. As colisões aqui só são possíveis se a função hash subjacente também tiver uma colisão.
Os UUIDs da versão 1 são os mais comuns. Eles usam o endereço MAC da placa de rede (que, a menos que seja falsificado, deve ser exclusivo), além de um carimbo de data / hora, além da variação de bits usual para gerar o UUID. No caso de uma máquina que não possui um endereço MAC, os bytes de 6 nós são gerados com um gerador de números aleatórios criptograficamente seguro. Se dois UUIDs forem gerados em sequência com rapidez suficiente para que o registro de data e hora corresponda ao UUID anterior, o registro de data e hora será incrementado em 1. Colisões não devem ocorrer a menos que ocorra uma das seguintes situações: O endereço MAC é falsificado; Uma máquina executando dois aplicativos geradores de UUID diferentes produz UUIDs no mesmo momento; Duas máquinas sem uma placa de rede ou sem acesso no nível de usuário ao endereço MAC recebem a mesma sequência aleatória de nós e geram UUIDs no exato momento;
Realisticamente, nenhum desses eventos ocorre acidentalmente no espaço de ID de um único aplicativo. A menos que você aceite IDs em, por exemplo, uma escala na Internet ou com um ambiente não confiável em que indivíduos mal-intencionados possam fazer algo ruim no caso de uma colisão de IDs, isso não é algo com que você deva se preocupar. É fundamental entender que, se você gerar a mesma versão 4 UUID que eu, na maioria dos casos, isso não importa. Eu criei o ID em um espaço de ID completamente diferente do seu. Meu aplicativo nunca saberá sobre a colisão, portanto a colisão não importa. Francamente, em um único espaço de aplicativo sem atores maliciosos, a extinção de toda a vida na Terra ocorrerá muito antes de você ter uma colisão, mesmo em um UUID da versão 4, mesmo que você '
Além disso, 2 ^ 64 * 16 são 256 exabytes. Assim, você precisaria armazenar 256 exabytes de IDs antes de ter 50% de chance de uma colisão de IDs em um único espaço de aplicativo.