2011-11-08 35 views
8

Tengo un identificador único para el cliente que genero cada vez que un cliente solicita un servicio de soporte.identificador único de php para clientes

una vez que el id es generar, el identificador se inserta en la base de datos

aquí mi código:

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

echo makeUnique(); 

esta salida: 071120112032291320715949.928639888763427734375000

por alguna razón me sale 071120112032291320715949 como el número. ¿Qué estoy haciendo mal?

Respuesta

6

necesita eliminar el "." (punto) en su función. probablemente estés usando una INT que elimina números después del punto.

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

y asegúrese de que el campo es lo suficientemente grande - como varchar (50)

mi recomendación será simplemente hash de la ID de cliente usando MD5

md5($clientid)

y tener el campo mysql como un char (32)

+0

es md5 bueno de usar? –

+2

lea esto: http://developer.yahoo.com/security/ –

+0

gracias por la sugerencia –

4

Ya tienes la solución en tu código . La función php uniqid() proporciona ... bueno, una ID única. Si desea asegurarse de que es muy muy muy muy singular (aunque no es necesario), acaba de añadir el tiempo() hasta el final, así:

return uniqid().time(); 

Esto también volvería letras mezcladas con los números (mayor entropía) , como esta respuesta:

4eb8895a76edc1320716634 
+0

También puede hacer esto 'uniqid ('', TRUE)' que agregará entropía adicional (utilizando el generador congruente lineal combinado) al final del valor de retorno, lo que aumenta la probabilidad de que el resultado sea único. – DarkSide

Cuestiones relacionadas