2016-01-13 2 views
1

Если мы постоянно запускаем код ниже, иногда мы обнаруживаем, что он генерирует какое-то SPACE в пароле, который не должен быть получен.Избегайте места из сгенерированного кода пароля

Может кто-нибудь, пожалуйста, как избежать символа пробела снизу сгенерированного кода пароля:

Вот код:

function generateRandomPassword($length) { 
     srand((double)microtime()*1000000); 
     $password = ""; 
     $vowels = array("a", "e", "i", "o", "u"); 
     $cons = array("b", "c", "d", "g", "h", "j", "k", "l", "m", "n", "p", "r", 
"s", "t", "u", "v", "w", "tr", "cr", "br", "fr", "th", "dr", "ch", "ph", "wr", " 
st", "sp", "sw", "pr", "sl", "cl"); 
     $num_vowels = count($vowels); 
     $num_cons = count($cons); 
     for($i = 0; $i < $length; $i++) { 
     $c = $cons[rand(0, $num_cons - 1)]; 
     if (rand(0,1)) $c = strtoupper($c); 
     $v = $vowels[rand(0, $num_vowels - 1)]; 
     if (rand(0,1)) $v = strtoupper($v); 
     $password .= $c . $v; 
     if (rand(0,4) == 0) $password .= rand(0,9); 
     } 
     return substr($password, 0, $length); 
    } 

$pwd = generateRandomPassword(12); 

echo $pwd; 
+0

основной отладки: 'если (($ с == ' ') или ($ v =='')) {умереть ("получил место с индексом $ I");}' или любой другой. выяснить, где/когда пространство идет, и проверить состояние вашей системы в этой точке. –

+0

Я не вижу, как это произойдет. просто чтобы убедиться, что я не пропустил что-то очевидное, я побежал за 100 000 итераций. Нет пробелов. – Steve

+1

Хотя, если код выше является точной копией, в вашем массиве '$ cons' элемент' 'st" 'имеет разрыв строки в нем, что было бы нежелательным и, возможно, ошибочным для пробельного символа – Steve

ответ

2

Заменить оператор возврата следующим:

return trim(substr($password, 0, $length)); 

для всех пробелов:

return preg_replace('/\s+/', '', substr($password, 0, $length)); 

trim() Прокладка пробела из строки. Но проблема с вашим кодом в том, что в st есть пробел из вашей переменной $cons.

PhP trim Function

Смежные вопросы