2012年9月30日 星期日

100模擬 Problem 3:檢查碼問題


子題1:
中華民國身分證的號碼是經由一串公式所產生出來的,目前中華民國身分證字號一共有十
碼,包括第一個大寫的英文字母與接續的九個阿拉伯數字。
(1)第一個字元代表地區,轉換方式為:A 轉換成1,0 兩個字元,B 轉換成1,1
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
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
(2)第二個字元代表性別,1 代表男性,2 代表女性
(3)第三個字元到第九個字元為流水號碼。
(4)第十個字元為檢查號碼。
例如:
A123456789,A 的轉換字元是1 和0,
1 0 1 2 3 4 5 6 7 8 9
n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11
然後再把每一個數字,依序乘上 1 9 8 7 6 5 4 3 2 1 1 的加權,再相加
套入公式,其結果為
然後再除以10,130/10 如果整除(130=10(mod 0),該組身分證字號為有效。
輸入說明:
第 1 行的數字n 代表有幾筆資料要測試,而n 的值介於1 和10 之間,之後每行為身分證字
號。
輸出說明:
從第 1 行起每行輸出對應到每組身分證字號,若為有效的身分證字號則輸出1,若為無效則
輸出為0。
輸入檔案 1:【檔名:in-3-1-1.txt】
3
A123456789
A123456788
A223499999
第 8 頁,共 13 頁
輸入檔案 2:【檔名:in-3-1-2.txt】
2
A107386817
A116673574
輸出範例:【檔名:out-3-1.txt】
1
0
0
1
1

2 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\IN-3-1-1.TXT" For Input As #1
    Open App.Path & "\IN-3-1-2.TXT" For Input As #2
    Open App.Path & "\out.txt" For Output As #3
    a = Split("A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", " ")
    a1 = Split("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", " ")
    '1 9 8 7 6 5 4 3 2 1 1
    For k = 1 To 2
    Input #k, n
    For i = 1 To n
    Input #k, x
    For j = 0 To UBound(a)
    If Mid(x, 1, 1) = a(j) Then x = a1(j) & Mid(x, 2): Exit For
    Next
    ans = 0
    For j = 1 To Len(x)
    If j = 1 Then ans = ans + Val(Mid(x, j, 1) * 1)
    If j = 2 Then ans = ans + Val(Mid(x, j, 1) * 9)
    If j = 3 Then ans = ans + Val(Mid(x, j, 1) * 8)
    If j = 4 Then ans = ans + Val(Mid(x, j, 1) * 7)
    If j = 5 Then ans = ans + Val(Mid(x, j, 1) * 6)
    If j = 6 Then ans = ans + Val(Mid(x, j, 1) * 5)
    If j = 7 Then ans = ans + Val(Mid(x, j, 1) * 4)
    If j = 8 Then ans = ans + Val(Mid(x, j, 1) * 3)
    If j = 9 Then ans = ans + Val(Mid(x, j, 1) * 2)
    If j = 10 Then ans = ans + Val(Mid(x, j, 1) * 1)
    If j = 11 Then ans = ans + Val(Mid(x, j, 1) * 1)
    Next
    If ans Mod 10 = 0 Then Print #3, "1" Else Print #3, "0"
    Next
    Next
    Close
    Close
    Close
    End
    End Sub

    回覆刪除
  2. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in-3-1-1.txt" For Input As #1
    Open App.Path & "\in-3-1-2.txt" For Input As #2
    Open App.Path & "\out-3-1.txt" For Output As #3
    Dim t As Boolean
    For i = 1 To 2
    Input #i, n
    a = Split("A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", " ")
    b = Split("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", " ")
    c = Split("0 1 9 8 7 6 5 4 3 2 1 1", " ")
    ans = 0
    For j = 1 To n
    Line Input #i, s
    For k = 0 To UBound(a)
    If Left(s, 1) = a(k) Then s = Replace(s, a(k), b(k))
    Next k
    For ii = 1 To Len(s)
    ans = ans + Val(Mid(s, ii, 1)) * Val(c(ii))
    Next ii
    If ans Mod 10 = 0 Then Print #3, "1" Else Print #3, "0"
    Next j
    Next i
    Close #3
    Close #2
    Close #1
    End
    End Sub

    回覆刪除