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
訂閱:
張貼留言 (Atom)
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
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