生成随机字符串

时间:2011-07-26 06:23:54

标签: php regex

如何生成长度为16位的代码,唯一的,由1-9,a-z和A-Z组成(区分大小写,因此Abc1与abc1不同)ex:Ahs78D7xkEshud45

我试过这样做,但似乎无法找出最简单的方法。

感谢您的帮助!

6 个答案:

答案 0 :(得分:10)

如果唯一性不是很重要,您可以试试这个:

function randomString() {
    $length = 16;
    $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $str = "";    

    for ($i = 0; $i < $length; $i++) {
        $str .= $chars[mt_rand(0, strlen($chars) - 1)];
    }

    return $str;
}

对于更独特的替代方法,请使用哈希函数:

$str = substr(base64_encode(sha1(mt_rand())), 0, 16);

答案 1 :(得分:5)

可以使用mt_rand()+ md5 + base64的组合并用substr

剪切它

尝试以下代码:

<?php

$unique = substr(base64_encode(md5( mt_rand() )), 0, 15);

?>

编辑:实际上不需要md5位,因此以下代码将更容易,更快:

<?php

$unique = substr(base64_encode(mt_rand()), 0, 15);

?>

edit2:会生成如下字符串:

  

NTA2YWUxODEzNDkw

答案 2 :(得分:1)

可能你可以试试这个:

$unique_id = substr(md5(uniqid(rand(), true)), 16, 16);

答案 3 :(得分:1)

不要使用uniqid的子字符串。它不能保证是独一无二的;如果我给你一组独特的数字{101,102,103},你拿前两位数字并假设它们也是独一无二的......

真的,你在使用PHP。设置一个数据库表,在其中存储生成的唯一代码,对其进行索引,并在制作新的完全随机的代码时对其进行检查。它将花费O(log(n))时间,其中n是您已生成的代码数。如果您甚至不想这样,那么将以前生成的代码存储在哈希表中。但是,如果不记住以前的结果,就无法保证其独特性。

答案 4 :(得分:0)

$n = rand(10e16, 10e20);
$rand = base_convert($n, 30, 36);

产生如下:5urp7h2p6a8so0o0

答案 5 :(得分:0)

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;

}

你可以把它放在循环中多次执行并存储在字符串中......

这可能对你有帮助..