Re: [請益] 產生驗證碼
※ 引述《ottokang (貓貓的大玩偶)》之銘言:
: 原文恕刪
: 這個程式也是會產生重複的驗證碼,只是機率非常非常很低
: 詳細的機率可以用排列組合去算(就不用考我了,因為我排列組合很爛XD)
: PHP本身就有提供產生唯一驗證碼的功能,函數uniqid()可以做到
: 除非你在1個ms之內(百萬分之一秒)同時使用uniqid()
: 不然驗證碼是不會重複出現的,想要避免這個問題可以用參數來做到猜不到的驗證碼
: 詳情可以去看PHP手冊uniqid()的說明
: http://www.php.net/uniqid
: 不過加上參數會導致這個函數的速度變慢,就看自己怎麼取捨了
為了驗證網友的code, 只要將id的字元範圍縮小, 並且減小長度,
在這邊縮減成只由abc三個字元組成, 長度為3:
<?php
function genID()
{
$charset = 'abc';
$str = '';
for($i=0; $i<3; $i++)
$str .= $charset[rand(0,2)];
return $str;
}
$uniqid= array();
for($i=0; $i<27; $i++)
{
do
{
$id = genID();
} while(IsSet($uniqid[$id]));
$uniqid[$id] = true;
}
print_r($uniqid);
?>
所有的組合只有27組, 非常容易處理, 只要將27改為28,
如果程式跑得出來那就是有重複了,
但是其實是會在do-while裡不斷的轉阿轉的...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.13.238
推
12/10 21:02, , 1F
12/10 21:02, 1F
→
12/10 21:03, , 2F
12/10 21:03, 2F
→
12/10 21:03, , 3F
12/10 21:03, 3F
→
12/10 21:04, , 4F
12/10 21:04, 4F
→
12/10 21:05, , 5F
12/10 21:05, 5F
→
12/10 22:40, , 6F
12/10 22:40, 6F
推
12/10 22:49, , 7F
12/10 22:49, 7F
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章
154
159