2009-09-19 25 views

Respuesta

19

EDIT:

Huy! Me olvidé de esta antigua respuesta mía. Para aclarar la confusión creada por mi ingenuidad (consistente con los comentarios hechos a continuación): MD5 (como la mayoría de los hashes útiles) son no inyectiva, por lo que no se garantiza que su salida sea única para todas las entradas.

Si las colisiones hash son un problema (en este caso, lo son), el uso de esta técnica requerirá comprobar, después de hash, si ya se ha generado una clave idéntica.


Desde uniqid utiliza la hora actual en microsegundos para generar el GUID, no hay prácticamente ninguna posibilidad de que alguna vez se encuentra con el mismo dos veces.

Así que si solo lo está usando para crear nombres de archivo únicos, uniqid() será suficiente. Si desea evitar que los usuarios adivinen la guía, también podría dificultarla y md5.

+1

me gusta la idea de que md5'ing :) –

+4

Pero doesn MD5 preservar la singularidad – Gumbo

+2

Si md5 una clave que ya es única, seguirá siendo única. – BraedenP

6

GUID es la versión de UUID de Microsoft. El uniqid de PHP es la versión 4 de UUID. Definitivamente lo suficientemente bueno.

2

También queremos crear GUID para llamar a la API .NET y esta función generar una clave en formato GUID y funciona para mí

function generateGuid($include_braces = false) { 
    if (function_exists('com_create_guid')) { 
     if ($include_braces === true) { 
      return com_create_guid(); 
     } else { 
      return substr(com_create_guid(), 1, 36); 
     } 
    } else { 
     mt_srand((double) microtime() * 10000); 
     $charid = strtoupper(md5(uniqid(rand(), true))); 

     $guid = substr($charid, 0, 8) . '-' . 
       substr($charid, 8, 4) . '-' . 
       substr($charid, 12, 4) . '-' . 
       substr($charid, 16, 4) . '-' . 
       substr($charid, 20, 12); 

     if ($include_braces) { 
      $guid = '{' . $guid . '}'; 
     } 

     return $guid; 
    } 
}