Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
快速生成令牌的方法——PHP_Php - Fatal编程技术网

快速生成令牌的方法——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。因此,这种方法不够好…我明白了,随机性不是均匀分布的。。。