如何根据身份证号码求年龄? ( 积分: 50 )

  • 主题发起人 主题发起人 YaoYL
  • 开始时间 开始时间
Y

YaoYL

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题也许很菜,请知道的兄弟回答一下,谢谢!
 
这个问题也许很菜,请知道的兄弟回答一下,谢谢!
 
身份証號碼有兩種吧.一種是15位的一種是18位的.
15位的這樣取吧:
select datediff(yy,'19'+substring('身份証號',7,2),substring(convert(varchar(10),getdate(),111),1,4))
18位的這樣取吧:
select datediff(yy,substring('身份証號',7,4),substring(convert(varchar(10),getdate(),111),1,4))
 
//给你个取身份证里出生年月日的函数,其他事你自己知道怎么做了吧
function getbornfromidcard(idcard:string):tdate;
var
bornstr:string;
begin
if trim(idcard)<>'' then
begin
case length(trim(idcard)) of //
15:begin
bornstr:='19'+copy(trim(idcard),7,6);
end;
18:begin
bornstr:=copy(trim(idcard),7,8);
end;
end
// case
bornstr:=copy(bornstr,1,4)+'-'+copy(bornstr,5,2)+'-'+copy(bornstr,7,2);
getbornfromidcard:=strtodate(bornstr);
end;

end;
 
function GetAgeByIdNo(const PersonalID:string):integer;
var
m_DBirthday:TDatetime;
year1,year2,month1,month2,day1,day2 : word;
iAge : smallint;
begin
result:=0;
if (Length(PersonalID)<>15) and (Length(PersonalID)<>18) then
begin
Prompt('身份证位数不对,请重新输入!');
Exit;
end;
if PersonalID <> '' then
begin
if Length(PersonalID) = 15 then
m_DBirthday:= strtodatetime('19' + Copy(PersonalID,7,2) + '-' + Copy(PersonalID,9,2) + '-' + Copy(PersonalID,11,2))
else
m_DBirthday:= strtodatetime(Copy(PersonalID,7,4)+ '-' + Copy(PersonalID,11,2) + '-'+ Copy(PersonalID,13,2))

end;
DecodeDate(Now, year1, month1, day1);
DecodeDate(m_DBirthday, year2, month2, day2);
iAge := Year1 - Year2

result:=iAge;
end;
 
楼主对身份证还没有研究吧,呵呵~~~
第一代身份证是15位的
形如:
AAAAAAYYMMDDNNX
其中
AAAAAA为地区码,也就是说可以通过这个判断你是哪个地区的
YYMMDD为出生年月
NN为流水号
X表示性别,奇数为男,偶数为女

第二代的身份证是18位的,形如:
AAAAAAYYYYMMDDNNNX
AAAAAA为地区码,也就是说可以通过这个判断你是哪个地区的
YYYYMMDD为出生年月
NNN应该是流水号来的
X为校验码,其意义,我还不太清楚

目前已经有第三代电子身份证了,具体情况就不太了解了
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部