生成随机数字和字母

时间:2011-09-06 15:53:25

标签: php

我是否可以要求提供有关如何在一个单词中生成随机字母和数字的特定代码。我知道有一个PHP函数rand(),但我不知道它是否也适用于字母。还有一个名为mt_rand()的函数,但我不知道它是如何工作的。我打算生成一个像这样的词:

$randomcode = re784dfg7ert7;

你们这个人有什么简单的代码吗?提前谢谢!

15 个答案:

答案 0 :(得分:11)

这是一种更广泛的方法,我经常使用它来生成随机数,字母或混合:

function assign_rand_value($num) {

    // accepts 1 - 36
    switch($num) {
        case "1"  : $rand_value = "a"; break;
        case "2"  : $rand_value = "b"; break;
        case "3"  : $rand_value = "c"; break;
        case "4"  : $rand_value = "d"; break;
        case "5"  : $rand_value = "e"; break;
        case "6"  : $rand_value = "f"; break;
        case "7"  : $rand_value = "g"; break;
        case "8"  : $rand_value = "h"; break;
        case "9"  : $rand_value = "i"; break;
        case "10" : $rand_value = "j"; break;
        case "11" : $rand_value = "k"; break;
        case "12" : $rand_value = "l"; break;
        case "13" : $rand_value = "m"; break;
        case "14" : $rand_value = "n"; break;
        case "15" : $rand_value = "o"; break;
        case "16" : $rand_value = "p"; break;
        case "17" : $rand_value = "q"; break;
        case "18" : $rand_value = "r"; break;
        case "19" : $rand_value = "s"; break;
        case "20" : $rand_value = "t"; break;
        case "21" : $rand_value = "u"; break;
        case "22" : $rand_value = "v"; break;
        case "23" : $rand_value = "w"; break;
        case "24" : $rand_value = "x"; break;
        case "25" : $rand_value = "y"; break;
        case "26" : $rand_value = "z"; break;
        case "27" : $rand_value = "0"; break;
        case "28" : $rand_value = "1"; break;
        case "29" : $rand_value = "2"; break;
        case "30" : $rand_value = "3"; break;
        case "31" : $rand_value = "4"; break;
        case "32" : $rand_value = "5"; break;
        case "33" : $rand_value = "6"; break;
        case "34" : $rand_value = "7"; break;
        case "35" : $rand_value = "8"; break;
        case "36" : $rand_value = "9"; break;
    }
    return $rand_value;
}

function get_rand_alphanumeric($length) {
    if ($length>0) {
        $rand_id="";
        for ($i=1; $i<=$length; $i++) {
            mt_srand((double)microtime() * 1000000);
            $num = mt_rand(1,36);
            $rand_id .= assign_rand_value($num);
        }
    }
    return $rand_id;
}

function get_rand_numbers($length) {
    if ($length>0) {
        $rand_id="";
        for($i=1; $i<=$length; $i++) {
            mt_srand((double)microtime() * 1000000);
            $num = mt_rand(27,36);
            $rand_id .= assign_rand_value($num);
        }
    }
    return $rand_id;
}

function get_rand_letters($length) {
    if ($length>0) {
        $rand_id="";
        for($i=1; $i<=$length; $i++) {
            mt_srand((double)microtime() * 1000000);
            $num = mt_rand(1,26);
            $rand_id .= assign_rand_value($num);
        }
    }
    return $rand_id;
}

<强> USAGE:

基本上我有一个带数组的main函数,然后我调用辅助函数来根据length参数构建我的字符串:

字母

$str = get_rand_letters(8); // Only Letters

编号:

$str = get_rand_numbers(8); // Only Numbers

杬:

$str = get_rand_alphanumeric(8); // Numbers and Letters

此问题由 Kerrek SB 回答,但这可能有助于搜索更广泛和更灵活的方式。

答案 1 :(得分:9)

<?php
echo substr(sha1(mt_rand()),17,6); //To Generate Random Numbers with Letters.
?>

答案 2 :(得分:5)

第1步:创建一个字母$alph = "0123456789abcde...";

第2步:创建一个随机数$n = rand(0, ALPHSIZE-1);,或使用mt_rand()

第3步:获取字母表中的相应索引:$alph[n];

根据需要冲洗并重复步骤2和3多次。

如果你想要强大的统计特性(比如统一性),你应该用随机数稍微努力一点,但这应该让你开始。(我认为它的统计特性应该足够了。)


好的,不妨拼出来:

$alph = "012...";
function make_random_string($N)
{
  $s = "";
  for ($i = 0; $i != $N; ++$i)
    s .= $alph[mt_rand(0, ALPHSIZE - 1)];
  return $s;
}

这是采用自定义字母的版本:

