全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2751
推到 Plurk!
推到 Facebook!

請問如何驗証身份証字號是否正確?

尚未結案
Angi
一般會員


發表:16
回覆:56
積分:14
註冊:2005-01-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-17 11:41:33 IP:211.20.xxx.xxx 未訂閱
想用一個function傳入身份証字號 回傳錯誤訊息,如:身份証字號必需為10位數.身份証字號錯誤... 若為正確之身份証字號,則回傳空值 請問該怎麼做呢??
Angi
一般會員


發表:16
回覆:56
積分:14
註冊:2005-01-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-17 11:53:07 IP:211.20.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-17 11:57:03 IP:203.73.xxx.xxx 未訂閱
可以參考 http://delphi.ktop.com.tw/topic.php?topic_Id=19453
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-17 14:30:19 IP:220.130.xxx.xxx 未訂閱
提供我之前寫的程式段.. 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-17 15:59:04 IP:211.20.xxx.xxx 未訂閱
最後做出來了,也許方法很笨,但確定可用...^^ 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-30 13:44:14 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-03-29 22:25:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!