Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中生成唯一的字母数字字符串(预定义长度[length=6])_Php_String_Laravel_Laravel 5 - Fatal编程技术网

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

如何在php中生成唯一的字母数字字符串(预定义长度[length=6]),php,string,laravel,laravel-5,Php,String,Laravel,Laravel 5,我试图在php中生成6个字符长的字母数字字符串 我得到了关于stackoverflow的问题和答案 我是否可以一次生成多个Lacs字符串 $arr = []; $matchStr = []; for($i=1;$i<=10000;$i++){ $saltString = "ap_"; $dynamicStr = substr(md5($saltString.$i), 26, 32); do{ $arr[$i] = $dynamicStr;

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

我得到了关于stackoverflow的问题和答案

我是否可以一次生成多个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));
}
随机字符串可能性: 字符串长度: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);
}
函数getrandomstr(){ $length=6; $characters=“0123456789abcdefghijklmnopqrstuvxyz”; $string=“”; 对于($p=0;$p<$length;$p++){ @$string.=$characters[mt_rand(0,strlen($characters))]; } 返回$string; } ini_集('max_execution_time',0); $arr=[]; $matchStr=[]; $query=[]; 对于($i=1;$i$str) ]; }而(\App\Model::where('hashcode',$str)->count()==0); } foreach(数组块($query,5000)作为$a){ \App\Model::insert($a); }
函数getrandomstr(){
$length=6;
$characters=“0123456789abcdefghijklmnopqrstuvxyz”;
$string=“”;
对于($p=0;$p<$length;$p++){
@$string.=$characters[mt_rand(0,strlen($characters))];
}
返回$string;
}

如果需要数据库中每一行的唯一标识符,请使用简单的自动递增整数。如果不需要整数,请使用MySQL中的
UUID()
函数,该函数将为您提供一个实际上是唯一的复杂字符串


如果希望能够在严格的约束条件下生成随机字符串(6个字符的字母数字)这保证是唯一的,您需要在插入之前/插入时将其与数据库中的所有现有密钥进行比较。仅使用随机字符串生成器最终将生成一个副本,因为结果集有限,频率取决于您的约束。

我建议您看一看。这是一个简单的laravel包(嗯,给我一个包装纸)

添加包后,转到config并将salt和其他内容更改为

'main' => [
    'salt' => 'your-salt-string',
    'length' => '6',
    'alphabet' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
],
简单地使用如下:

Hashids::encode(123456);

你所说的“php at time”是什么意思?为什么你不想使用@DhavalTasol:它会在你定义的约束范围内生成一个随机字符串(6个字符,字母数字)。它无法返回MySQL错误,因为它不使用MySQL-该错误来自代码中的其他地方。您的代码不正确!由于错误使用
mt_rand
,它可能返回较短的字符串。rand函数可以返回从0到max的任何整数(
strlen($characters)
,在本例中)包括,但
strlen($characters)
大于
$characters
字符串的最大索引(因为索引从0开始)。正确的行将是:
$string.=$characters[mt_rand(0,strlen($characters)-1)];
'main' => [
    'salt' => 'your-salt-string',
    'length' => '6',
    'alphabet' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
],
Hashids::encode(123456);