- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 142
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2026-7-16
                
|
2#
發表於 2014-6-11 23:24
| 只看該作者
回復 1# tku0216
依照身分證字號規則驗證
非有效字號則排除
用一新陣列儲存正確字號- Option Explicit
- Sub ex()
- Dim A(0 To 4) As String, Ar() As String, i&, s&
- A(0) = "A123456789"
- A(1) = "B521632157"
- A(2) = "A001"
- A(3) = "A02"
- A(4) = "S512935123"
- For i = 0 To 4
- If Pass(A(i)) Then
- ReDim Preserve Ar(s)
- Ar(s) = A(i)
- s = s + 1
- End If
- Next
- MsgBox Join(Ar, Chr(10))
- End Sub
- Function Pass(Mystr As String) As Boolean '字號驗證
- Dim x, y%, k%, i%
- If Asc(Left(Mystr, 1)) < 65 Or Asc(Left(Mystr, 1)) > 90 Or Len(Mystr) <> 10 Then Pass = False: Exit Function
- k = Application.Match(Left(Mystr, 1), Array("A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "I", "O"), 0) + 9
- y = (k Mod 10) * 9 + Int(k / 10)
- x = Array(0, 0, 8, 7, 6, 5, 4, 3, 2, 1, 1)
- For i = 2 To Len(Mystr) - 1
- y = y + Val(Mid(Mystr, i, 1)) * x(i)
- Next
- Pass = 10 - (y Mod 10) = Val(Right(Mystr, 1))
- End Function
複製代碼 |
|