Translate

2010年10月8日 星期五

弘光 - 99-1 網路程式設計 - C#回顧練習2

身份證檢查程式 - 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 的餘數,
如餘數為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 );
  • 判斷是否長度相同 (使用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
}

會顯示錯誤...
請教老師!
是怎麼寫呢?

BP 提到...

Hello 同學


你的宣告NumberArray 是在哪呢?
你應該是忘了在全域的地方宣告,
檢查看看,如果還是不行
把錯誤的提示訊息copy給我看看!

謝謝囉