如何在php中生成唯一的字母数字字符串(具有预定长度[length = 6])

时间:2016-03-28 07:54:26

标签: php string laravel laravel-5

我正在尝试在php中生成6个字符长的字母数字字符串。

我在stackoverflow上得到问题和答案。

shorturl on stackoverflow

Random string generate in php but not unique string

Random, unique string generate in php but didn't unique at time with 6 length of string

我可以在时间生成更多1个Lacs字符串,

$arr = [];
$matchStr = [];
for($i=1;$i<=10000;$i++){
    $saltString = "ap_";
    $dynamicStr = substr(md5($saltString.$i), 26, 32);
    do{
       $arr[$i] = $dynamicStr;
    }while(!in_array($dynamicStr,$arr));
}

我可以通过各种方式生成字符串,但没有得到唯一的字符串并存储到具有唯一索引列的mysql表中。

我知道生成字符串的可能性是:

$str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

随机字符串可能性: 字符串长度:10

a-z = 26

A-Z = 26

0-9 = 10

(26 + 26 + 10)^ 10 = 8.3929937 x 10 ^ 17时间可能性。

是什么时候生成字符串的解决方案? 在laravel尝试下面的代码

function getrandomstr() {
    $length = 6;
    $characters = "0123456789abcdefghijklmnopqrstuvwxyz";
    $string = "";

    for ($p = 0; $p < $length; $p++) {
       @$string .= $characters[mt_rand(0, strlen($characters))];
    }
    return $string;
}
ini_set('max_execution_time', 0);
$arr = [];
$matchStr = [];
$query = [];
for($i=1;$i<=100000;$i++){
   $str = getrandomstr();
   do{
      $query[] = [
          "hashcode" => $str
     ];
   }while(\App\Model::where('hashcode',$str)->count() == 0);
}
foreach(array_chunk($query,5000) as $a){
    \App\Model::insert($a);
}

3 个答案:

答案 0 :(得分:0)

function getrandomstr() {
    $length = 6;
    $characters = "0123456789abcdefghijklmnopqrstuvwxyz";
    $string = "";

    for ($p = 0; $p < $length; $p++) {
        @$string .= $characters[mt_rand(0, strlen($characters))];
    }

    return $string;
}

答案 1 :(得分:0)

如果要为数据库中的每一行指定唯一标识符,请使用简单的自动递增整数。如果您不想要整数,请使用MySQL中的UUID()函数,这将为您提供一个几乎唯一的复杂字符串。

如果您希望能够在严格约束(6个字符的字母数字)内生成一个保证唯一的随机字符串,则需要在插入之前/之后将其与数据库中的所有现有密钥进行比较。只使用随机字符串生成器最终会生成一个副本,因为有一组有限的结果,通常取决于你的约束。

答案 2 :(得分:0)

我建议你看看Hashids。它是一个简单的laravel包(好吧,http://hashids.org/的包装器)。

添加软件包后,转到config并更改salt,其余的更改为

sed  "s|,|\n|g" $1 | head -n -1 > $2

简单地使用这样:

'main' => [
    'salt' => 'your-salt-string',
    'length' => '6',
    'alphabet' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
],