子題2(10%):是否文句中存在任何子字串,其為「合理」的「台北市」、「台中市」或「高雄市」身份證字號。
註:
(1) 身份證字號第1 碼為地區碼,「台北市」以「A」開頭、「台中市」以「B」開頭、「高雄市」以「E」開頭。
(2) 身份證字號的第2 碼為「性別」碼,其值應為「1」或「2」。
(3) 若將身份證字號的「地區碼」改為2 碼數字,其中「A」改為「10」、「B」改為「11」、「E」改為「14」,其後併入原身份證後9 碼數字,成為1 個新的11 位數字碼。將此數字碼由左至右分別乘以「1、9、8、7、6、5、4、3、2、1、1」,其相乘後的總和應可被10 整除。
輸入說明:
第1~3 行表示欲檢查之文句。
輸出說明:
若存在合理的身份證字號即輸出「有」,不存在即輸出「沒有」。
輸入範例:【檔名:in-3-2.txt】
His ID number is A120441768.
Her ID number is B272857734.
Their ID numbers are E286585485, E282467997, and E195445887.
輸出範例:【檔名:out-3-2.txt】
有
沒有
有
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, X
List1.Clear
List2.Clear
Call AA(X)
For i = 0 To (List1.ListCount - 1)
ans = 0
For j = 1 To 10
Select Case j
Case 1:
Select Case Mid(List1.List(i), 1, 1)
Case "A": ans = 1 * 1 + 0 * 9
Case "B": ans = 1 * 1 + 1 * 9
Case "E": ans = 1 * 1 + 4 * 9
End Select
Case 2: ans = ans + Val(Mid(List1.List(i), j, 1)) * 8
Case 3: ans = ans + Val(Mid(List1.List(i), j, 1)) * 7
Case 4: ans = ans + Val(Mid(List1.List(i), j, 1)) * 6
Case 5: ans = ans + Val(Mid(List1.List(i), j, 1)) * 5
Case 6: ans = ans + Val(Mid(List1.List(i), j, 1)) * 4
Case 7: ans = ans + Val(Mid(List1.List(i), j, 1)) * 3
Case 8: ans = ans + Val(Mid(List1.List(i), j, 1)) * 2
Case 9: ans = ans + Val(Mid(List1.List(i), j, 1)) * 1
Case 10: ans = ans + Val(Mid(List1.List(i), j, 1)) * 1
End Select
Next j
If ans Mod 10 = 0 Then List2.AddItem "有"
Next i
If List2.ListCount <> 0 Then Print #2, "有" Else Print #2, "沒有"
Loop
Close #2
Close #1
End
End Sub
Sub AA(A) '挑出可檢查字串
For i = 1 To Len(A)
B = Mid(A, i, 1)
If B = "A" Or B = "B" Or B = "E" Then
If IsNumeric(Mid(A, i + 1, 9)) = True Then List1.AddItem Mid(A, i, 10)
End If
Next i
End Sub
佑好,
回覆刪除程式結果正確。
改進點:
For j = 1 To 10
Select Case j
Case 1:
Select Case Mid(List1.List(i), 1, 1)
Case "A": ans = 1 * 1 + 0 * 9
Case "B": ans = 1 * 1 + 1 * 9
Case "E": ans = 1 * 1 + 4 * 9
End Select
Case 2: ans = ans + Val(Mid(List1.List(i), j, 1)) * 8
Case 3: ans = ans + Val(Mid(List1.List(i), j, 1)) * 7
Case 4: ans = ans + Val(Mid(List1.List(i), j, 1)) * 6
Case 5: ans = ans + Val(Mid(List1.List(i), j, 1)) * 5
Case 6: ans = ans + Val(Mid(List1.List(i), j, 1)) * 4
Case 7: ans = ans + Val(Mid(List1.List(i), j, 1)) * 3
Case 8: ans = ans + Val(Mid(List1.List(i), j, 1)) * 2
Case 9: ans = ans + Val(Mid(List1.List(i), j, 1)) * 1
Case 10: ans = ans + Val(Mid(List1.List(i), j, 1)) * 1
End Select
Next j
這裡用迴圈是沒有必要的,不正是一個接一個的循序執行而已嗎?
Dim N, ID$, ANS
回覆刪除Private Sub Form_Load()
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, N
ANS = 0
Call check
Dim p
p = Split("0 1 9 8 7 6 5 4 3 2 1 1")
For i = 1 To Len(ID)
ANS = ANS + Val(Mid(ID, i, 1)) * p(i)
Next
If ANS Mod 10 = 0 Then Print #2, "有" Else Print #2, "沒有"
Loop
Close
Close
End Sub
Sub check()
For i = 1 To Len(N)
m = Mid(N, i, 1)
If m = "A" Or m = "B" Or m = "E" Then
If IsNumeric(Mid(N, i + 1, 9)) = True Then
If m = "A" Then ID = "10" & Mid(N, i + 1, 9):
If m = "B" Then ID = "11" & Mid(N, i + 1, 9):
If m = "E" Then ID = "14" & Mid(N, i + 1, 9):
End If
End If
Next
End Sub
佑、arro好,
回覆刪除你們兩個又都沒看清題目了,
「(2) 身份證字號的第2 碼為「性別」碼,其值應為「1」或「2」。」
這一點,你們都沒理它,當性別為3還是有機會驗算得過去的哦,例如[ A000000009 ]
再小心一點兒,這也算是送分題了,不可以放過去哦。
熊掌好,
回覆刪除整個拆掉迴圈
全身舒暢許多XDD
並加了判斷性別
Private Sub Form_Load()
Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, X
List1.Clear
List2.Clear
Call AA(X)
For i = 0 To (List1.ListCount - 1)
ans = 0
Select Case Mid(List1.List(i), 1, 1)
Case "A": ans = 1 * 1 + 0 * 9
Case "B": ans = 1 * 1 + 1 * 9
Case "E": ans = 1 * 1 + 4 * 9
End Select
ans = ans + Val(Mid(List1.List(i), 2, 1)) * 8
ans = ans + Val(Mid(List1.List(i), 3, 1)) * 7
ans = ans + Val(Mid(List1.List(i), 4, 1)) * 6
ans = ans + Val(Mid(List1.List(i), 5, 1)) * 5
ans = ans + Val(Mid(List1.List(i), 6, 1)) * 4
ans = ans + Val(Mid(List1.List(i), 7, 1)) * 3
ans = ans + Val(Mid(List1.List(i), 8, 1)) * 2
ans = ans + Val(Mid(List1.List(i), 9, 1)) * 1
ans = ans + Val(Mid(List1.List(i), 10, 1)) * 1
If ans Mod 10 = 0 Then List2.AddItem "有"
Next i
If List2.ListCount <> 0 Then Print #2, "有" Else Print #2, "沒有"
Loop
Close #2
Close #1
End
End Sub
Sub AA(A) '挑出可檢查字串
For i = 1 To Len(A)
B = Mid(A, i, 1)
If B = "A" Or B = "B" Or B = "E" Then
sex = Val(Mid(A, i + 1, 1))
If IsNumeric(Mid(A, i + 1, 9)) = True And (sex = 1 Or sex = 2) Then List1.AddItem Mid(A, i, 10)
End If
Next i
End Sub
佑好,
回覆刪除程式正確。