2015年6月26日 星期五

資處程式 6/26 甄選(第1題及第2題)

第1題:身份證檢查-1
    N組輸入,每一組一行,為身份證的前9碼,最後少一碼為檢查碼,請輸出n行,各1數字為「檢查碼」
  範例:T11266383
身份證第1碼:英文代號以下表轉換成數字
      A=10 台北市     G=16 宜蘭縣     M=21 南投縣     S=26 高雄縣     Y=31 陽明山
      B=11 台中市     H=17 桃園縣     N=22 彰化縣     T=27 屏東縣     Z=33 連江縣
      C=12 基隆市     I=34 嘉義市*    O=35 新竹市*    U=28 花蓮縣
      D=13 台南市     J=18 新竹縣     P=23 雲林縣     V=29 台東縣
      E=14 高雄市     K=19 苗栗縣     Q=24 嘉義縣     W=32 金門縣*
      F=15 台北縣     L=20 台中縣     R=25 台南縣     X=30 澎湖縣
T轉成27 則和 sum = 2*1 + 7*9 接著8個數字各乘8~1 { 1*8+1*7+2*6+6*5+6*4+3*3+8*2+3*1}
所以 sum = 2*1 + 7*9 + 1*8+1*7+2*6+6*5+6*4+3*3+8*2+3*1 = 174 ,檢查碼即 sum10的餘數 6

第2題:身份證檢查-2
 身份證的驗證規則與第1題同,但所輸入的資料少了第1碼英文字,請問有哪幾個英文字可能是對的
 範例:112663836sum = a*1+b*9 + 1*8+1*7+2*6+6*5+6*4+3*3+8*2+3*1+6 sum會被10整除
   (a+9b+115) 若代入27a=2,b=7 sum=180是對的,則T可以
    又若代入G(16)1+6*9+115 = 170亦可   ,也就是 a分別以1、2、3代入試即可得出


參考解答:
' 第1題 身份證檢查-1 ,少最後1碼(檢查碼),請算出檢查碼
 Dim 英to數() = {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,32}
 Dim line() = Split(TextBox1.Text, vbNewLine)
 Dim n As Integer = Val(line(0))
 For i = 1 To n
    Label1.Text &= vbCrLf
    Dim pid As String = line(i)
    Dim num = 英to數(Asc(pid) - 65)  '第1個字,查 英to數()陣列 A->10 , B->11 ... Z->32
    Dim sum = (num \ 10) + (num Mod 10) * 9
    For j = 2 To 9
      sum += (Asc(Mid(pid, j, 1)) - 48) * (10 - j)
    Next j
    Label1.Text &= (10 - sum Mod 10)
Next i
---------第1題 資料---
5
T11266383   Ans: 6
M12345678   Ans: 9
Y12345678   Ans: 8
A22334455   Ans: 3
R10234567   Ans: 8

' 第2題 身份證檢查-2 ,少了第1碼(英文字),請算出可能的英文字母
  Dim 數to英 As String = "ABCDEFGHJKLMNPQRSTUVXYWZIO"
  Dim line() = Split(TextBox1.Text, vbNewLine)
  Dim n As Integer = Val(line(0))
  For i = 1 To n
    Label1.Text &= vbCrLf
    Dim pid As String = line(i)
    For a = 1 To 3
      Dim sum = a
      For j = 1 To 8
        sum += (Asc(Mid(pid, j, 1)) - 48) * (9 - j)
      Next j
      sum += Asc(Mid(pid, 9, 1)) - 48
      Dim ans = a * 10 + sum Mod 10 - 9
      If ans <= 35 Then Label1.Text &= Mid(數to英, ans, 1)
    Next a
  Next i
---------第2題 資料---
5
112663836   Ans: GT
108881111   Ans: GT
123456788   Ans: KLY
223344556   Ans: DQO
102345678   Ans: ER

0 意見:

張貼留言