这两种生成连续但有些唯一的数字的方法之间的主要区别是什么?我想使用这样的数字作为 MySQL 数据库内的唯一用户 ID,也作为盐来加盐密码。
我的理解是,出于聚类和索引的原因,这些 ID 应该是连续的(我意识到在某些情况下,随机字符串将使同一微秒内发生的两个条目不连续,但希望这是可以忽略不计的。)
在不使用更多熵的情况下,uniqid基本上执行以下操作(参见来源uniqid.c):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);
所以它基本上需要当前时间(以微秒为单位)并将它们转换为十六进制表示并将其附加到前缀。这确实已经提供了独特的价值。
但这些值并不是完全随机的。为了获得更多随机值,您应该通过设置第二个参数来添加更多熵更多熵。在这种情况下 PHP 的内部线性同余发生器 php_combined_lcg
(see 来源lgc.c) 用于生成附加在末尾的伪随机数,添加大约 30 位的额外熵以使其更加随机。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)