function make_random_custom_string($N, $alphabet)
{
  $s = "";
  for ($i = 0; $i != $N; ++$i)
    s .= $alphabet[mt_rand(0, strlen($alphabet) - 1)];
  return $s;
}

示例:10个随机奇数:make_random_custom_string(10, "13579");

答案 3 :(得分:4)

使用uniqid

$desired_length = 10; //or whatever length you want
$unique = uniqid();

$your_random_word = substr($unique, 0, $desired_length);

答案 4 :(得分:2)

使用完全控制执行此操作的最简单方法:

<?php
$str = 'abcdefghijklmnopqrstuvwxyz01234567891011121314151617181920212223242526';


$shuffled = str_shuffle($str);

$shuffled = substr($shuffled,1,30);

echo $shuffled;
?>

根据您的需要更改$ str。我使用字母a到z和数值1-26。

答案 5 :(得分:1)

可以这样做:

function RandomCode($length = 10)
{
    $code = '';
    $total = 0;

    do
    {
        if (rand(0, 1) == 0)
        {
            $code.= chr(rand(97, 122)); // ASCII code from **a(97)** to **z(122)**
        }
        else
        {
            $code.= rand(0, 9); // Numbers!!
        }
        $total++;
    } while ($total < $length);

    return $code;
}

答案 6 :(得分:1)

试试这个,它对我有用。

$numLenth = 35;

function make_seed_Token() {
  list($usec, $sec) = explode(' ', microtime());
  return (float) $sec + ((float) $usec * 100000);
}

srand(make_seed_Token());

$numSeed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$getNumber = "";
for($i = 0; $i < $numLenth; $i ++) {
 $getNumber .= $numSeed[rand(0, strlen($numSeed))];

}

echo $getNumber;

答案 7 :(得分:1)

这个简单的代码怎么样? 这将生成10个字符,您可以通过修改限制(0,10)来限制字符

$str = substr(md5(time()), 0, 10);
echo $str; //7aca159655

答案 8 :(得分:0)

我把一个PHP类放在一起,用于生成随机数和字符串PHPRandomValue

它使用“mcrypt_create_iv(4,MCRYPT_DEV_URANDOM)”来生成随机数和值。我在加密项目时做了这个,因为我需要一个安全的随机值生成器,而mt_rand()不符合这个要求。这是一个示例用法

$randomValue = new RandomValue;

$randomValue->randomNumber(): = -3880998

$randomValue->randomNumberBetween(1,10): = 2

$randomValue->randomTextString(): = CfCkKDHRgUULdGWcSqP4

$randomValue->randomTextString(10):  = LorPIxaeEY

$randomValue->randomKey(): = C7al8tX9.gqYLf2ImVt/!$NOY79T5sNCT/6Q.$!.6Gf/Q5zpa3

$randomValue->randomKey(10):  = RDV.dc6Ai/

答案 9 :(得分:0)

这对我来说很简单 - 这会生成一个15个字符的字符串 -

$alph = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $code='';
        $i=0;
        while($i<15){
            $position=rand(0,35);
            $code=$code.substr($alph,$position,1);
            $i++;
        }

答案 10 :(得分:0)

// A string with random letters and numbers. A-Z, a-z, 0-9

function rand_string($length = 16) {

    $string = '';

    for ($i = 0; $i < $length; $i++) {

        $die = mt_rand(1, 3);

        switch ($die) {

            case 1:
                $rnd = mt_rand(48, 57);
                break;

            case 2:
                $rnd = mt_rand(65, 90);
                break;

            case 3:
                $rnd = mt_rand(97, 122);
                break;
        }

        $string .= chr($rnd);
    }

    return $string;
}

答案 11 :(得分:0)

这一个简单

echo strtr(substr(str_shuffle('abcdefghijklmnopqrstuvwxyz0123456789.11.12.13.14.15.16.17.18.19.20'),1,20),array("."=>""));

答案 12 :(得分:0)

echo bin2hex(openssl_random_pseudo_bytes(12));

答案 13 :(得分:0)

function randText($len=4){
    $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    for($i=0;$i<$len;$i++){
        $txt.=substr($str, rand(0, strlen($str)), 1);   
    }
return $txt;
}

只需键入以下内容即可

$yourVar = randText(10);  // to get 10char long text

答案 14 :(得分:0)

这将基于变量char创建随机的alpha num字符串:

function createRandomCode() 
{     
    $chars = "abcdefghijkmnopqrstuvwxyz023456789";     
    srand((double) microtime() * 1000000);     

    $i = 0;     
    $pass = '';  

    while ($i <= 7) 
    {         
        $num = rand() % 33;         
        $tmp = substr($chars, $num, 1);         
        $pass = $pass . $tmp;         
        $i++;     
    }    

    return $pass; 
}

将此功能用作$random = createRandomCode();