2016年10月21日 星期五

Z2A練習:M1P31

M1P31 101P31 身份證檢查

    Dim tno() = {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}
               ‘  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
    Function M1P31(ByVal pid As String) As String
        If (pid.Length <> 10) Then Return "F" ' 10 個字元
        Dim c As Char = Mid(pid, 1, 1)
        ' 是否為英文字母
        If c < "A" Or c > "Z" Then Return "F" '1個字為大寫字母
        Dim num As Integer = tno(Asc(c) - 65) '-Asc("A")  'A=0 tno()陣列找對應的
        Dim SUM As Integer = (num \ 10) * 1 + (num Mod 10) * 9
        c = Mid(pid, 2, 1)
        ' 是否為 1 2
        If c < "1" Or c > "2" Then Return "F" '2個字為 1 2
        SUM += (Asc(c) - 48) * 8
        For i = 3 To 9                     '3~9需數字
            c = Mid(pid, i, 1)
            If c < "0" Or c > "9" Then Return "F"
            SUM += (Asc(c) - 48) * (10 - i)  '分別乘 7 ~ 1
        Next
        c = Mid(pid, 10, 1)    '最後一個是檢查碼 ,再加上去可被10整除才對
        If c < "0" Or c > "9" Then Return "F"
        SUM += (Asc(c) - 48)
        If SUM Mod 10 = 0 Then Return "T" Else Return "F"
    End Function
----------------------
Integer 整數型別
String 字串型別
Char 字元型別
ByVal 傳值參數{主程式與副程式共用}
ByRef 傳址參數{主程式與副程式 共用}
字串.Length :字串的長度(字元數)
Mid(字串, m, n) 字串的第m個字起取 n
字元 A~ZASCII 65~90
  “0~9ASCII 48~57
Asc(字串) 字串的第1個字的Ascii

 
in1.txt
----------------------
3
M123456789
Y123456788
A223344556
----------------------
in2.txt
----------------------
3
R102345678
A108881111
B101111111
----------------------
out.txt
----------------------
T
T
F

T
F

T

Related Posts:

  • Z2A VB 變化題(找數字)1/3要測的變化題,預訂這兩天會補充上來  M2P11 找 S 字串中的阿拉伯數字    Function M2P11(ByVal S As String) As String         … Read More
  • Z2A練習:M2P11M2P11 : 102模P11 字串中的阿拉伯數字 參考程式碼:    Function M2P11(ByVal s As String) As String         Dim num = "" … Read More
  • Z2A練習:M5P01-smp1-11倍數 (1)類似題舉例1:判斷正整數0<N<1050是否可被 11 整除(因數字超過 Long型別)需使用字串處理 202914184810805067776 8239728901483491109728570834944 解題提示:奇數位的和 與 偶數位的和 是否為 11的倍數,是… Read More
  • Z2A vb 是否為15、33倍數 M5P01 判斷 S 是11的倍數、15的倍數、33的倍數  變位1   M5P01-1 是否15倍數 , 可以被5整除也可以被3整除     Function M5P01(ByVal s As String) As String … Read More
  • Z2A練習:M3P12 M3P12 : 103模P12 解二元一次方程式 參考程式碼    Function M3p12(ByVal s As String) As String         Dim dt() = s.S… Read More

0 意見:

張貼留言