看板 PHP 關於我們 聯絡資訊
※ 引述《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
buganini:我之前檢查是把每一筆塞進array 最後再檢查 12/10 21:02
buganini:count($arr)是否等於count(array_unique($arr)) 12/10 21:03
buganini:其實也蠻快的 12/10 21:03
buganini:array_unique只稍微頓了一下 12/10 21:04
buganini:大概因為分岔的很快吧... 12/10 21:05
pakker:這樣會吃不少記憶體... 12/10 22:40
buganini:沒錯 我第一次跑的時候爆了一次 還要去改php.ini XD 12/10 22:49