請問如何驗証身份証字號是否正確? |
尚未結案
|
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
|
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
function CheckBodyId(bodyid:string): string;
var msg: String;
Num: OleVariant;
i: Integer;
outnum: Double;
begin
if(Length(bodyid) <> 10)then
begin
Result := '身份証字號必需為十碼';
end
else
begin
Num := VarArrayCreate([0,11],varVariant);
for i := 1 to Length(bodyid) do
begin
Num[i] := Copy(bodyid,i,1);
end; if ((Num[1] = 'A') or (Num[1] = 'a'))then Num[0]:=1; Num[1] := 0;
if ((Num[1] = 'B') or (Num[1] = 'b'))then Num[0]:=1; Num[1] := 1;
if ((Num[1] = 'C') or (Num[1] = 'c'))then Num[0]:=1; Num[1] := 2;
if ((Num[1] = 'D') or (Num[1] = 'd'))then Num[0]:=1; Num[1] := 3;
if ((Num[1] = 'E') or (Num[1] = 'e'))then Num[0]:=1; Num[1] := 4;
if ((Num[1] = 'F') or (Num[1] = 'f'))then Num[0]:=1; Num[1] := 5;
if ((Num[1] = 'G') or (Num[1] = 'g'))then Num[0]:=1; Num[1] := 6;
if ((Num[1] = 'H') or (Num[1] = 'h'))then Num[0]:=1; Num[1] := 7;
if ((Num[1] = 'I') or (Num[1] = 'i'))then Num[0]:=3; Num[1] := 4;
if ((Num[1] = 'J') or (Num[1] = 'j'))then Num[0]:=1; Num[1] := 8;
if ((Num[1] = 'K') or (Num[1] = 'k'))then Num[0]:=1; Num[1] := 9;
if ((Num[1] = 'L') or (Num[1] = 'l'))then Num[0]:=2; Num[1] := 0;
if ((Num[1] = 'M') or (Num[1] = 'm'))then Num[0]:=2; Num[1] := 1;
if ((Num[1] = 'N') or (Num[1] = 'n'))then Num[0]:=2; Num[1] := 2;
if ((Num[1] = 'O') or (Num[1] = 'o'))then Num[0]:=3; Num[1] := 5;
if ((Num[1] = 'P') or (Num[1] = 'p'))then Num[0]:=2; Num[1] := 3;
if ((Num[1] = 'Q') or (Num[1] = 'q'))then Num[0]:=2; Num[1] := 4;
if ((Num[1] = 'R') or (Num[1] = 'r'))then Num[0]:=2; Num[1] := 5;
if ((Num[1] = 'S') or (Num[1] = 's'))then Num[0]:=2; Num[1] := 6;
if ((Num[1] = 'T') or (Num[1] = 't'))then Num[0]:=2; Num[1] := 7;
if ((Num[1] = 'U') or (Num[1] = 'u'))then Num[0]:=2; Num[1] := 8;
if ((Num[1] = 'V') or (Num[1] = 'v'))then Num[0]:=2; Num[1] := 9;
if ((Num[1] = 'W') or (Num[1] = 'w'))then Num[0]:=3; Num[1] := 2;
if ((Num[1] = 'X') or (Num[1] = 'x'))then Num[0]:=3; Num[1] := 0;
if ((Num[1] = 'Y') or (Num[1] = 'y'))then Num[0]:=3; Num[1] := 1;
if ((Num[1] = 'Z') or (Num[1] = 'z'))then Num[0]:=3; Num[1] := 3; for i := 2 to 11 do
begin
if ((Num[i] <> '0') and (Num[i] <> '1') and (Num[i] <> '2') and (Num[i] <> '3') and (Num[i] <> '4') and (Num[i] <> '5') and (Num[i] <> '6') and (Num[i] <> '7') and (Num[i] <> '8') and (Num[i] <> '9'))then
begin
msg := '身份証字號輸入錯誤';
end;
end; if(msg = '')then
begin
outnum := StrtoInt(Num[0]) + StrtoInt(Num[1])*9 + StrtoInt(Num[2])*8 + StrtoInt(Num[3])*7 + StrtoInt(Num[4])*6 + StrtoInt(Num[5])*5 + StrtoInt(Num[6])*4 + StrtoInt(Num[7])*3 + StrtoInt(Num[8])*2 + StrtoInt(Num[9]) + StrtoInt(Num[10]);
outnum := outnum Mod 10;
//出現錯誤Operator not applicable to this operand type if (outnum = 0)then
begin
Result := '身份証字號輸入錯誤';
end
end
else
begin
Result := msg;
end;
end;
end;
|
shinjie
資深會員 發表:12 回覆:275 積分:287 註冊:2003-03-19 發送簡訊給我 |
|
yorkland
高階會員 發表:2 回覆:138 積分:108 註冊:2004-12-17 發送簡訊給我 |
提供我之前寫的程式段.. var
Str1: String;
Num1: Integer;
begin
Num1:=1;
if Length(Trim(ID))=10 then begin
Str1:='ABCDEFGHJKLMNPQRSTUVXYWZIO';
Num1:=Pos(Copy(ID,1,1),Str1) 9;
Str1:=Format('%.2d',[Num1]);
try
Num1:=StrToInt(Copy(Str1,1,1))
StrToInt(Copy(Str1,2,1))*9
StrToInt(Copy(ID,2,1))*8
StrToInt(Copy(ID,3,1))*7
StrToInt(Copy(ID,4,1))*6
StrToInt(Copy(ID,5,1))*5
StrToInt(Copy(ID,6,1))*4
StrToInt(Copy(ID,7,1))*3
StrToInt(Copy(ID,8,1))*2
StrToInt(Copy(ID,9,1))*1
StrToInt(Copy(ID,10,1))*1;
except
Num1:=1;
end;
end;
Result:=((Num1 mod 10)=0);
end;
|
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
最後做出來了,也許方法很笨,但確定可用...^^
function CheckBodyId(bodyid:string): string;
var msg: String;
Num: OleVariant;
i: Integer;
outnum: Integer;
begin
msg := '';
if(Length(bodyid) <> 10)then
begin
msg := '身份証字號必需為十碼';
end
else
begin
Num := VarArrayCreate([0,11],varVariant);
Num[0] := '0';
for i := 1 to 10 do
begin
Num[i] := Copy(bodyid,i,1);
end;
for i := 2 to 10 do
begin
if ((Num[i] <> '0') and (Num[i] <> '1') and (Num[i] <> '2') and (Num[i] <> '3') and (Num[i] <> '4') and (Num[i] <> '5') and (Num[i] <> '6') and (Num[i] <> '7') and (Num[i] <> '8') and (Num[i] <> '9'))then
begin
msg := '身份証字號輸入錯誤';
end;
end;
if(msg = '')then
begin
if ((Num[1] = 'A') or (Num[1] = 'a'))then
begin
Num[0]:='1';
Num[1] := '0';
end;
if ((Num[1] = 'B') or (Num[1] = 'b'))then
begin
Num[0]:='1';
Num[1] := '1';
end;
if ((Num[1] = 'C') or (Num[1] = 'c'))then
begin
Num[0]:='1';
Num[1] := '2';
end;
if ((Num[1] = 'D') or (Num[1] = 'd'))then
begin
Num[0]:='1';
Num[1] := '3';
end;
if ((Num[1] = 'E') or (Num[1] = 'e'))then
begin
Num[0]:='1';
Num[1] := '4';
end;
if ((Num[1] = 'F') or (Num[1] = 'f'))then
begin
Num[0]:='1';
Num[1] := '5';
end;
if ((Num[1] = 'G') or (Num[1] = 'g'))then
begin
Num[0]:='1';
Num[1] := '6';
end;
if ((Num[1] = 'H') or (Num[1] = 'h'))then
begin
Num[0]:='1';
Num[1] := '7';
end;
if ((Num[1] = 'I') or (Num[1] = 'i'))then
begin
Num[0]:='3';
Num[1] := '4';
end;
if ((Num[1] = 'J') or (Num[1] = 'j'))then
begin
Num[0]:='1';
Num[1] := '8';
end;
if ((Num[1] = 'K') or (Num[1] = 'k'))then
begin
Num[0]:='1';
Num[1] := '9';
end;
if ((Num[1] = 'L') or (Num[1] = 'l'))then
begin
Num[0]:='2';
Num[1] := '0';
end;
if ((Num[1] = 'M') or (Num[1] = 'm'))then
begin
Num[0]:='2';
Num[1] := '1';
end;
if ((Num[1] = 'N') or (Num[1] = 'n'))then
begin
Num[0]:='2';
Num[1] := '2';
end;
if ((Num[1] = 'O') or (Num[1] = 'o'))then
begin
Num[0]:='3';
Num[1] := '5';
end;
if ((Num[1] = 'P') or (Num[1] = 'p'))then
begin
Num[0]:='2';
Num[1] := '3';
end;
if ((Num[1] = 'Q') or (Num[1] = 'q'))then
begin
Num[0]:='2';
Num[1] := '4';
end;
if ((Num[1] = 'R') or (Num[1] = 'r'))then
begin
Num[0]:='2';
Num[1] := '5';
end;
if ((Num[1] = 'S') or (Num[1] = 's'))then
begin
Num[0]:='2';
Num[1] := '6';
end;
if ((Num[1] = 'T') or (Num[1] = 't'))then
begin
Num[0]:='2';
Num[1] := '7';
end;
if ((Num[1] = 'U') or (Num[1] = 'u'))then
begin
Num[0]:='2';
Num[1] := '8';
end;
if ((Num[1] = 'V') or (Num[1] = 'v'))then
begin
Num[0]:='2';
Num[1] := '9';
end;
if ((Num[1] = 'W') or (Num[1] = 'w'))then
begin
Num[0]:='3';
Num[1] := '2';
end;
if ((Num[1] = 'X') or (Num[1] = 'x'))then
begin
Num[0]:='3';
Num[1] := '0';
end;
if ((Num[1] = 'Y') or (Num[1] = 'y'))then
begin
Num[0]:='3';
Num[1] := '1';
end;
if ((Num[1] = 'Z') or (Num[1] = 'z'))then
begin
Num[0]:='3';
Num[1] := '3';
end;
if(Num[0] <> '0')then
begin
outnum := StrtoInt(Num[0]) StrtoInt(Num[1])*9 StrtoInt(Num[2])*8 StrtoInt(Num[3])*7 StrtoInt(Num[4])*6 StrtoInt(Num[5])*5 StrtoInt(Num[6])*4 StrtoInt(Num[7])*3 StrtoInt(Num[8])*2 StrtoInt(Num[9]) StrtoInt(Num[10]);
if ((outnum mod 10) <> 0)then
begin
msg := '身份証字號輸入錯誤';
end;
end
else
begin
msg := '身份証字號輸入錯誤';
end;
end;
end;
Result := msg;
end;
|
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |