Escribí el generador / analizador UUID para Ruby, por lo que me considero razonablemente bien informado sobre el tema. Hay cuatro versiones principales de UUID:
Los UUID de la versión 4 son esencialmente solo 16 bytes de aleatoriedad extraídos de un generador de números aleatorios criptográficamente seguro, con algunos cambios de bits para identificar la versión y variante del UUID. Es extremadamente improbable que estos choquen, pero podría suceder si se usa un PRNG o si resulta que tienes mucha, mucha, mucha, mucha, mucha mala suerte.
Los UUID de la Versión 5 y la Versión 3 usan las funciones hash SHA1 y MD5 respectivamente, para combinar un espacio de nombres con una pieza de datos ya únicos para generar un UUID. Esto, por ejemplo, le permitirá producir un UUID desde una URL. Las colisiones aquí solo son posibles si la función hash subyacente también tiene una colisión.
Los UUID de la versión 1 son los más comunes. Utilizan la dirección MAC de la tarjeta de red (que, a menos que sea falsa, debe ser única), más una marca de tiempo, más el giro de bits habitual para generar el UUID. En el caso de una máquina que no tiene una dirección MAC, los bytes de 6 nodos se generan con un generador de números aleatorios criptográficamente seguro. Si se generan dos UUID en secuencia lo suficientemente rápido como para que la marca de tiempo coincida con el UUID anterior, la marca de tiempo se incrementa en 1. Las colisiones no deberían ocurrir a menos que ocurra una de las siguientes situaciones: la dirección MAC es falsa; Una máquina que ejecuta dos aplicaciones generadoras de UUID diferentes produce UUID en el mismo momento; Dos máquinas sin una tarjeta de red o sin acceso de nivel de usuario a la dirección MAC reciben la misma secuencia de nodo aleatorio y generan UUID en el mismo momento exacto;
Siendo realistas, ninguno de estos eventos ocurre por accidente dentro del espacio de identificación de una sola aplicación. A menos que acepte identificaciones en, por ejemplo, una escala de Internet, o con un entorno no confiable en el que las personas malintencionadas puedan hacer algo malo en el caso de una colisión de identificaciones, simplemente no es algo de lo que deba preocuparse. Es fundamental comprender que si genera la misma versión 4 UUID que yo, en la mayoría de los casos, no importa. He generado la ID en un espacio de ID completamente diferente al tuyo. Mi aplicación nunca sabrá sobre la colisión, por lo que la colisión no importa. Francamente, en un solo espacio de aplicación sin actores maliciosos, la extinción de toda la vida en la tierra ocurrirá mucho antes de que tenga una colisión, incluso en un UUID de versión 4, incluso si usted '
Además, 2 ^ 64 * 16 son 256 exabytes. Como en, necesitaría almacenar 256 exabytes de ID antes de tener una probabilidad del 50% de una colisión de ID en un solo espacio de aplicación.