身份证号码的验证&根据身份证号码获取出生日期和性别
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;
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;
相关文章推荐
- 根据身份证号,使用Java编写程序获取年龄、性别、出生日期
- js验证身份证号码与出生日期和性别
- java一个简单的根据身份证号码获取该人的出生年月日和性别
- 根据身份证号,使用Java编写程序获取年龄、性别、出生日期
- C#中如何根据身份证号码得到出生日期和性别
- 根据身份证号码计算出生日期、年龄、性别(18位)
- C# 根据身份证号码判断出生日期和性别
- Excel表格中根据身份证号获取出生日期、生日、年龄、性别、工龄、退休龄
- 根据身份证号码计算出生日期、年龄、性别(18位);根据入职时间计算工龄。
- js 根据身份证获取出生日期及性别
- C#中如何根据身份证号码得到出生日期和性别
- C# 根据身份证号码判断出生日期和性别
- jquery根据身份证号码计算出生日期、年龄、性别代码
- 根据身份证号码计算出生日期、年龄、性别(18位) 根据入职时间计算工龄
- Java 身份证验证及获取出生日期、性别
- java通过身份证号码获取出生日期、性别、年龄
- C# 根据身份证号码判断出生日期和性别
- java通过身份证号码获取出生日期、性别、年龄
- 从身份证号码中获取性别、出生日期、籍贯,并更新mongodb
- PHP根据身份证号码验证、获取星座、生肖和性别函数