Консультация № 80767
02.04.2007, 20:14
0.00 руб.
0 2 2
Здравствуйте. Помогите написать генератор пароля по такому принципу. На форме есть следующие компоненты: CheckBox1 (генерировать цифры), CheckBox2 (генерировать кирилические маленькие буквы), CheckBox3 (генерировать латинские маленькие буквы), Edit1 (для установки длинны пароля) и приделанный к нему UpDown1 (для увеличения или уменьшения длинны пароля). При нажатии на клавишу Button1, программа проверяет, какие CheckBox выбранны и генерирует из них в перемешку и получившийся пароль выводит в поле MaskEdit1. Помогите пожалуйста

Обсуждение

Неизвестный
02.04.2007, 21:18
общий
это ответ
Здравствуйте, SashaFAN!

Я вместо <b>CheckBox</b>-ов воспользовался обычным <b>CheckListBox</b>-ом, на мой взгляд более компактно и рационально. В него я разместил такие строки в таком порядке:
<code>Цифры
Кириллица маленькие
Латиница маленькие</code>

Так же как Вы и говорили разместил <i>Edit1 (для установки длинны пароля) и приделанный к нему UpDown1</i>, а вот результат - пароль - вывожу тоже в обычный Edit2, заменить его на MaskEdit1 не составит большого труда.

Содержание процедуры которая происходит по нажатию кнопки смотрите в приложении, если возникнут вопросы - задавайте. При создании пароля я использовал псевдослучайный генератор чисел и с его помощью вычислял очередной символ пароля, конечно же если выполняются соответствующие установки в <i>CheckListBox</i>.

Good Luck!!!

Приложение:
procedure TForm1.Button7Click(Sender: TObject);const latin=[‘a‘..‘z‘]; kiril=[‘а‘..‘я‘]; digit=[‘0‘..‘9‘];var c:char; mn:set of char; ps:string; i:integer;begin Randomize; ps:=‘‘; with CheckListBox1 do begin if Checked[0] then mn:=digit; if Checked[1] then mn:=kiril; if Checked[2] then mn:=latin; if Checked[0] and Checked[1] then mn:=kiril+digit; if Checked[0] and Checked[2] then mn:=latin+digit; if Checked[1] and Checked[2] then mn:=latin+kiril; if Checked[0] and Checked[1] and Checked[2] then mn:=latin+kiril+digit; end; for i:=1 to UpDown1.Position do begin repeat c:=chr(random(1000) mod 255); until c in mn; ps:=ps+c; end; Edit2.Text:=ps;end;
Неизвестный
03.04.2007, 10:49
общий
это ответ
Здравствуйте, SashaFAN!
В приложении написан весь код программы


Приложение:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Mask;type TForm1 = class(TForm) Edit1: TEdit; UpDown1: TUpDown; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; Button1: TButton; MaskEdit1: TMaskEdit; procedure UpDown1Click(Sender: TObject; Button: TUDBtnType); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; i: integer;implementation{$R *.dfm}procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);begini:=Updown1.Position;Edit1.Text:=IntTOstr(i);end;procedure TForm1.Button1Click(Sender: TObject);consten=‘qwertyuiopasdfghjklzxcvbnm‘;zifri=‘1234567890‘;ru=‘йцукеёнгшщзхъфывапролджэячсмитьбю‘;vari,h, w : Integer;S,e: String;beginif (CheckBox1.Checked=false)and (CheckBox2.Checked=false)and (CheckBox3.Checked=false) then exit;if Edit1.Text=‘‘ thenexit;if CheckBox1.Checked= true thene:=e+ zifri;if CheckBox2.Checked=true thene:=e+ru;if CheckBox3.Checked=true thene:=e+ en;h:=length(e);i:=StrToInt(Edit1.Text);w:=0;for w :=0 to i-1 dos:=s+(e[random(h)+1]);if s=‘‘ thenexit;MaskEdit1.Text:=s;end;end.
Форма ответа