身份證統一編號共計有 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;
               (
geocities.com/huanlin_tsai)