php - 我使用 random_int() 和 uniqid() 生成随机字符串
问题描述
下面是我用来生成随机字符串的代码,我是否有可能得到重复
<?php
echo random_int(100,999).substr(uniqid(),-4);
?>
解决方案
是的,事实上,您获得副本的可能性相对较高。考虑以下测试:
$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% 保证字符串唯一的唯一方法是将它与一组中的其他字符串进行比较,如果匹配其中一个,则重试。如果您需要的只是独一无二的 - 只需使用自动增量。
推荐阅读
- c++ - 使用 WinAPI 处理用户注销的问题
- ios - 使用 Objective-C 为图像和其他参数发布多部分/表单数据
- c++ - C++/Thrift:TThreadedServer::stop() 线程安全吗?
- java - Jackson - @JsonCreator 返回泛型
- android - Kotlin ViewModel 类中预期的属性 getter 或 setter
- python - 图 matplotlib
- r - 如何从 R 中的多个列表/向量制作重叠表?
- dart - DART 查找类中的所有字段
- node.js - fluent-ffmpeg 使用流式提取音频
- c++ - 无法访问游戏对象“必须调用对非静态成员函数的引用”