Question

Quelqu'un sait-il comment vérifier une 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 pour (F.E. de 352972024585360) valide de IMEI. Je peux les valider en ligne sur cette page: http://www.numberingplans.com/?page = analyse & sub = imeinr

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

PS: Cette fonction ci-dessus de la page doit être incorrect 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 -Function "CheckIMEI":

Public Shared Function checkIMEI(ByRef IMEI As String) As Boolean
    Const allowed As String = "0123456789"

    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
Était-ce utile?

La solution

numéros IMEI sont validés à l'aide du Luhn algorithme. La page liée a mises en œuvre dans différentes langues. Ce message a aussi quelques autres mises en œuvre et une méthodologie générale sur la façon dont pour aller sur la résolution de l'algorithme Luhn.

Autres conseils

IMEISV (version du logiciel IMEI) n'a pas Luhn algorithme chiffre de contrôle. Au lieu de cela, il dispose d'un logiciel numéro de version présentée avec deux chiffres. Format du numéro IMEI a évolué par année.

Wikipédia est la bonne source, je pense voir les changements au format des années. Si vous regardez le nouveau format de la version IMEI et IMEISV, vous verriez que Final code Assemblée (FAC) a supprimé et Type Code d'allocation (TAC) a été augmenté le 8 chiffres. Il y a listes libre et TAC commerciales existent sur Internet.

il pourrait être une option pour valider le numéro de TAC en consultant les listes de TAC sur la validation de l'algorithme Luhn nouveaux et anciens numéros IMEI. Pour les anciens numéros IMEI FAC comme deux chiffres devrait être mis au rebut et la validation des TAC doit être fait pour 6 chiffres.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top