Php 如何生成唯一的6位代码

Php 如何生成唯一的6位代码,php,string,random,Php,String,Random,我想生成6位的唯一代码,但我希望前3位是字母,后3位是数字,如下面的示例所示 AAA111 ABD156 DFG589 ERF542... 请帮助创建具有上述组合的代码 下面是我的代码 public function generateRandomString() { $characters = '1234567890'; $length = 6; $charactersLength = strlen($characters);

我想生成6位的唯一代码,但我希望前3位是字母,后3位是数字,如下面的示例所示

AAA111
ABD156
DFG589
ERF542...
请帮助创建具有上述组合的代码

下面是我的代码

public function generateRandomString()  {
        $characters = '1234567890';
        $length = 6;
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        return $randomString;
    }
public函数generateRandomString(){
$characters='1234567890';
$length=6;
$charactersLength=strlen($characters);
$randomString='';
对于($i=0;$i<$length;$i++){
$randomString.=$characters[rand(0,$charactersLength-1)];
}
返回$randomString;
}
函数生成器domstring(){
$letters='abcdefghijklmnopqrstuvxyz';
$digits='1234567890';
$randomString='';
对于($i=0;$i<3;$i++){
$randomString.=$letters[rand(0,strlen($letters)-1)];
}
对于($i=0;$i<3;$i++){
$randomString.=$digits[rand(0,strlen($digits)-1)];
}
返回$randomString;
}

您希望前3个字符为字母,后3个字符为数字?那么你应该分别处理它们

function genRandStr(){
  $a = $b = '';

  for($i = 0; $i < 3; $i++){
    $a .= chr(mt_rand(65, 90)); // see the ascii table why 65 to 90.    
    $b .= mt_rand(0, 9);
  }

  return $a . $b;
}
函数genRandStr(){
$a=$b='';
对于($i=0;$i<3;$i++){
$a.=chr(mt_rand(65,90));//请参见ascii表格why 65至90。
$b.=百万兰特(0,9);
}
返回$a。$b;
}
还可以使用函数参数添加动态性,对于随机顺序,可以执行以下操作:

// PHP >= 7 code
function genRandStr(int $length = 6, string $prefix = '', string $suffix = ''){
  for($i = 0; $i < $length; $i++){
    $prefix .= random_int(0,1) ? chr(random_int(65, 90)) : random_int(0, 9);
  }

  return $prefix . $suffix;
}
//PHP>=7代码
函数genRandStr(int$length=6,字符串$prefix='',字符串$suffix=''){
对于($i=0;$i<$length;$i++){
$prefix.=random_int(0,1)?chr(random_int(65,90)):random_int(0,9);
}
返回$prefix.$suffix;
}
用于PHP版本<7,否则建议使用


您仍然需要检查可能发生的碰撞,并将其放入while循环。

请检查以下代码:

<?php
    $string1 = str_shuffle('abcdefghijklmnopqrstuvwxyz');
    $random1 = substr($string1,0,3);
    $string2 = str_shuffle('1234567890');
    $random2 = substr($string2,0,3);

    echo $random = $random1.$random2;
?>


使用这种方法的一个潜在缺点是不会有任何重复的字母或数字。我有点喜欢这种方法。。。一种可能使其更具可读性的方法是在生成字母时使用
chr(mt_rand(ord('A'),ord('Z')))
。本质上,这只会增加6个额外的函数调用,但会使代码更易于人眼阅读。您已经接受了答案,但我已经更新了它,使其更有效。您可能希望使用concatenated(带点)和
Random::intBetween(100999)
。因为我欣赏体育精神,+1。你的代码做的工作仍然是有效的。
<?php
    $string1 = str_shuffle('abcdefghijklmnopqrstuvwxyz');
    $random1 = substr($string1,0,3);
    $string2 = str_shuffle('1234567890');
    $random2 = substr($string2,0,3);

    echo $random = $random1.$random2;
?>