【試題編號】11900-940306
【題目】身分證號碼檢查
【說明】
某公司要申請薪資扣繳資料時,為了避免資料登入錯誤的狀況,要先檢查檔案
資料內的身分證號碼是否正確。請依題意及以下功能動作要求,設計一程式處
理之。
(詳細身分證檢查錯誤之方法請參考題目說明^^)

(本題須新增使用元件Microsoft FlexGrid Control 6.0)
Private Sub Form_Load() 當表單載入時執行
msf.Cols = 5  設定為5行
msf.Row = 0  數從0開始算
msf.Col = 1: msf.Text = "ID NO"  設定1~4行的標題文字
msf.Col = 2: msf.Text = "NAME"
msf.Col = 3: msf.Text = "SEX"
msf.Col = 4: msf.Text = "ERROR"

Open App.Path & "\940306.sm" For Input As #6 開啟資料檔
Do Until EOF(6)  執行資料檔直到資料讀完
Input #6, no, na, s  讀出3組資料
msf.Rows = msf.Rows + 1 總列數為列數+1
msf.Row = msf.Rows - 1  目前列數為總列數-1
msf.Col = 1: msf.Text = no: msf.ColWidth(1) = 1200  輸出1~4行的資料內容,並依資料長度設定格子寬度
msf.Col = 2: msf.Text = na
msf.Col = 3: msf.Text = s
msf.Col = 4: msf.Text = idchk(no, s): msf.ColWidth(4) = 2000
Loop 重複循環
Close #6 關閉檔案
msf.Col = 1: msf.Sort = 5  依據第五行排序
End Sub

以下為確認身分證資料正確與否資料代號↓
Function idchk(idv, settype)
Dim s As String
Dim i As Integer
Dim x1, x2 As Integer
Dim sum As Integer

判斷格式錯誤
s = Mid(idv, 1, 1) 使用mid函數獲得資料
If ((Len(idv) < 10) Or s < "A" Or s > "Z") Then 判斷身份證長度,和英文是否符合
idchk = "FORMAT ERROR" 若不符合則傳回FORMAT ERROR
Exit Function 結束
End If

判斷3~10內是否有非1~9的資料
For i = 3 To 10  範圍從3到10
If ((Mid(idv, i, 1) > "9") Or (Mid(idv, i, 1) < "0")) Then  判斷第3~9個數字是否正確
idchk = "FORMAT ERROR" 若不符合則傳回FORMAT ERROR
Exit Function 結束
End If
Next

判斷是否性別錯誤
s = Mid(idv, 2, 1) 取第2個數字
If Not ((s = "1" And settype = "M") Or (s = "2" And settype = "F")) Then
若1時不是男生或者2時不是女生
idchk = "SEX CODE ERROR"  若不符合則傳回SEX CODE ERROR
Exit Function  結束
End If


計算結果:身份證首字
i = InStr("ABCDEFGHJKLMNPQRSTUVXYWZIO", Left(idv, 1)) + 9  left函數表示 擷取字串左邊幾位
x1 = (i \ 10) 獲得商
x2 = (i Mod 10) 獲得餘數

Right函數 表示 擷取字串中 右邊 幾位, Val函數 表示 將字串轉成數字

sum = x1 + 9 * x2 + Val(Right(idv, 1))
計算剩下資料的和
For i = 2 To 9
sum = sum + (10 - i) * Val(Mid(idv, i, 1))
Next
If ((sum Mod 10) = 0) Then
idchk = "" 如果可以被10整除,結果是對的,所以結果不顯現

Else
idchk = "CHECK SUM ERROR"  若不符合則傳回CHECK SUM ERROR
End If
End Function 結束

列印結果:
 11.bmp

arrow
arrow
    全站熱搜

    薰斐♥ 發表在 痞客邦 留言(0) 人氣()