функция генерации паролей php - PullRequest
1 голос
/ 28 сентября 2011

Вот вопрос, который я хочу решить

"Напишите функцию GeneratePassword, которая принимает два аргумента, целое число и строку символов, состоящую из букв (az) и цифр (0-9).

Когда вызывается GeneratePassword (5, 'abc0123'), он должен возвращать случайную строку из 5 символов, взятых из 'abc0123'.

Например: GeneratePassword (7, 'abczxc012394')может вернуть любой из следующих выходных данных: 2c00acb 2c23z93 030b2a4 "

Я написал следующий код для него, но система говорит, что ответ неправильный.Пожалуйста, объясните, что я делаю не так.

Мой код:

    function GeneratePassword($digits,$passwordString){
    if($digits > strlen($passwordString)) return '';
    else {
        $randomSelect = '';
        for($i=0;$i<$digits;$i++){
            $randomChar = $passwordString[rand(0, strlen($passwordString)-1)];
            $randomSelect = $randomSelect.$randomChar ;
            $passwordString = str_replace($randomChar,"",$passwordString);

        }
        return $randomSelect;
    }
}

Ответы [ 5 ]

4 голосов
/ 28 сентября 2011

Во-первых, вы не должны отклонять $digits, превышающее количество символов на выбор.Вы можете легко получить GeneratePassword(10,'A'), и в этом случае вам нужно будет вернуть AAAAAAAAAA.

Во-вторых, вы не должны удалять выбранные символы из строки.Примеры даже включают повторяющиеся символы (например, 2c00acb).

Кроме того, ваш код, кажется, работает.Однако я бы посоветовал вам заранее вычислить strlen($passwordString) и сохранить его в переменной, а не вычислять один раз для каждой итерации цикла.

2 голосов
/ 31 января 2014
function GeneratePassword($length,$characters) {

    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
}
echo GeneratePassword(7, 'abczxc012394');
1 голос
/ 28 сентября 2011

Вот версия, которую я бы сделал. Имейте в виду, что я заменил «$ digits» на «$ length», потому что, ну, это то, что он должен указывать. Кроме того, я заменил «$ passwordString» на более общепринятый термин «$ seed». Объяснение встроено.

function GeneratePassword( $length, $seed ) {
    $password = ''; /** Begin with an empty string. */
    $max = ( $length - 1 ); /** Calculate the number of characters in seed -1, because strings are zero-indexed. */
    for( $i = 0; $i < $length; $i ++ ) { /** Loop until the maximum length is reached. */
        $password .= $seed[mt_rand( 0, $max )]; /** Select a random character and append it to the password string. */
    }
    return $password; /** return the password */
}
0 голосов
/ 31 марта 2013
function GeneratePassword($n,$c){
  $pw = '';
  for ($l = 0; $l < $n; $l++){
    $r = rand(0, strlen($c) - 1);
    $pw .= $c[$r];
  }
  return $pw;
}
0 голосов
/ 28 сентября 2011
function GeneratePassword($digits,$passwordString){

    $randomSelect = '';
    for($i=0;$i<$digits;$i++){
        $randomChar = $passwordString[rand(0, strlen($passwordString)-1)];
        $randomSelect = $randomSelect.$randomChar ;
        $passwordString = str_replace($randomChar,"",$passwordString);

    }
    return $randomSelect;

}

вы должны повторно использовать символы в $ passwordString

...