您的位置:首页 > 其它

身份证号码的验证&根据身份证号码获取出生日期和性别

2008-09-12 16:29 1036 查看
//判断身份证号码是否有效
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: