//判断身份证号码是否有效
function CheckIDCard(EditNum: TEdit): boolean;
var
sID: String;
sMonth, sDay: String;
begin
sID:= EditNum.Text;
if((length(trim(sID))<>15) and (length(trim(sID))<>18)) then
begin
MessageBox(EditNum.Handle, '身份证号码只能为15位或18位,请检查!', '提示', mb_OK);
EditNum.SetFocus;
result:= false;
Exit;
end;
case Length(sID) of
15:
begin
sMonth:= Copy(sID, 9, 2);
sDay:= Copy(sID, 11, 2);
end;
18:
begin
sMonth:= Copy(sID, 11, 2);
sDay:= Copy(sID, 13, 2);
end;
end;
if not(((StrToInt(sMonth)) >= 1) and ((StrToInt(sMonth)) <= 12)) then
begin
MessageBox(EditNum.Handle, '您输入的月份不对,请检查!', '提示', mb_OK);
EditNum.SetFocus;
result:= false;
Exit;
end;
if not(((StrToInt(sDay)) >= 1) and ((StrToInt(sDay)) <= 31)) then
begin
MessageBox(EditNum.Handle, '您输入的日期不对,请检查!', '提示', mb_OK);
EditNum.SetFocus;
result:= false;
Exit;
end;
result:= true;
end;
//根据身份证号码得到出生日期和性别
function GetIDCardInfo(sID: String; var dBirthday: TDateTime; var sMale: String): Boolean;
var
sYear, sMonth, sDay, sBirthday: String;
bMale: boolean;
begin
Result:= False;
case Length(sID) of
15:
begin
sBirthday:= Copy(sID, 7, 6);
sYear:= '19' + LeftStr(sBirthday, 2);
sMonth:= Copy(sBirthday, 3, 2);
sDay:= RightStr(sBirthday, 2);
sBirthday:= sYear + '-' + sMonth + '-' + sDay;
dBirthday:= StrToDate(sBirthday);
bMale:= (Ord(sID[15]) - Ord('0')) mod 2 = 1;
if(bMale = true) then
sMale:= '男'
else
sMale:= '女';
Result:= True;
end;
18:
begin
sBirthday:= Copy(sID, 7, 6);
sYear:= LeftStr(sBirthday, 4);
sMonth:= Copy(sBirthday, 5, 2);
sDay:= RightStr(sBirthday, 2);
sBirthday:= sYear + '-' + sMonth + '-' + sDay;
dBirthday:= StrToDate(sBirthday);
bMale:= (Ord(sID[17]) - Ord('0')) mod 2 = 1;
if(bMale = true) then
sMale:= '男'
else
sMale:= '女';
Result:= True;
end;
end;
end;
调用的时候
procedure Tfrmpersonnel_zp_staff.EditCardNumExit(Sender: TObject);
var
sMale: String;
dBirthday: TDateTime;
begin
inherited;
if(ComboBoxCardType.Text = '身份证') and not(EditCardNum.Text = '') then //证件类型为身份证并且号码不为空
if(CheckIDCard(EditCardNum) = true) then //如果身份证号码合法,得到生日和性别
begin
GetIDCardInfo(EditCardNum.Text, dBirthday, sMale);
DateBirth.Value:= dBirthday;
ComboBoxSex.Text:= sMale;
end;
end;
procedure Tfrmpersonnel_zp_staff.EditCardTypeExit(Sender: TObject);
var
sMale: String;
dBirthday: TDateTime;
begin
inherited;
if(ComboBoxCardType.Text = '身份证') and not(EditCardNum.Text = '') then //证件类型为身份证并且号码不为空
if(CheckIDCard(EditCardNum) = true) then //如果身份证号码合法,得到生日和性别
begin
GetIDCardInfo(EditCardNum.Text, dBirthday, sMale);
DateBirth.Value:= dBirthday;
ComboBoxSex.Text:= sMale;
end;
end;