如何生成唯一的6位数字代码

3
我希望生成一个6位数字的唯一代码,但我想让前三位是字母,后三位是数字,就像下面的例子一样。
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;
    }

你已经接受了答案,但我更新了一下,使其更加高效。 - Xorifelse
您可能希望使用Random::alphaUppercaseString(3)Random::intBetween(100, 999)连接(用点号)。 - caw
3个回答

7
你想让前三个字符是字母,后三个字符是数字吗?那么你应该分别处理它们。
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;
}

您可以使用函数参数添加动态性,如果需要随机顺序,可以执行以下操作:
// 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,建议使用 mt_rand(),否则建议使用random_int()

但仍需检查可能的冲突,并将其放入 while 循环中。


1
我有点喜欢这种方法... 或许让它更易读的一种方式是在生成字母时使用 chr(mt_rand(ord('A'), ord('Z'))). - dana
实质上,这只会增加6个额外的函数调用,但会使代码更易于人类阅读。 - Xorifelse

4

2
因为我欣赏体育精神,所以给你加一分。你的代码不仅完成了任务,而且还很高效。 - Xorifelse

1
请查看以下代码:
<?php
    $string1 = str_shuffle('abcdefghijklmnopqrstuvwxyz');
    $random1 = substr($string1,0,3);
    $string2 = str_shuffle('1234567890');
    $random2 = substr($string2,0,3);

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

2
使用这种方法的一个潜在缺点是不会有任何重复的字母或数字。 - dana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接