2011-03-17 79 views
2

我正在为脚本创建一个随机的5个字符的针脚。我想知道是否有其他人有更好的?随机字母数字引脚?

$pin = ''; 
while($i != 5){ 
    $string = '23456789abcdefghjkmnprstvwxyzABCDEFGHJKLMNPRSTVWXYZ'; 
    $pos = rand(0,(strlen($string)-1)); 
    $pin = $pin . $string[$pos]; 
    $i++; 
} 

echo $pin; 
+1

我希望我的脚是地狱或FACK,即,你可能想要删除所有的元音。 – tvanfosson 2011-03-17 01:16:12

+1

您为了可读性而忽略了1,l,0和O? – 2011-03-17 01:18:53

+0

沿着相同的路线,是不是很多小写/大写字母混淆?像'v'和'V'? – 2011-03-17 01:26:20

回答

2

只是略有不同/短。没有理由每次都声明有效的字符,for循环通常被认为比while更好。

$pinlength = 5; 
$charSet = '23456789abcdefghjkmnprstvwxyzABCDEFGHJKLMNPRSTVWXYZ'; 
$pin = ''; 
for($a = 0; $a < $pinlength; $a++) $pin .= $charSet[rand(0, strlen($charSet))]; 

echo $pin; 

或者,只是为了它的地狱:

$makeCharacterSelect = 
     function ($charSet) {return function use ($charSet) 
            {return $charSet[rand(0, strlen($charSet))];}; 
$pinlength = 5; $c = $makeCharacterSelect('23456789abcdefghjkmnprstvwxyzABCDEFGHJKLMNPRSTVWXYZ'); 

$pin = ''; 
for($a = 0; $a < $pinlength; $a++) $pin .= $c(); 
+0

我认为你的意思是'$ pin。='和'rand'而不是'$ rand'。 – 2011-03-17 01:27:31

+0

我当然没有= P谢谢 – 2011-03-17 01:29:24

2
$pin = substr(uniqid(), 0, 5); // Mind you, this doesn't contain 
           // upper-case letters 
+0

这将包括不需要的字符。它也不是随机的,虽然这可能不是一个大问题 – 2011-03-17 01:20:53