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

//判断身份证号码是否有效
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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值