身份證統一編號共計有 10 位,其中第一位為英文字母,後共有九個數字; 而最後一位數字為檢查碼( Check Digit ) ,表示如下表: ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │L1│D1│D2│D3│D4│D5│D6│D7│D8│D9│ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ ↑ ↑ ↑ │ └──ゝ 1:表示男性 └─ ゞ檢查號碼 │ 2:表示女性 │ └ヾ英文字母:代表各縣市 ┌─────┐ │其關係如下│ └─────┘ ヾ:字母 L1 對照表如下,須找出其代號 2 位: ┌──┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ ︵ │字母│A│B│C│D│E│F│G│H│J│K│L│M│N│ 注 ├──┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ 意 │代號│10│11│12│13│14│15│16│17│18│19│20│21│22│ 代 └──┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ 表 ┌──┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ 號 │字母│P│Q│R│S│T│U│V│X│Y│W│Z│I│O│ 順 ├──┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ 序 │代號│23│24│25│26│27│28│29│30│31│32│33│34│35│ !! └──┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ ︶ 各英文字母之加權數,及代表縣市如下: A = 10台北市 B = 11台中市 C = 12基隆市 D = 13台南市 E = 14高雄市 F = 15台北縣 G = 16宜蘭縣 H = 17桃園縣 I = 34嘉義市 J = 18新竹縣 K = 19苗壢縣 L = 20台中縣 M = 21南投縣 N = 22彰化縣 O = 35新竹市 P = 23雲林縣 Q = 24嘉義縣 R = 25台南縣 S = 26高雄縣 T = 27屏東縣 U = 28花蓮縣 V = 29台東縣 W = 32金門縣 X = 30澎湖縣 Y = 31陽明山 Z = 33連江縣 檢查碼的求法: 令其十位數為 X1 ,個位數為 X2 ;( 如A:X1=1 , X2=0 ) :依其公式計算結果: Y= X1 + 9*X2 + 8*D1 + 7*D2 + 6*D3 + 5*D4 + 4*D5 + 3*D6 + 2*D7 + D8 + D9 :假如Y能被 10 整除,則表示該身份證號碼為正確,否則為錯誤。即如 以 10 為模數,檢查號碼為 ( 10 - Y - D9 ) / 10 的餘數,如餘數 為 0 時,則檢查碼為 0 。 //------------------------------------------------------------------ // 檢驗身分證號碼的正確性 //------------------------------------------------------------------ function CheckIdNo(ID: string): boolean; const LetterWeight: array['A'..'Z'] of integer = // A B C D E F G H I J K L M N O (10, 11, 12, 13, 14, 15, 16, 17, 34, 18, 19, 20, 21, 22, 35, 23, 24, 25, 26, 27, 28, 29, 32, 30, 31, 33); // P Q R S T U V W X Y Z var i: integer; D: array[1..9] of integer; Sum: integer; begin Result := false; if Length(ID) <> 10 then Exit; ID := UpperCase(ID); if not (ID[1] in ['A'..'Z']) then Exit; for i := 2 to 10 do begin if not (ID[i] in ['0'..'9']) then Exit; end; for i := 1 to 9 do D[i] := StrToInt(Copy(ID, i+1, 1)); i := LetterWeight[ID[1]]; Sum := (i div 10) + (i mod 10) * 9; Sum := Sum + 8 * D[1] + 7 * D[2] + 6 * D[3] + 5 * D[4] + 4 * D[5] + 3 * D[6] + 2 * D[7] + D[8] + D[9]; Result := (Sum mod 10 = 0); end;