uniqid()
restituisce un numero esadecimale lungo 13 cifre. Secondo lo spec in php.net site, la funzione utilizza microtime
per generare il valore univoco.Perché la funzione uniqid di PHP restituisce solo 13 cifre e non 14?
Ma microtime
restituisce i numeri in formato stringa come il seguente:
"0.70352700 12689396875"
che sono fondamentalmente i microsecondi ed i secondi trascorsi dal 1970. Questo è un numero decimale 9 + 11 cifre.
La conversione di un numero decimale da 20 in esadecimale risulterebbe in un numero esadecimale di 16 cifre esadecimali non a 13 cifre .
Ho anche pensato di estrarre lo "0". parte che sembra non cambiare mai, e le ultime due cifre della parte microsec che sembrano rimanere sempre "00". In questo modo il numero decimale sarebbe lungo solo 9 + 11-3 cifre, ma ancora un numero decimale di 17 cifre quando convertito in esadecimale si tradurrebbe in 14 cifre numero esadecimale NON 13.
io non sono interessato a COME OTTENERE UN ID UNICO IN UN ALTRO MODO O UN ID PIÙ UNICO PIÙ LUNGO/CORRETTO! STO FACENDO SOLTANTO SE QUALCUNO CONOSCE PERCHÉ uniqid RESTA SOLO 13 CIFRE.
Sembra nosense: se uniqid
restituisce una cifra inferiore a microtime
, significa che microtime
dà fuori i risultati che sono più unici di quelli restituiti da uniqid
.
Dovresti usare l'opzione more_entropy, ti dà un risultato molto più unico. –
Non ho bisogno di altro, ho bisogno di sapere perché il risultato è lungo solo 13 caratteri. Grazie comunque per il suggerimento. –
I bit più significativi di microtime non lo fanno molto spesso. Quindi sono piuttosto inutili, quando stai cercando di generare due stringhe uniche in pochi millisecondi l'una dall'altra. Tutti i timestamp per la prossima settimana inizieranno con 126. E, se dovessi chiamare uniqid() due volte nello stesso microsecondo (sia in due thread differenti o in due server diversi), scoprirai che i suoi risultati non saranno molto assolutamente unico. –