blueshu(绝对是菜鸟) 谢谢你,因为我现在资料没有了,凭着记忆你看看这回对不对?因为这个W(i) 其实就是 2^(18-i) mod 11 (i 属于[0,17])的结果, 但是我忘了是17,还是18了。function f(ID: string):string; const W:array [1..18] of integer = (6,3,7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4); A:array [0..10] of char = ('1','0','x','9','8','7','6','5','4','3','2'); var i, j, S: integer; NewID: string; begin if Length(ID) <> 15 then result:= '' else begin NewID:= ID; Insert('19', NewID, 7); S:= 0; try for i:=1 to 17 do begin j:= StrToInt(NewID[i]) * W[i]; // j:= StrToInt(NewID[i]) * ((2 shl (19-i)) mod 11); S:= S + j; end; S:= S mod 11; Result:= NewID + A[S]; except result:= ''; end; end; end;
兄弟你写的好象不对啊!!!
你用18位身份证最后一位是x的试试!!!
我做的程序里面有18万人,身份证号是必填的,
底下的一个用户就是因为一个身份证号报错而报不上来的,我当时把身份证号码搞过来到向个
网站去验证了好几次,用户也对了几次都是对的,可你的函数却报是错的!!!
本想向你请教,可却不能给你老兄发短信!!!
现在你不在dfw混了?
那你下次发现了这样的号码告诉我, [email protected] 行吗?
我也看看。
我这里找了不少,我自己还没验证
快上msn啊,我加了你了
谢谢你,因为我现在资料没有了,凭着记忆你看看这回对不对?因为这个W(i) 其实就是 2^(18-i) mod 11 (i 属于[0,17])的结果,
但是我忘了是17,还是18了。function f(ID: string):string;
const
W:array [1..18] of integer = (6,3,7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4);
A:array [0..10] of char = ('1','0','x','9','8','7','6','5','4','3','2');
var
i, j, S: integer;
NewID: string;
begin
if Length(ID) <> 15 then
result:= ''
else begin
NewID:= ID;
Insert('19', NewID, 7);
S:= 0;
try
for i:=1 to 17 do begin
j:= StrToInt(NewID[i]) * W[i];
// j:= StrToInt(NewID[i]) * ((2 shl (19-i)) mod 11);
S:= S + j;
end;
S:= S mod 11;
Result:= NewID + A[S];
except
result:= '';
end;
end;
end;
同时咨询:那里能下到“查询身份证所属地”的软件。
当然是不要RMB的!!指点!!
email给我就好了。