Показать сообщение отдельно
  #30  
Старый 11.03.2012, 12:44
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вот не нравятся мне такие решения. А если надо 3 или 12 символов проверять? Весь код переписывать на 12 циклов? Может так интереснее будет?
Код:
Const
  CharSet: String = 'abcdefghijklmnopqrstuvxwz';
procedure PassGen(Pass: String; Depth: Integer);
Var
  i: Integer;
begin
 for i := 1 to Length(CharSet)
 do begin
    Pass[Depth] := CharSet[i];
    if Depth < Length(Pass)
    then PassGen(Pass, Depth + 1)
    else Memo1.Lines.Add(Pass);
    end;
end;

begin
 PassGen('123456', 1);
end;
Но 6 символов это будет 308,915,776 комбинаций. Не упаритесь ждать?
Ну а если нужен сложный пароль, то там вообще становится все грустно. Для пароля в 6 символов у вас уже будет 56,800,235,584 комбинций.
Но если это не пугает, то вот вам код для сложного пароля:
Код:
Const
  CharSet1: String = 'abcdefghijklmnopqrstuvxwz';
  CharSet2: String = 'ABCDEFGHIJKLMNOPQRSTUVXWZ';
  CharSet3: String = '0123456789';

Var
  CharSet: String;

procedure PassGen(Pass: String; Depth: Integer);
Var
  i: Integer;
begin
 for i := 1 to Length(CharSet)
 do begin
    Pass[Depth] := CharSet[i];
    if Depth < Length(Pass)
    then PassGen(Pass, Depth + 1)
    else begin
         Memo1.Lines.Add(Pass);
         Application.ProcessMessages
         end;
    end;
end;

begin
 CharSet := CharSet1 + CharSet2 + CharSet3;
 PassGen('123456', 1);
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием