首页 > 解决方案 > 我使用 random_int() 和 uniqid() 生成随机字符串

问题描述

下面是我用来生成随机字符串的代码,我是否有可能得到重复

<?php

echo random_int(100,999).substr(uniqid(),-4);

?>

标签: php

解决方案


是的,事实上,您获得副本的可能性相对较高。考虑以下测试:

$arr = [];
$i = 0;
while (1) {
    echo ++$i . PHP_EOL;
    $val = random_int(100,999).substr(uniqid(),-4);
    if (in_array($val, $arr)) break;
    $arr[] = $val;
}

在第一次尝试重复时,我进行了不到 5000 次迭代。100% 保证字符串唯一的唯一方法是将它与一组中的其他字符串进行比较,如果匹配其中一个,则重试。如果您需要的只是独一无二的 - 只需使用自动增量。


推荐阅读