PHP 具有更多熵的 uniqid 函数
PHP's uniqid function with more entropy
问题:
当使用 PHP 的 uniqid 函数和更多的熵设置时,第 15 个字符在我的运行中总是一个句点(点)。是否保证第 15 个字符始终为点?
后续:
感谢@FuzzyTree 的回答。
我还进一步调查了一下,所以对于那些感兴趣的人来说,php_combined_lcg() 函数会生成一个介于 0 和 1 之间的随机数(例如 0.862215793)。小数点前有一个数字的原因是因为它乘以 10(在本例中变成 8.62215793)。这可以防止第 14 个字符始终为 0。
是的,如果 more_entropy
设置为真,第 15 个字符保证是一个点。
if (more_entropy) {
uniqid = strpprintf(0, "%s%08x%05x%.8F", prefix, sec, usec, php_combined_lcg() * 10);
^ hard coded dot here preceeded by 14 characters
} else {
uniqid = strpprintf(0, "%s%08x%05x", prefix, sec, usec);
}
问题:
当使用 PHP 的 uniqid 函数和更多的熵设置时,第 15 个字符在我的运行中总是一个句点(点)。是否保证第 15 个字符始终为点?
后续:
感谢@FuzzyTree 的回答。
我还进一步调查了一下,所以对于那些感兴趣的人来说,php_combined_lcg() 函数会生成一个介于 0 和 1 之间的随机数(例如 0.862215793)。小数点前有一个数字的原因是因为它乘以 10(在本例中变成 8.62215793)。这可以防止第 14 个字符始终为 0。
是的,如果 more_entropy
设置为真,第 15 个字符保证是一个点。
if (more_entropy) {
uniqid = strpprintf(0, "%s%08x%05x%.8F", prefix, sec, usec, php_combined_lcg() * 10);
^ hard coded dot here preceeded by 14 characters
} else {
uniqid = strpprintf(0, "%s%08x%05x", prefix, sec, usec);
}