如何在php中生成唯一的字母数字字符串(预定义长度[length=6])
我试图在php中生成6个字符长的字母数字字符串 我得到了关于stackoverflow的问题和答案 我是否可以一次生成多个Lacs字符串如何在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;
$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);