2011-06-14 28 views
1

可能重复:
PHP: How to generate a random, unique, alphanumeric string?快速的方式来生成令牌 - PHP

我想产生随机的令牌[字母数字用于随机长度[之间4-6]字符。
任何人都可以帮忙吗?

+2

更http://stackoverflow.com/search?q=random+string+php – Gordon 2011-06-14 15:04:44

+0

没有,他们用HASHING ,我需要一个小的,所以我为什么要浪费CPU? – Sourav 2011-06-14 15:08:01

+1

该问题也有一个解决方案,可以实现您想要的内容。 – NikiC 2011-06-14 15:09:51

回答

4

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

?> 
9

你可以使用uniqid(在那里给出的例子中搜索“token”)并用substr缩短它。

的问候, 迈克

2

,或者如果你喜欢 '硬' 的方式......

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

这不会是真正的随机性,获得'3'然后'O'更高的机会......看到我的方法更好的解决方案 – fingerman 2011-06-14 15:21:00

+0

我也准备好了,但我太懒惰了编写所有这些字母数字字符。无论如何,你怎么能说获得'3'的机会更高? – LeleDumbo 2011-06-14 15:48:15

+0

原因,得到'3'你有1-3选择,然后1-10,总共1/30得到'O'你有1-3选择,然后1-26,总共1/78。因此,这种方法不够好... – fingerman 2011-06-14 22:43:14