Actualización, marzo de 2014:
En primer lugar, es importante tener en cuenta que uniqid
es un nombre poco apropiado, ya que no garantiza una identificación única.
Según la documentación de PHP :
¡ADVERTENCIA!
Esta función no crea una cadena aleatoria ni impredecible. Esta función no debe utilizarse con fines de seguridad. Utilice un generador / función aleatoria criptográficamente segura y funciones hash criptográficamente seguras para crear una identificación segura impredecible.
Y
Esta función no genera tokens criptográficamente seguros, de hecho, sin pasar ningún parámetro adicional, el valor de retorno es un poco diferente de microtime () . Si necesita generar tokens criptográficamente seguros, use openssl_random_pseudo_bytes () .
Establecer more-entropy en true genera un valor más único, sin embargo, el tiempo de ejecución es más largo (aunque en un grado mínimo), según los documentos:
Si se establece en TRUE, uniqid () agregará entropía adicional (usando el generador congruencial lineal combinado) al final del valor de retorno, lo que aumenta la probabilidad de que el resultado sea único.
Tenga en cuenta la línea increases the likelihood that the result will be unique
y no eso garantizará la singularidad.
Puede esforzarse 'sin cesar' por la singularidad, hasta cierto punto, y mejorar utilizando cualquier número de rutinas de cifrado, agregando sales y cosas por el estilo, depende del propósito.
Recomiendo mirar los comentarios sobre el tema principal de PHP, en particular:
http://www.php.net/manual/en/function.uniqid.php#96898
http://www.php.net/manual/en/function.uniqid.php#96549
http://www.php.net/manual/en/function.uniqid.php#95001
Lo que recomendaría es averiguar por qué necesita la singularidad, ¿es por seguridad (es decir, para agregar a una rutina de cifrado / codificación)? Además, ¿qué tan único debe ser? Finalmente, mire la consideración de velocidad. La idoneidad cambiará con las consideraciones subyacentes.
uniqid
conmore_entropy
set da solo unos 92 bits de entropía (23 hexbits). Para entender por qué eso no es bueno para la singularidad, consulte El problema del cumpleaños ...more_entropy
tiene aproximadamente 30 bits de entropía (nueve dígitos decimales), la parte de microsegundos es aproximadamente 20 (seis dígitos decimales), ¿de dónde viene el resto? Debería elegir el segundo de un rango de 100.000 años para obtener 42 bits de entropía.