身份證檢查程式 - C#回顧
學習重點
- 副程式設計
- 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 的餘數,
即如以10 為模數,檢查號碼為( 10 - Y- D9 ) / 10 的餘數,
如餘數為0 時,則檢查碼為0 。
製作流程
○ 建立網站
○ 製作按鈕與Label、Edit元件
○ 建立全域一維陣列: NumberArray 大小為26 (public int[]NumberArray = new int[26]; )
○ 建立初使化程序 protected void initArray;
- 進行NumberArray 初始化,其值以查表方式建立
EX: - NumberArray[0] = 10 ; //A
- NumberArray[1] = 11 ; //B
- 請查表
○ 建立輸入字串檢查函式驗證是否符合格式
public boolean CheckErr( String idnum );
public boolean CheckErr( String idnum );
- 判斷是否長度相同 (使用idnum.Length 找出字串長度)
- 判斷第一字母是否為大寫英文
- 使用 Regex NumberPattern=new Regex("^[A-Z]")
- if (!NumberPattern.IsMatch(idnum.Substring(0,1)) )
- 判斷第二個字是否為1(男),2(女) : idnum.Substring(1,1)
- 判段輸入是否為數字 (使用 if (int.TryParse( oneword , out num) == false) 判斷)
○ 建立身份證檢查函式 public Boolean CheckID(String IDstr)
- 取出第一個字母對應到NumberArray 的值
- (以ASCII code 判斷做對照, 轉ASCII code方法: Convert.ToInt32( char ) )
- 取出該字母於array的對應值
- 取出X1, X2值
- 套入公式 :Y= X1 + 9*X2 + 8*D1 + 7*D2 + 6*D3 + 5*D4 + 4*D5 + 3*D6 + 2*D7 + D8 + D9
- 若可被10除盡表該身份證為對
○ 輸出結果
2 則留言:
建立初使化程序 protected void initArray;
•進行NumberArray 初始化,其值以查表方式建立
EX:
NumberArray[0] = 10 ; //A
NumberArray[1] = 11 ; //B
protected void initArray
{
NumberArray[0] = 10 ; //A
NumberArray[1] = 11 ; //B
}
會顯示錯誤...
請教老師!
是怎麼寫呢?
Hello 同學
你的宣告NumberArray 是在哪呢?
你應該是忘了在全域的地方宣告,
檢查看看,如果還是不行
把錯誤的提示訊息copy給我看看!
謝謝囉
張貼留言