📄 mainform.pas
字号:
unit MainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, StdCtrls, Grids, DBGrids, DB;
type
TForm1 = class(TForm)
Panel1: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Edt_Post: TEdit;
Label1: TLabel;
Btn_SearchP: TButton;
Label2: TLabel;
Edt_ID: TEdit;
Mem_ID: TMemo;
Btn_SearchID: TButton;
Label3: TLabel;
Edt_Mobile: TEdit;
Btn_SearchM: TButton;
Mem_Mobile: TMemo;
procedure FormShow(Sender: TObject);
procedure Edt_PostKeyPress(Sender: TObject; var Key: Char);
procedure Btn_SearchPClick(Sender: TObject);
procedure Btn_SearchIDClick(Sender: TObject);
Function IDToNewID(ID:String):String;
procedure Btn_SearchMClick(Sender: TObject);
procedure Edt_MobileKeyPress(Sender: TObject; var Key: Char);
procedure Edt_IDKeyPress(Sender: TObject; var Key: Char);
procedure PageControl1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses DM, ADODB;
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
if KeyPreview=False then KeyPreview:=True;
if PageControl1.ActivePage=TabSheet1 then Edt_Post.SetFocus
else if PageControl1.ActivePage=TabSheet2 then Edt_ID.SetFocus
else if PageControl1.ActivePage=TabSheet3 then Edt_Mobile.SetFocus;
end;
procedure TForm1.Edt_PostKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Btn_SearchP.Click;
if not (((ord(key)>=48) and (Ord(key)<=57)) Or(Ord(key)=8)) then
key:=#0;
end;
procedure TForm1.Btn_SearchPClick(Sender: TObject);
begin
if trim(Edt_Post.Text)='' then
begin
ShowMessage('请输入邮政编码');
Edt_Post.SetFocus;
Exit;
end;
with Frm_Dm.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('Select * from Data where 区号=:Post');
Parameters.ParamByName('Post').Value:=trim(Edt_Post.Text);
Open;
end;
end;
procedure TForm1.Btn_SearchIDClick(Sender: TObject);
var
QWID,ID,NewID,IsVal,InputValue:String;
IsExist:Boolean;
i:integer;
Month,Day:string;
begin
ID:=Trim(Edt_ID.Text);
//位数的判断
if (Length(ID)<>15) And (Length(ID)<>18) then
begin
Mem_ID.Clear;
ShowMessage('你输入的身份证号码不对,应该是15或者18位');
Edt_ID.SetFocus;
Exit;
end;
//判断年月日的正确性
if Length(ID)=15 then
begin
Month:=Copy(ID,9,2);
Day:=Copy(ID,11,2);
end
else if Length(ID)=18 then
begin
Month:=Copy(ID,11,2);
Day:=Copy(ID,13,2);
end;
if not (((StrToInt(Month))>=01) and ((StrToInt(Month))<=12)) then
begin
Mem_ID.Clear;
Showmessage('对不起,你输入的月份不对,请检查');
Edt_ID.SetFocus;
Exit;
end;
if not (((StrToInt(Day))>=01) and ((StrToInt(Day))<=31)) then
begin
Mem_ID.Clear;
Showmessage('对不起,你输入的日期不对,请检查');
Edt_ID.SetFocus;
Exit;
end;
//如果数据是粘贴进来的,判断是否是正确的
InputValue:=ID;
for i:=1 to Length(InputValue) do
begin
IsVal:=Copy(InputValue,1,1);
if not (((IsVal>='0') and (IsVal<='9')) or (UpperCase(IsVal)='X')) then
begin
Mem_ID.Clear;
ShowMessage('对不起,你输入或者粘贴进来的身份证号码无效,请检查');
Edt_ID.SetFocus;
Edt_ID.SelectAll;
Exit;
end;
Delete(InputValue,1,1);
end;
QWID:=copy(ID,1,6);
with Frm_DM.ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('select DQ from SFZ Where BM=:ID');
Parameters.ParamByName('ID').Value:=QWID;
Open;
if IsEmpty then
begin
Close;
SQL.Clear;
SQL.Add('select DQ from SFZ Where BM=:ID');
Parameters.ParamByName('ID').Value:=copy(QWID,1,4)+'00';
Open;
if IsEmpty then
begin
Close;
SQL.Clear;
SQL.Add('select DQ from SFZ Where BM=:ID');
Parameters.ParamByName('ID').Value:=copy(QWID,1,2)+'0000';
Open;
if IsEmpty then IsExist:=False;
end;
end
else IsExist:=True;
Mem_ID.Lines.Clear;
Mem_ID.Lines.Add('查身份证 :'+ID);
if IsExist then
begin
Mem_ID.Lines.Add('原户籍地 :'+FieldByName('DQ').AsString);
end;
end;
if Length(ID)=15 then
begin
NewID:=Copy(ID,1,6)+'19'+Copy(ID,7,6)+Copy(ID,13,3);
NewID:=NewID+IDToNewID(NewID);
end
else if Length(ID)=18 then
begin
NewID:=ID;
end;
Mem_ID.Lines.Add('出生年月 :'+Copy(NewID,7,4)+'年'+Copy(NewID,11,2)+'月'+Copy(NewID,13,2)+'日');
Mem_ID.Lines.Add('新身份证 :'+NewID);
if (StrToInt(Copy(NewID,17,1)) Mod 2)=0 then Mem_ID.Lines.Add('性 别 :女')
else Mem_ID.Lines.Add('性 别 :男');
end;
function TForm1.IDToNewID(ID: String): String;
var
i,SfzXy:Integer;
XYM:String;
a:string;
begin
a:='07910584216379105842';
SfzXy:=0;
for i:=1 to 17 do
begin
SfzXy:=SfzXy+StrToInt(Copy(ID,i,1))*strtoInt(a[i]);
Case (SfzXy Mod 11) of
0:
begin
XYM :='1'; break;
end;
1:begin
XYM :='0';break;
end;
2:begin
XYM :='X';break;
end;
3:begin
XYM :='9';break;
end;
4:begin
XYM :='8';break;
end;
5:begin
XYM :='7';break;
end;
6:begin
XYM :='6';break;
end;
7:begin
XYM :='5';break;
end;
8:begin
XYM :='4';break;
end;
9:begin
XYM :='3';break;
end;
10:begin
XYM :='2';break;
end;
end;
end;
Result:=XYM;
end;
procedure TForm1.Btn_SearchMClick(Sender: TObject);
var
Mno,InputValue,IsVal:String;
i:integer;
begin
if Length(trim(Edt_Mobile.Text))<>11 then
begin
Mem_Mobile.Clear;
ShowMessage('输入的手机号码位数不对,应该是11位');
Edt_Mobile.SetFocus;
Exit;
end;
//如果数据是粘贴进来的,判断是否是正确的
InputValue:=Trim(Edt_Mobile.Text);
for i:=1 to Length(InputValue) do
begin
IsVal:=Copy(InputValue,1,1);
if not ((IsVal>='0') and (IsVal<='9')) then
begin
Mem_Mobile.Clear;
ShowMessage('对不起,你输入或者粘贴进来的身份证号码无效,请检查');
Edt_Mobile.SetFocus;
Edt_Mobile.SelectAll;
Exit;
end;
Delete(InputValue,1,1);
end;
Mno:=copy(Trim(Edt_Mobile.Text),1,7);
with Frm_DM.ADOQuery3 do
begin
Close;
SQL.Clear;
SQL.Add('select * from sj where 号码B<='+Mno +' and 号码E>='+Mno);
Open;
if RecordCount>0 then
begin
Mem_Mobile.Lines.Clear;
Mem_Mobile.Lines.Add('手机地区 : '+FieldByName('地区').AsString);
Mem_Mobile.Lines.Add('手机城市 : '+FieldByName('城市').AsString);
Mem_Mobile.Lines.Add('手机区号 : '+FieldByName('区号').AsString);
Mem_Mobile.Lines.Add('手机类型 : '+FieldByName('类型').AsString);
end
else
begin
Mem_Mobile.Lines.Clear;
Mem_Mobile.Lines.Add('手机地区 : 未知地区');
end;
end;
end;
procedure TForm1.Edt_MobileKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Btn_SearchM.Click;
if not (((ord(key)>=48) and (Ord(key)<=57)) Or(Ord(key)=8)) then
key:=#0;
end;
procedure TForm1.Edt_IDKeyPress(Sender: TObject; var Key: Char);
begin
//输入的数据只能是0..9,回车,大小写x
if key=#13 then Btn_SearchID.Click;
if not (((ord(key)>=48) and (Ord(key)<=57)) Or(Ord(key)=8)or(Ord(key)=120)or(Ord(key)=88)) then
key:=#0;
end;
procedure TForm1.PageControl1Change(Sender: TObject);
begin
if PageControl1.ActivePage=TabSheet1 then Edt_Post.SetFocus
else if PageControl1.ActivePage=TabSheet2 then Edt_ID.SetFocus
else if PageControl1.ActivePage=TabSheet3 then Edt_Mobile.SetFocus;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -