2010-03-25 4 views
5

Est-ce que quelqu'un sait comment vérifier un IMEI valide?Vérifier l'IMEI valide

J'ai trouvé une fonction pour vérifier cette page: http://www.dotnetfunda.com/articles/article597-imeivalidator-in-vbnet-.aspx

Mais il retourne false för valide IMEI (le F.E. 352972024585360). Je peux les valider en ligne sur cette page: http://www.numberingplans.com/?page=analysis&sub=imeinr

Quelle est la bonne façon (dans VB.Net) de vérifier si un IMEI donné est valide?

PS: Cette fonction ci-dessus de la page doit être incorrecte d'une certaine façon:

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: Ceci est mon travail "CheckIMEI" -Function:

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

J'ai le même problème! Les numéros IMEI scannés sur la boîte d'un nouveau téléphone sont refusés à la fois par mon programme de validation VBA (tiré du lien Wikipédia pour vb) et par votre page dotnetfunda.com. Avez-vous des nouvelles à ce sujet? –

+0

J'ai modifié ma question et ajouté ma solution. –

Répondre

9

IMEI sont validée en utilisant l'algorithme Luhn. La page liée a des implémentations dans plusieurs langues.

+0

Merci pour l'indice. –

Questions connexes