public Function CheckIDCard18(ByVal idNumber As String) As Boolean
Dim n As Long = 0
If Long.TryParse(idNumber.Remove(17), n) = False OrElse n < Math.Pow(10, 16) OrElse Long.TryParse(idNumber.Replace("x"c, "0"c).Replace("X"c, "0"c), n) = False Then
Return False
End If
Dim address As String = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"
If address.IndexOf(idNumber.Remove(2)) = -1 Then
Return False
End If
Dim birth As String = idNumber.Substring(6, 8).Insert(6, "-").Insert(4, "-")
Dim time As DateTime = New DateTime()
If DateTime.TryParse(birth, time) = False Then
Return False
End If
Dim arrVarifyCode As String() =("1,0,x,9,8,7,6,5,4,3,2").Split(","c)
Dim Wi As String() =("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(","c)
Dim Ai As Char() = idNumber.Remove(17).ToCharArray()
Dim sum As Integer = 0
For i As Integer = 0 To 17 - 1
sum += Integer.Parse(Wi(i)) * Integer.Parse(Ai(i).ToString())
Next
Dim y As Integer = -1
Math.DivRem(sum, 11, y)
If arrVarifyCode(y) <> idNumber.Substring(17, 1).ToLower() Then
Return False
End If
Return True
End Function