工商银行通过网银结账的时候,会给出一个类似于B5G7的字符串,让你在自己的口令卡上找到对应的口令码。因为口令卡上的数字挺多的,而且有水印,找起来挺麻烦的,我就花了几十分钟的时间,写了一个快速查找口令卡密码的小软件。
实现原理
模拟人查找电子口令密码的方法,通过FindComponent 方法,快速定位和获取电子口令码
实现方法
1.在一个窗体上放下8*10个Edit,然后依照你的电子口令卡,依次给他们赋上B1,B2...B8,X1,X2..X2的名字,并依次在Text属性上赋予相应的值。(第一次输入比较麻烦,没办法呀,电子口令是很私密的东东,网上找不出一个现成的可以供选择)
2.依次添加一个命名为edtSearch的Edit控件,供用户输入要查找的电子口令代码,一个命名为edtResult的Edit控件用来显示查找到的电子口令密码和一个命名为btnSerach的按钮供用户点击,查找电子口令卡密码
3.点击查找按钮,通过FindCompont 定位到相应的电子口令格,并将他们的值取回,显示到界面
实现代码
- //类型定义
- type
- ValidLiterSet = set of 'A'..'B';
- ValidDigitalSet = set of '1'..'8';
- ...
- end
- {-------------------------------------------------------------------------------
- 过程名: TForm1.GetIDPassword
- 作者: Administrator
- 日期: 2012.02.20
- 参数: Code: string
- Code参数是一个长度为4为的字符串,第一位和第三位是字母,
- 第二位和第四位为1..8的某一数字
- 返回值: String
- -------------------------------------------------------------------------------}
- function TForm1.GetIDPassword(Code: string): String;
- var
- c1,c2 : string;
- set1 : ValidLiterSet;
- set2 : ValidDigitalSet;
- begin
- c1 := Copy(Code,1,2);
- c2 := Copy(Code,3,2);
- set1 := ['B','D','G','K','M','N','Q','S','T','Y'];
- if not (c1[1] in set1) then
- begin
- result := 'Invalid Pass Code!';
- edit3.SelectAll;
- end;
- if not (c2[1] in set1) then
- begin
- result := 'Invalid Pass Code!';
- edit3.SelectAll;
- end;
- if not (c1[2] in set2) then
- begin
- result := 'Invalid Pass Code!';
- edit3.SelectAll;
- end;
- if not (c2[2] in set2) then
- begin
- result := 'Invalid Pass Code!';
- edit3.SelectAll;
- end;
- result := TEdit(self.FindComponent(c1)).Text +
- TEdit(self.FindComponent(c2)).Text;
- end;
- //调用代码
- {-------------------------------------------------------------------------------
- 过程名: TForm1.btnSearchClick
- 作者: Administrator
- 日期: 2012.02.20
- 参数: Sender: TObject
- 返回值: 无
- -------------------------------------------------------------------------------}
- procedure TForm1.btnSearchClick(Sender: TObject);
- begin
- edtResult.Text := GetIDPassword(UpperCase(edtSearch.Text));
- end;
转载于:https://blog.51cto.com/adadream/785140