Có ai biết cách kiểm tra IMEI hợp lệ không?Kiểm tra IMEI hợp lệ
Tôi đã tìm thấy một chức năng để kiểm tra trên trang này: http://www.dotnetfunda.com/articles/article597-imeivalidator-in-vbnet-.aspx
Nhưng nó trả false
cho hợp lệ IMEI của (f.e. 352972024585360
). Tôi có thể xác thực chúng trực tuyến trên trang này: http://www.numberingplans.com/?page=analysis&sub=imeinr
Cách chính xác (trong VB.Net) để kiểm tra xem IMEI nhất định có hợp lệ không?
PS: Chức năng này từ trên trang phải không chính xác trong một cách nào đó:
Public Shared Function isImeiValid(ByVal IMEI As String) As Boolean
Dim cnt As Integer = 0
Dim nw As String = String.Empty
Try
For Each c As Char In IMEI
cnt += 1
If cnt Mod 2 <> 0 Then
nw += c
Else
Dim d As Integer = Integer.Parse(c) * 2 ' Every Second Digit has to be Doubled '
nw += d.ToString() ' Genegrated a new number with doubled digits '
End If
Next
Dim tot As Integer = 0
For Each ch As Char In nw.Remove(nw.Length - 1, 1)
tot += Integer.Parse(ch) ' Adding all digits together '
Next
Dim chDigit As Integer = 10 - (tot Mod 10) ' Finding the Check Digit my Finding the Remainder of the sum and subtracting it from 10 '
If chDigit = Integer.Parse(IMEI(IMEI.Length - 1)) Then ' Checking the Check Digit with the last digit of the Given IMEI code '
Return True
Else
Return False
End If
Catch ex As Exception
Return False
End Try
End Function
EDIT: Đây là làm việc của tôi "checkIMEI" -Function:
sốPublic Shared Function checkIMEI(ByRef IMEI As String) As Boolean
Const allowed As String = ""
Dim cleanNumber As New System.Text.StringBuilder
For i As Int32 = 0 To IMEI.Length - 1
If (allowed.IndexOf(IMEI.Substring(i, 1)) >= 0) Then
cleanNumber.Append(IMEI.Substring(i, 1))
End If
Next
If cleanNumber.Length <> 15 Then
Return False
Else
IMEI = cleanNumber.ToString
End If
For i As Int32 = cleanNumber.Length + 1 To 16
cleanNumber.Insert(0, "0")
Next
Dim multiplier As Int32, digit As Int32, sum As Int32, total As Int32 = 0
Dim number As String = cleanNumber.ToString()
For i As Int32 = 1 To 16
multiplier = 1 + (i Mod 2)
digit = Int32.Parse(number.Substring(i - 1, 1))
sum = digit * multiplier
If (sum > 9) Then
sum -= 9
End If
total += sum
Next
Return (total Mod 10 = 0)
End Function
Tôi có cùng một vấn đề! Số IMEI được quét trên hộp của một chiếc điện thoại mới bị từ chối bởi cả quy trình xác nhận VBA của tôi (được lấy từ liên kết Wikipedia cho vb) và bởi trang dotnetfunda.com của bạn. Bạn có tin gì về điều này không? –
tôi đã chỉnh sửa câu hỏi của mình và thêm giải pháp của mình. –