关于居民身份证从15位升到18位,其实是有一个国家标准的,所以就依此做了个计算器。。。
效果:
////工程文件 program Project1; uses Forms, Unit1 in 'Unit1.pas' {frmMain}; {$R *.res} begin Application.Initialize; Application.CreateForm(TfrmMain, frmMain); Application.Run; end. //单元文件 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TfrmMain = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; Panel1: TPanel; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); private { Private declarations } function ExpandIdNum(ID: string):string; public { Public declarations } end; var frmMain: TfrmMain; implementation {$R *.dfm} procedure TfrmMain.Button1Click(Sender: TObject); begin if Length(Trim(Edit1.Text)) <> 15 then begin ShowMessage('请检查输入是否有误!'); Exit; end; Edit2.ReadOnly := False; Edit2.Text := ExpandIdNum(Edit1.Text); Edit2.ReadOnly := True; end; procedure TfrmMain.Edit1KeyPress(Sender: TObject; var Key: Char); begin //限制非数字输入 if not (Key in ['0'..'9',#8]) then Key := #0; end; function TfrmMain.ExpandIdNum(ID: string):string; const W:array [1..18] of integer = (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); A:array [0..10] of char = ('1','0','x','9','8','7','6','5','4','3','2'); var i, j, S: integer; NewID: string; begin if Length(ID) <> 15 then result:= '' else begin NewID:= ID; Insert('19', NewID, 7); S:= 0; try for i:=1 to 17 do begin j:= StrToInt(NewID[i]) * W[i]; S:= S + j; end; except result:= '有误'; exit; end; S:= S mod 11; Result:= NewID + A[S]; end; end; end. //窗体代码 object frmMain: TfrmMain Left = 406 Top = 154 BorderIcons = [biSystemMenu, biMinimize] Caption = #36523#20221#35777#25193#23637#21319#20301 ClientHeight = 192 ClientWidth = 379 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False Position = poScreenCenter PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 14 Top = 72 Width = 128 Height = 13 Caption = #36755#20837#21407#36523#20221#35777#21495'(15'#20301')'#65306 end object Label2: TLabel Left = 16 Top = 133 Width = 140 Height = 13 Caption = #21319#20301#21518#30340#36523#20221#35777#21495'(18'#20301')'#65306 end object Label3: TLabel Left = 254 Top = 152 Width = 110 Height = 36 AutoSize = False Caption = 'copyright by blacksnake and cc' Font.Charset = DEFAULT_CHARSET Font.Color = clRed Font.Height = -13 Font.Name = 'Tahoma' Font.Style = [] ParentFont = False WordWrap = True end object Edit1: TEdit Left = 16 Top = 93 Width = 223 Height = 31 Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Tahoma' Font.Style = [] ParentFont = False TabOrder = 0 OnKeyPress = Edit1KeyPress end object Edit2: TEdit Left = 17 Top = 151 Width = 227 Height = 31 Font.Charset = DEFAULT_CHARSET Font.Color = clFuchsia Font.Height = -19 Font.Name = 'Tahoma' Font.Style = [fsBold] ParentFont = False ReadOnly = True TabOrder = 1 end object Button1: TButton Left = 251 Top = 54 Width = 122 Height = 88 Caption = #35745' '#31639 Font.Charset = DEFAULT_CHARSET Font.Color = clMenuHighlight Font.Height = -21 Font.Name = 'Tahoma' Font.Style = [fsBold] ParentFont = False TabOrder = 2 OnClick = Button1Click end object Panel1: TPanel Left = 0 Top = 0 Width = 379 Height = 41 Align = alTop Caption = #36523#20221#35777#21319#20301#35745#31639#22120 Font.Charset = DEFAULT_CHARSET Font.Color = clInactiveCaptionText Font.Height = -37 Font.Name = #26999#20307'_GB2312' Font.Style = [fsBold, fsUnderline] ParentFont = False TabOrder = 3 end end