2011-11-08 15 views
8

Ho un identificativo univoco per il client che genera ogni volta che un client richiede un supporto di servizio.identificatore univoco php per i client

una volta che l'id è di generare, l'id è inserito nel database

qui il mio codice:

function makeUnique() { 
$start_time = uniqid(microtime(1)); 
$duration = sprintf('%0.24f', $start_time); 
return date('dmYHis').$duration; 
} 

echo makeUnique(); 

questa uscita: 071120112032291320715949.928639888763427734375000

per qualche ragione io ottenere 071120112032291320715949 come numero. Che cosa sto facendo di sbagliato?

risposta

6

è necessario rimuovere il "." (punto) nella tua funzione. probabilmente stai utilizzando un INT che rimuove i numeri dopo il punto.

return str_replace('.', '', date('dmYHis').$duration);

e assicurarsi che il campo è abbastanza grande - come varchar (50)

mia raccomandazione sarà quello di hash semplicemente l'id client utilizzando md5

md5($clientid)

e si avere il campo mysql come char (32)

+0

è md5 buono da usare? –

+2

si prega di leggere questo: http://developer.yahoo.com/security/ –

+0

grazie per il suggerimento –

4

Hai già la soluzione nel tuo codice . La funzione php uniqid() fornisce ... beh, un ID univoco. Se si vuole essere sicuri che sia veramente veramente veramente veramente unico nel suo genere (anche se non è necessario), basta aggiungere il tempo() fino alla fine, in questo modo:

return uniqid().time(); 

Questo sarebbe anche tornare lettere mescolato con i numeri (più alta entropia) , come questa risposta:

4eb8895a76edc1320716634 
+0

Potete anche fare come questo 'uniqid ('', TRUE)' che aggiungerà un'ulteriore entropia (utilizzando il generatore congruenziale lineare combinato) alla fine del valore di ritorno, che aumenta la probabilità che il risultato sia univoco. – DarkSide

Problemi correlati