Вот не нравятся мне такие решения. А если надо 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;