菜鸟的有关身份证的问题(50分)

  • 主题发起人 主题发起人 xyt
  • 开始时间 开始时间
X

xyt

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:
如何在delphi中进行身份证的处理,如自动辨别男女,得出出生年月.
望不吝指教.
西雅图
 
身份证有两种:
15位 7-12为出生年月,年为两位,如果身份证为偶数,为女性;否则,男性。
18位 7-14为出生年月,年为四位,如果身份证为偶数,为女性;否则,男性。
 
同意,这两种就是新版和旧版的
 
字符串操作而已
copy mod就行了
 
18位身份证的最后一位是校验位,奇偶不能用来判别男女!!!
3255710@sina.com
 
最后一位好像还是加密的,谁知道加密的算法?
 
听最后一位
 
以前我有一个c写的程序,来判断最后一位校验位是否为正确,现在不知在哪儿了。
不过好像一般如果是男的话也还是奇数,女的也还是偶数。
 
function IDInfo(const IDNO:String;var Birth:TDate;var Male:Boolean):Boolean;
var
lIDNO, BirthStr:String;
IDLen, i:Integer;
c:Char;
BirthYear, BirthMonth, BirthDay:Word;
begin
lIDNO:=Trim(IDNO);
IDLen:=Length(lIDNO);

Result:=False;

if (IDLen<>15) and (IDLen<>18) then
begin
Application.MessageBox('IDNO length error.',PChar(Application.Title),
mb_OK+mb_IconError);
exit;
end;

for i:=1 to IDLen do
begin
c:=lIDNO;
if (c<'0') or (c>'9') then
begin
Application.MessageBox('IDNO error number.',PChar(Application.Title),
mb_OK+mb_IconError);
exit;
end;
end;

if IDLen=15 then
begin
BirthStr:=Copy(lIDNO,7,6);
BirthStr:='19'+BirthStr;
end
else
BirthStr:=Copy(lIDNO,7,8);
BirthYear:=StrToInt(Copy(BirthStr,1,4));
BirthMonth:=StrToInt(Copy(BirthStr,5,2));
BirthDay:=StrToInt(Copy(BirthStr,7,2));

Try
Birth:=EncodeDate(BirthYear,BirthMonth,BirthDay);
Male:=((StrToInt(Copy(lIDNO,IDLen,1)) mod 2)=1);
Result:=True;
except
Application.MessageBox('IDNO error.',PChar(Application.Title),
mb_OK+mb_IconError);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Birth:TDate;
Male:Boolean;
begin
if IDInfo(Edit1.Text,Birth,Male) then
begin
Edit2.Text:=DateToStr(Birth);
if Male then
Edit3.Text:='Male'
else
Edit3.Text:='Female';
end
else
ShowMessage('Error');
end;
 
18位的是倒数第二位的奇偶辨别男女!!!!!
 
多人接受答案了。
 
calvin:
可否给小弟发一份调通的身份证源程序,不胜感激.
xyt
 
e-mail :zjxyt@21cn.com
急!!!
 
calvin:
你写的程序在编译时显示参数过多的提示,请再帮一下忙. 谢谢.
 
后退
顶部