php - 生成 100000 个六位唯一字母数字代码
问题描述
我正在尝试使用 php 生成一个六字符的字母数字唯一代码。我需要生成 100000 个唯一代码并推入一个数组。
到目前为止,我已经做到了
$random_numbers = [];
function random_strings()
{
$str_result ='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
while($i <=100000){
array_push($random_numbers,substr(str_shuffle($str_result),0,6));
$i++;
}
print_r($random_numbers);
}
但是我的服务器在运行这段代码时死了。你有什么想法,它是如何生成的?谢谢
解决方案
生成随机数并不能保证唯一性。由于您希望它用于优惠券代码,因此您希望它是准确的。
function random_strings() {
$random_numbers = [];
while( count( $random_numbers ) != 100000 ) {
$uniqueString = md5( microtime() );
$requiredLengthString = strtoupper( substr( $uniqueString, 0, 6 ) ); // substring would not be unique
$random_numbers[$requiredLengthString] = NULL; // Putting $requiredLengthString as key so same keys would be overwritten, guaranteeing uniqueness.
}
return array_keys( $random_numbers );
}
print_r( random_strings() );
如果您希望减少 LOC,请进行内联重构:
function random_strings() {
$random_numbers = [];
while( count( $random_numbers ) != 100000 ) {
$random_numbers[strtoupper( substr( md5( microtime() ), 0, 6 ) )] = NULL; // Putting this string as key so same keys would be overwritten, guaranteeing uniqueness.
}
return array_keys( $random_numbers );
}
print_r( random_strings() );
推荐阅读
- c# - 带有 Enum 的 DataGridTemplateColumn 组合框正在更新具有相同值的所有行
- web - 将 www 和非 www 的 Web.config 重定向到 https
- c# - 使用 ReaderWriterLock 时,第二个线程是否实际等待
- node.js - Heroku 错误无法部署 Node JS 应用程序
- javascript - javascript使用原型从静态方法调用实例方法
- python - 运行选定行后运行脚本时,VSC 抛出无效语法错误
- javascript - 比较两个对象并更新角度
- angular - 如何正确抛出错误以及Angular HTTP中不同错误捕获器的含义是什么
- html - HTML 5 输入正则表达式模式未按预期工作
- modelica - 如何在 Modelica 中检索实际值的时间步长?