身份證檢查程式
範例:[ Download ]
學習重點
- Procedure 設計
- Function 設計
- Array 陣列使用與操作
- 字串、字元、ASCII 碼轉換
身份證認證公式
驗證規則 ( Source:戶證事務所) :
身份證統一編號共計10 位,其中第一位為英文字母,後共有九個數字;
而最後一位數字為檢查碼( Check Digit ) ,表示如下表:
L1 D1 D2 D3 D4 D5 D6 D7 D8 D9
L1: 英文字母, 代表出生地的縣/市代號
A=10 台北市 J=18 新竹縣 S=26 高雄縣
B=11 台中市 K=19 苗栗縣 T=27 屏東縣
C=12 基隆市 L=20 台中縣 U=28 花蓮縣
D=13 台南市 M=21 南投縣 V=29 台東縣
E=14 高雄市 N=22 彰化縣 * W=32 金門縣
F=15 台北縣 * O=35 新竹市 X=30 澎湖縣
G=16 宜蘭縣 P=23 雲林縣 Y=31 陽明山
H=17 桃園縣 Q=24 嘉義縣 * Z=33 連江縣
* I=34 嘉義市 R=25 台南縣
D1: 性別,1=男, 2=女
D2~D9: 檢查碼
L1 對照表:
字母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
令其十位數為X1 ,個位數為X2 ;( 如A=10: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 。
即如以10 為模數,檢查號碼為( 10 - Y- D9 ) / 10 的餘數,
如餘數為0 時,則檢查碼為0 。
製作流程
○ 建立專案
○ 製作按鈕與Label、Edit元件
○ 建立全域一維陣列: NumberArray 大小為26 (NumberArray : array[0.. 25] of Integer ; )
○ 建立初使化程序 procedure initArray;
- 進行NumberArray 初始化,其值以查表方式建立
EX: NumberArray[0] := 10 ; //A
○ 建立輸入字串檢查函式驗證是否符合格式
function CheckErr( idnum : String): Boolean;
function CheckErr( idnum : String): Boolean;
- 判斷是否長度相同 (使用Length()找出字串長度)
- 判斷第一字母是否為大寫英文 (使用 if not( idnum[1] in ['A' .. 'Z']) then 判斷 )
- 判斷第二個字是否為1(男),2(女)
- 判段輸入是否為數字 (使用 if not(idnum[x] in ['0' .. '9']) then 判斷)
○ 建立身份證檢查函式
function CheckID( IDstr : String): boolean
- 取出第一個字母對應到NumberArray 的值 (以ASCII code 判斷做對照,byte(IDstr[1]) - byte('A');)
- 取出該字母於array的對應值
- 取出X1, X2值
- 套入公式 :Y= X1 + 9*X2 + 8*D1 + 7*D2 + 6*D3 + 5*D4 + 4*D5 + 3*D6 + 2*D7 + D8 + D9
- 若可被10除盡表該身份證為對
○ 輸出結果
BP: 這次的題目比較難,各位同學挑戰看看! 加油