2010-03-25 6 views
5

Кто-нибудь знает, как проверить действительный IMEI?Проверить действительные IMEI

Я нашел функцию, чтобы проверить на этой странице: http://www.dotnetfunda.com/articles/article597-imeivalidator-in-vbnet-.aspx

Но она возвращает false для действительного IMEI в (F.E. 352972024585360). Я могу подтвердить их онлайн на этой странице: http://www.numberingplans.com/?page=analysis&sub=imeinr

Каков правильный способ (в VB.Net) проверить, действительно ли данный IMEI действителен?

PS: Эта функция сверху страницы должны быть неправильным в некотором роде:

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: Это мой рабочий "checkIMEI" -Функция:

номера
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 
+0

У меня такая же проблема! Номера IMEI, отсканированные на ящике нового телефона, отклоняются как моей процедурой валидации VBA (взятой из ссылки Википедии для vb), так и вашей страницей dotnetfunda.com. У вас есть новости об этом? –

+0

Я отредактировал мой вопрос и добавил свое решение. –

ответ

9

IMEI являются с использованием алгоритма Luhn. Связанная страница имеет реализации на разных языках.

+0

Спасибо за подсказку. –