delphi - 帮助更好的复选框逻辑

标签 delphi logic delphi-2010

我正在编写一个小型密码生成器,有 4 个组合复选框,它们是:大写字母、小写字母、数字和特殊字符。

我的问题是 - 我是否必须使用“if”语句检查逻辑中复选框的每种可能组合,或者是否有更快、更简单的方法可以进一步缩短代码?

如果这个问题相当愚蠢,我很抱歉,但如果确实有更好的方法,它将真正帮助我将来从中学习。

祝一切顺利

克里斯(香巴拉)。

最佳答案

为什么你认为你必须通过复选框的每种可能的组合?

检查这个基本功能。

假设您有 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;

并以这种方式调用

Var
  MyPassword : AnsiString;
begin
   MyPassword:=Generate(CbUpper.Checked,CbLower.Checked,CbNumbers.Checked,CbSymbols.Checked,20);

关于delphi - 帮助更好的复选框逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5384990/

相关文章:

android - BASE64 编码和解码不起作用

ios - 如何创建一个 UIBackgroundTask 以在应用程序处于后台时发送数据?

linux - 如何比较 bash 中的两个配对列表?

sql - FROM子句中出现Delphi语法错误,但是-没有FROM子句

delphi - 如何让Delphi重新保存所有表单?

Excel Application.Windows.Count 返回 0

delphi - 检查字符是否为换行符

logic - 合金约束规范

c++ - 指针算术(不是一个问题,而是一种测验)

德尔福2010 : whatever happened to TRTTIConstructor?