如何使用交替的字母和数字生成随机的6个字符的字符串?

时间:2017-08-14 02:59:25

标签: php string random passwords alphanumeric

我在PHP中有一个能够生成6个字符的字母数字字符串的代码,但它不能确保生成3个字母和3个数字。

它会生成一个字符串,例如“ps7ycn” 它在字母表之间没有3个数字。 数字应该在字母之间。

示例:a3g5h9

4 个答案:

答案 0 :(得分:3)

这将确保您只获得交替的字母和数字:

代码:(Demo

$letters='abcdefghijklmnopqrstuvwxyz';  // selection of a-z
$string='';  // declare empty string
for($x=0; $x<3; ++$x){  // loop three times
    $string.=$letters[rand(0,25)].rand(0,9);  // concatenate one letter then one number
}
echo $string;

潜在产出:

i9f6q0
j4u5p4
j6l6n9

P.S。如果要随机化第一个字符是字母还是数字,请在for循环后使用此行代码。

if(rand(0,1)){$string=strrev($string);}

rand()会生成01,条件会将0视为false,将1视为true }。这提供了关于是否反转字符串的“硬币翻转”场景。

如果您想保证输出中的唯一字母和数字......

$letters=range('a','z'); // ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
shuffle($letters);
$numbers=range(0,9);  // [0,1,2,3,4,5,6,7,8,9]
shuffle($numbers);
$string='';
for($x=0; $x<3; ++$x){
    $string.=$letters[$x].$numbers[$x];
}
echo $string;

答案 1 :(得分:2)

试试这段代码:

 $str = '';
 for ( $i = 1; $i <= 6; ++$i ) {
    if ( $i % 2 ) {
     $str .=  chr(rand(97,122));
    }else{
       $str .= rand(0,9);
   }
}

这个更短但你不能用它像a1g7y5k一样有奇怪的长度:

$str = '';
 for ( $i = 1; $i <= 3; ++$i ) {
  $str .=  chr(rand(97,122)) . rand(0,9);
}

- 或者使用这种可以改进的方法(参考mickmackusa的评论):

$alphas  = 'abcdefghijklmnopqrstuvwxyz';
$numbers = '0123456789';
$arr1 = str_split($alphas);
$arr2 = str_split($numbers);
$arr3 = array_rand($arr1,3);
$arr4 = array_rand($arr2,3);
$arr5 = array();
for ($i=0; $i<count($arr3); $i++) {
   $arr5[] = $arr3[$i];
   $arr5[] = $arr4[$i];
}
$result =    implode('',$arr5);

检查this thread。它有一些好的想法和功能。

答案 2 :(得分:0)

以下是解决此问题的一种方法:

$alpha  = 'abcdefghijklmnopqrstuvwxyz';
$number = '0123456789';

$random = '';

for ( $i = 0; $i < 6; ++$i ) {
    if ( $i % 2 ) {
        $random .= substr( $number, rand( 0, strlen( $number ) - 1 ), 1 );
    } else {
        $random .= substr( $alpha, rand( 0, strlen( $alpha ) - 1 ), 1 );
    }
}

$random现在将包含六个字符的随机值,其中第一个,第三个和第五个字符来自$alpha,第二个,第四个和第六个字符来自$number。< / p>

答案 3 :(得分:-1)

您可以使用此功能

<?php
 public static function random_string($charsNo = 3, $NumbersNo = 3)
    {
        $character_set_array = array();
        $character_set_array[] = array('count' => $charsNo, 'characters' => 'abcdefghijklmnopqrstuvwxyzasdsawwfdgrzvyuyiuhjhjoppoi');
        $character_set_array[] = array('count' => $NumbersNo, 'characters' => '0123456789');
        $temp_array = array();
        foreach ($character_set_array as $character_set) {
            for ($i = 0; $i < $character_set['count']; $i++) {
                $temp_array[] = $character_set['characters'][rand(0, strlen($character_set['characters']) - 1)];
            }
        }
        shuffle($temp_array);
        return implode('', $temp_array);
    }
?>