uniqid()
función devuelve un número hexadecimal largo de 13 dígitos. De acuerdo con el spec in php.net site, la función usa microtime
para generar el valor único.¿Por qué la función uniqid de PHP devuelve solo 13 dígitos y no 14?
Pero microtime
números devuelve en formato de cadena como la siguiente:
"0.70352700 12689396875"
que son básicamente los microsegundos y los segundos transcurridos desde 1970. Este es un número decimal 9 + 11 dígitos.
La conversión de un número decimal de 20 en hexadecimal daría lugar a un 16 dígitos hexadecimal NO a 13 dígitos uno.
También pensé en sacar el "0". parte que parece que nunca cambia, y los dos últimos dígitos de la parte microsec que parecen permanecer siempre "00". Hacer esto el número decimal sería sólo 9 + 11-3 dígitos de largo, pero todavía un número decimal de 17 dígitos cuando se convierten en hex resultaría en 14 dígitos número hexadecimal NO 13.
I no estoy interesado en OBTENER UNA IDENTIFICACIÓN ÚNICA DE OTRO MODO O UNA IDENTIFICACIÓN ÚNICA MÁS LARGA/CORTA SOLO ESTOY PREGUNTANDO SI ALGUIEN SABE POR QUÉ UNiqid DEVOLUYE SOLO 13 DÍGITOS.
Parece Nosense: si uniqid
vuelve un dígito menos de microtime
, significa que microtime
reparte resultados que son más única de las que devuelve uniqid
.
Debe usar la opción more_entropy, le ofrece un resultado mucho más único. –
No necesito más único, necesito saber por qué el resultado es de solo 13 caracteres de largo. Gracias de todos modos por la sugerencia. –
Los bits más significativos de microtime no son muy frecuentes. Entonces son bastante inútiles cuando tratas de generar dos cadenas únicas en unos pocos milisegundos entre sí. Todas las marcas de tiempo para la próxima semana comenzarán con 126. Y, si logras llamar a uniqid() dos veces en el mismo microsegundo (ya sea en dos subprocesos diferentes o dos servidores diferentes), verás que sus resultados no serán muy único en absoluto. –