废话不多说,直接上主要函数:
function jy_sfzh(Str:string):char;
var
r:integer;
t_tmp:integer;
jym:char;
begin
if (isnum(copy(Str,1,17))=true) and (isdate(copy(Str,7,8))=true) then
begin
t_tmp:=(strtoint(Str[1])*7
+strtoint(Str[2])*9
+strtoint(Str[3])*10
+strtoint(Str[4])*5
+strtoint(Str[5])*8
+strtoint(Str[6])*4
+strtoint(Str[7])*2
+strtoint(Str[8])*1
+strtoint(Str[9])*6
+strtoint(Str[10])*3
+strtoint(Str[11])*7
+strtoint(Str[12])*9
+strtoint(Str[13])*10
+strtoint(Str[14])*5
+strtoint(Str[15])*8
+strtoint(Str[16])*4
+strtoint(Str[17])*2) mod 11;
case t_tmp of
0: jym:='1';
1: jym:='0';
2: jym:='X';
3: jym:='9';
4: jym:='8';
5: jym:='7';
6: jym:='6';
7: jym:='5';
8: jym:='4';
9: jym:='3';
10: jym:='2';
end;
result:= jym;
end
else
result:='N';
end;