Frage

Weiß jemand, wie man für eine gültige IMEI überprüfen?

Ich habe eine Funktion gefunden auf dieser Seite zu überprüfen: http : //www.dotnetfunda.com/articles/article597-imeivalidator-in-vbnet-.aspx

Aber es gibt false für gültige IMEI der (F. E. 352972024585360). Ich kann sie online auf dieser Seite bestätigen: http://www.numberingplans.com/?page = Analyse & sub = imeinr

Was ist der richtige Weg (in VB.Net) zu überprüfen, ob ein bestimmtes IMEI gültig ist?

PS: Diese Funktion von oben Seite muss in irgendeiner Weise falsch sein:

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

Bearbeiten : Das ist mein Arbeits "checkIMEI" -Funktion:

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
War es hilfreich?

Lösung

IMEI-Nummern validiert werden unter Verwendung der Luhn Algorithmus. Die verlinkte Seite hat Implementierungen in verschiedenen Sprachen. Dieser Beitrag hat auch noch ein paar Implementierungen und eine allgemeine Methodik, wie Sie gehen über den Luhn-Algorithmus zu lösen.

Andere Tipps

IMEISV (IMEI Software-Version) nicht Luhn-Algorithmus Prüfziffer. Stattdessen hat es Software-Versionsnummer mit zwei Ziffern dargestellt. Format der IMEI-Nummer wird von Jahren weiterentwickelt.

Wikipedia ist die gute Quelle Ich denke, die Änderungen im Format von Jahren zu sehen. Wenn Sie das neue IMEI und IMEISV Version Format aussehen, würden Sie sehen, dass Final Assembly-Code (FAC) wird entfernt und Type Allocation-Code (TAC) wurde die 8-stellige erhöht. Es gibt kostenlos und kommerzielle TAC Listen existieren im Internet.

könnte es eine Option, um Validate TAC Zahl durch Nachschlagen der TAC-Listen auf der Luhn-Algorithmus Validierung für neue und alte IMEI-Nummern. Für alte IMEI-Nummern FAC als 2-stellige verworfen werden sollte und TAC Validierung sollte für 6 Stellen durchgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top