Sha*_*ala 2 delphi logic delphi-2010
我正在写一个小密码生成器,并有4个CheckBoxes的组合,这些是:大写字母,小写字母,数字和特殊字符.
我的问题是 - 我是否必须通过"if"语句检查逻辑中每个可能的CheckBoxes组合,或者是否有更快,更简单的方法可以缩短代码?
如果这个问题相当愚蠢,我很抱歉,但如果确实有更好的方法,那将来我真的可以从中学习.
祝一切顺利
克里斯(shamballa).
RRU*_*RUZ 11
为什么你认为你必须通过每个可能的CheckBoxes组合?
检查这个基本功能.
假设您有4个名为CbUpper,CbLower,CbNumbers,CbSymbols的复选框.
现在你可以构建一个这样的函数
function Generate(AllowUpper,AllowLower,AllowNumbers,AllowSymbols:Boolean; PassLen:Integer):AnsiString;
const
UpperList = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
LowerList = 'abcdefghijklmnopqrstuvwxyz';
NumberList = '0123456789';
SymbolList = '@#()=¿?!¡[]';
var
MyList : AnsiString;
Index : Integer;
i : Integer;
begin
Result:='';
MyList:='';
//here if the flag is set the elements are added to the main array (string) to process
if AllowUpper then MyList:=MyList + UpperList;
if AllowLower then MyList:=MyList + LowerList;
if AllowNumbers then MyList:=MyList + NumberList;
if AllowSymbols then MyList:=MyList + SymbolList;
Randomize;
if Length(MyList)>0 then
for i:= 1 to PassLen do
begin
Index:=Random(Length(MyList))+1;
Result:=Result+MyList[Index];
end;
end;
Run Code Online (Sandbox Code Playgroud)
并以这种方式打电话
Var
MyPassword : AnsiString;
begin
MyPassword:=Generate(CbUpper.Checked,CbLower.Checked,CbNumbers.Checked,CbSymbols.Checked,20);
Run Code Online (Sandbox Code Playgroud)