سؤال

هل يعرف أي شخص كيفية التحقق من IMEI صالح؟

لقد وجدت وظيفة للتحقق من هذه الصفحة: http://www.dotnetfunda.com/articles/article597-iveiversin-in-vbnet-.aspx

لكنها تعود false لصالح IMEI الصالح (FE 352972024585360). يمكنني التحقق من صحةهم عبر الإنترنت في هذه الصفحة: http://www.numberingplans.com/؟page=analysis&sub=imeinr

ما هي الطريقة الصحيحة (في VB.NET) للتحقق مما إذا كانت IMEI معينة صالحة؟

ملاحظة: يجب أن تكون هذه الوظيفة من الصفحة أعلاه غير صحيحة بطريقة ما:

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

تعديل: هذا هو عملي "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
هل كانت مفيدة؟

المحلول

يتم التحقق من صحة أرقام IMEI باستخدام لوهن خوارزمية. تحتوي الصفحة المرتبطة على تطبيقات بلغات مختلفة. هذا المشنور لديه أيضًا عدد قليل من التطبيقات ومنهجية عامة حول كيفية القيام بحل خوارزمية Luhn.

نصائح أخرى

لا يحتوي IMEISV (إصدار برنامج IMEI) على رقم خوارزمية LUHN. بدلاً من ذلك ، يحتوي على رقم إصدار البرنامج مع رقمين. تم تطور تنسيق عدد IMEI منذ سنوات.

ويكيبيديا هو المصدر الجيد الذي أعتقد أن رؤية التغييرات في التنسيق حسب السنوات. إذا نظرت إلى تنسيق إصدار IMEI و IMEISV الجديد ، فسترى أن رمز التجميع النهائي (FAC) قد تمت إزالته وزيادة رمز التخصيص (TAC) في 8 أرقام. هناك مجانا وقوائم TAC التجارية موجودة على الإنترنت.

يمكن أن يكون خيارًا للتحقق من صحة رقم TAC من خلال البحث عن قوائم TAC أعلى التحقق من صحة خوارزمية Luhn لأرقام IMEI الجديدة والقديمة. بالنسبة لأرقام IMEI القديمة ، يجب التخلص من رقمين وينبغي أن يتم التحقق من صحة TAC لمدة 6 أرقام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top