Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP - uniqid(,true) contre uniqid()+mt_rand()

Sans utiliser plus d'entropie, uniqid fait essentiellement ce qui suit (voir source de uniqid.c ):

$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);

Donc, il prend essentiellement l'heure actuelle en microsecondes et les transforme en une représentation hexadécimale et l'ajoute au préfixe. Cela fournit déjà des valeurs uniques.

Mais les valeurs ne sont pas tout à fait aléatoires. Pour obtenir plus de valeurs aléatoires, vous devez ajouter plus d'entropie en définissant le deuxième paramètre more_entropy . Dans ce cas, le générateur congruentiel linéaire interne de PHP php_combined_lcg (voir source de lgc.c ) est utilisé pour générer un nombre pseudo-aléatoire qui est attaché à la fin, ajoutant environ 30 bits d'entropie supplémentaire pour les rendre plus aléatoires.