随机字符串规则

时间:2018-03-15 16:01:58

标签: php

我有一个生成随机3个字符的字母数字字符串的函数。我需要修改它,使新字符串由2个字母和2个数字字符组成。数字和字母的组合可以是随机的。

function generate_random($length = 3) {
    $characters = '123456789ABCDEFGHJKLMNPRSTUVWXYZ';

    $rand_str = '';
    for ($p = 0; $p < $length; $p++) {
        $rand_str .= $characters[mt_rand(0, strlen($characters)-1)];
    }

    return $rand_str;
}

我需要修改它,使新字符串由2个字母和2个数字字符组成。数字和字母的组合可以是随机的。我该怎么做?

2 个答案:

答案 0 :(得分:2)

我个人会这样做:

function generate_random($countAlpha = 2, $countNumeric = 2, $randomize = true) {

    $alpha = 'ABCDEFGHJKLMNPRSTUVWXYZ';
    $numeric = '123456789';

    $rand_str = '';
    for ($p = 0; $p < $countAlpha; $p++) {
        $rand_str .= $alpha[mt_rand(0, strlen($alpha)-1)];
    }
    for ($p = 0; $p < $countNumeric; $p++) {
        $rand_str .= $numeric[mt_rand(0, strlen($numeric)-1)];
    }
    if($randomize) {
      $rand_str = str_split($rand_str);
      shuffle($rand_str);
      return implode($rand_str);
    }
    return $rand_str;
}

内部我有2个for循环,每个循环基于参数$countAlpha$countNumeric。我还有一个第3个参数$randomize,可以让你随意输出你想要的输出。

答案 1 :(得分:1)

你可以分发数字和字母。然后,将每个N值附加到一个数组中,将其随机播放,然后使用内部函数来获取字符串:

function generate_random($nNumbers = 2, $nAlpha = 2) {
    // prepare data to use
    $num = '123456789';
    $numlen = strlen($num) - 1;
    $alpha = 'ABCDEFGHJKLMNPRSTUVWXYZ';
    $alphalen = strlen($alpha) - 1;

    $out = []; // New array

    // generate N numbers
    for ($i = 0; $i < $nNumbers ; $i++) {
        $out[] = $num[mt_rand(0, $numlen)];
    }
    // generate N letters
    for ($i = 0; $i < $nAlpha ; $i++) {
        $out[] = $alpha[mt_rand(0, $alphalen)];
    }
    shuffle($out); // Shuffle the array
    return implode($out); // Convert to string
}

echo generate_random() ;
// echo generate_random(2, 4) ; // example