请问在EDIT1中输入“身份证号”,怎样计算出“性别”(在EDIT2中)与“年龄”(在EDIT3中)? (50分)

  • 主题发起人 主题发起人 cdliurong
  • 开始时间 开始时间
C

cdliurong

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在EDIT1中输入“身份证号”,怎样计算出“性别”(在EDIT2中)与“年龄”(在EDIT3中)?
 
年龄的计算方法:
uses
……,DateUtils,……

function GetAge(sNum:String):Integer;
var
sY,sM,sD:String;
dDate:TDate;
begin
sY := Copy(sNum,7,2);
sM := Copy(sNum,9,2);
sD := Copy(sNum,11,2);
dDate := StrToDate('19' + sY + '-' + sM +'-' + sD);
Result := YearsBetween(Now,dDate);
end;

如:122001800122051
返回23
 
先求出长度,然后取出最后一位,用它取余 2就可以啦。
 
旧身份证号码(15位的)的最后一个数字如果是奇数表示男性,偶数表示女性。
 
15:最后一位如果是奇数则为男,如果为偶数则为女,年龄嘛,根据7-12位来判断
18:第17位是性别位,方法跟15位的时候相同,年龄嘛,7-14位来判断
 
miaofeng老兄:
哪有YearsBetween这个函数啊?请写详细点好吗?
 
YearsBetween是Delphi7中DateUtils单元中的函数。
 
miaofeng老兄:
那怎么在这句编译不过,请写详细些好吗?我是初学者,请多指教。
 
你用的是Delphi7吗?是的话在Uses中加入DateUtils就可以通过编译了。
 
在你的Form中放一个Button1,三个Edit,双击Button1输入下面的代码就能实现你的需要的功能了:
procedure TForm1.Button1Click(Sender: TObject);
var
sNum,sY,sM,sD:String;
dDate:TDate;
begin
sNum:=edit1.Text;
if (length(sNum)<>15) and (length(sNum)<>18) then begin
edit3.text:='输入的身份证号码不合法';
edit2.text:=edit3.text;
exit;
end;
if length(sNum)=15 then insert('19',sNum,7);
sY := Copy(sNum,7,4);
sM := Copy(sNum,11,2);
sD := Copy(sNum,13,2);
dDate := StrToDate(sY + '-' + sM +'-' + sD);
edit3.text:=inttostr(YearsBetween(Now,dDate));
if strtoint(sNum[17]) mod 2=0 then
edit2.text:='女'
else
edit2.text:='男';
end;
 
这里有我写的,获取生日及性别,包括15位->18位身份证的升级
http://www.delphibbs.com/delphibbs/dispq.asp?LID=1784666
 
如果你用的是Delphi5,没有DateUtils单元,可用下面的语句代替有YearsBetween的语句:
edit3.text:=copy(datetostr(Now-dDate),3,2);
 
多人接受答案了。
 

Similar threads

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