快速生成令牌的方法——PHP
可能重复:快速生成令牌的方法——PHP,php,Php,可能重复: 我想为随机长度[4-6]个字符生成随机标记[字母数字]。 有人能帮忙吗?您可以使用(在这里给出的示例中搜索“token”)并用缩短它。您可以使用(在这里给出的示例中搜索“token”并用缩短它。首先,您可以得到10+26+26=62之间的随机数6次,然后计算结果字符串,这似乎很简单 <?php function () { $letters={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,0,1,2,3,4,5,6,7,
我想为随机长度[4-6]个字符生成随机标记[字母数字]。
有人能帮忙吗?您可以使用(在这里给出的示例中搜索“token”)并用缩短它。您可以使用(在这里给出的示例中搜索“token”并用缩短它。首先,您可以得到10+26+26=62之间的随机数6次,然后计算结果字符串,这似乎很简单
<?php
function ()
{
$letters={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,0,1,2,3,4,5,6,7,8,9,10}
return array_rand($letters).array_rand($letters)......... // you get the point
?>
首先,您只需获得10+26+26=62之间的随机数6次,然后计算结果字符串,这似乎很简单
<?php
function ()
{
$letters={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,0,1,2,3,4,5,6,7,8,9,10}
return array_rand($letters).array_rand($letters)......... // you get the point
?>
或者如果您喜欢“硬”方式
$len = random(4,6);
$token = array();
for ($i = 0; $i < $len; $i++) {
$ord = 0;
switch(random(1,3)) {
case 1: // 0 - 9
$ord = random(48,57);
break;
case 2: // A - Z
$ord = random(65,90);
break;
case 3: // a - z
$ord = random(97,112);
break;
}
$token[] = chr($ord);
}
$len=随机(4,6);
$token=array();
对于($i=0;$i<$len;$i++){
$ord=0;
开关(随机(1,3)){
案例1://0-9
$ord=随机(48,57);
打破
案例2://A-Z
$ord=随机(65,90);
打破
案例3://a-z
$ord=随机(97112);
打破
}
$token[]=chr($ord);
}
或者如果您喜欢“硬”方式
$len = random(4,6);
$token = array();
for ($i = 0; $i < $len; $i++) {
$ord = 0;
switch(random(1,3)) {
case 1: // 0 - 9
$ord = random(48,57);
break;
case 2: // A - Z
$ord = random(65,90);
break;
case 3: // a - z
$ord = random(97,112);
break;
}
$token[] = chr($ord);
}
$len=随机(4,6);
$token=array();
对于($i=0;$i<$len;$i++){
$ord=0;
开关(随机(1,3)){
案例1://0-9
$ord=随机(48,57);
打破
案例2://A-Z
$ord=随机(65,90);
打破
案例3://a-z
$ord=随机(97112);
打破
}
$token[]=chr($ord);
}
更多信息,不,他们使用散列,我需要一个小的,那么我为什么要浪费CPU?这个问题还有一个答案,是实现你想要的伪代码。更多信息,他们使用散列,我需要一个小的,那么我为什么要浪费CPU?这个问题还有一个答案,是实现你想要的伪代码。这不是真正随机的,获得“3”分的几率比获得“O”分的几率要高得多。。。查看我的方法,以获得更好的解决方案我也将给出该解决方案,但我太懒了,无法写出所有这些字母数字字符。无论如何,你怎么能说得到“3”的几率更高呢?因为,得到“3”你有1-3个选择,然后1-10,总共1/30得到“O”你有1-3个选择,然后1-26,总共1/78。因此,这种方法不够好…我明白了,随机性不是均匀分布的…这不是真正的随机性,得到“3”的几率比得到“O”的几率要高得多。。。查看我的方法,以获得更好的解决方案我也将给出该解决方案,但我太懒了,无法写出所有这些字母数字字符。无论如何,你怎么能说得到“3”的几率更高呢?因为,得到“3”你有1-3个选择,然后1-10,总共1/30得到“O”你有1-3个选择,然后1-26,总共1/78。因此,这种方法不够好…我明白了,随机性不是均匀分布的。。。