提取身份证信息

function GetIDInfoGetDInfo(const CardNo: string; var Sex,

  BirthDay: string; var Age: Integer; var Area: string): Integer;

var

  iCardNo: Int64;

  iYear, iSex: Integer;

  sBirth, fBirth: string;

  dBirth: TDateTime;

begin

  Result := 0; //表示身份证输入正确

  if (Length(CardNo) <> 15) and (Length(CardNo) <> 18) then

  begin

    Result := 1; //位长不对

    Exit;

  end;

 

  if Length(CardNo) = 15 then

  begin

    if not TryStrToInt64(CardNo, iCardNo) then

    begin

      Result := 2; //必须为数字

      Exit;

    end;

 

    sBirth := '19' + Copy(CardNo, 7, 6);

    iSex := StrToInt(Copy(CardNo, 15, 1));

    if Odd(iSex) then

      Sex := '男'

    else

      Sex := '女';

  end

  else

  begin

    if not TryStrToInt64(Copy(CardNo, 1, 17), iCardNo) then

    begin

      Result := 2; //前17位必须为数字

      Exit;

    end;

    sBirth := Copy(CardNo, 7, 8);

    iSex := StrToInt(Copy(CardNo, 17, 1));

    case iSex of

      0: Sex := '未知';

      1: Sex := '男';

      2: Sex := '女';

      9: Sex := '未说明';

    end;

  end;

 

  fBirth := Format('%s-%s-%s', [Copy(sBirth, 1, 4),

    Copy(sBirth, 5, 2), Copy(sBirth, 7, 2)]);

  if not TryStrToDate(fBirth, dBirth) then

  begin

    Result := 3; //生日格式不对

    Exit;

  end;

  iYear := YearsBetween(Date, dBirth);

  if (iYear < 0) or (iYear >= 120) then

  begin

    Result := 4; //年龄错误

    Exit;

  end;

 

  BirthDay := sBirth;

  Age := iYear;

  Area := GetArea(StrToInt(Copy(CardNo, 1, 2)));

end;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值