如何生成长度为16位的代码,唯一的,由1-9,a-z和A-Z组成(区分大小写,因此Abc1与abc1不同)ex:Ahs78D7xkEshud45
我试过这样做,但似乎无法找出最简单的方法。
感谢您的帮助!
答案 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;
}
你可以把它放在循环中多次执行并存储在字符串中......
这可能对你有帮助..