【问题标题】:Fast way to generate token - PHP [duplicate]生成令牌的快速方法-PHP [重复]
【发布时间】:2011-09-14 19:08:04
【问题描述】:

可能重复:
PHP: How to generate a random, unique, alphanumeric string?

我想为随机长度 [4-6] 个字符生成随机令牌 [字母数字]。
有人可以帮忙吗?

【问题讨论】:

标签: php


【解决方案1】:

您可以使用uniqid(在此处给出的示例中搜索“token”)并将其缩短为substr

【讨论】:

    【解决方案2】:

    首先,你可以得到一个 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
    
    ?> 
    

    【讨论】:

      【解决方案3】:

      或者如果你更喜欢“硬”的方式......

      $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);
      }
      

      【讨论】:

      • 这不会是真正随机的,获得 '3' 的机会比 'O' 高得多......请参阅我的方法以获得更好的解决方案
      • 我也打算给出那个,但我懒得写所有这些字母数字字符。反正你怎么能说得到'3'的几率更高呢?
      • 因为,要获得“3”,您有 1-3 个选择,然后是 1-10,总共 1/30 获得“O”,您有 1-3 个选择,然后是 1-26,总计 1/78。因此,这种方法还不够好......
      • 我明白了,随机性不是均匀分布的......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 2015-05-09
      相关资源
      最近更新 更多