首页 > 解决方案 > 生成 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);
 }

但是我的服务器在运行这段代码时死了。你有什么想法,它是如何生成的?谢谢

标签: php

解决方案


生成随机数并不能保证唯一性。由于您希望它用于优惠券代码,因此您希望它是准确的。

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() );

推荐阅读