2010-03-25 48 views
5

Geçerli bir IMEI'yi nasıl kontrol edeceğinizi bilen var mı?Geçerli olduğunu kontrol edin IMEI

bu sayfada kontrol etmek için bir fonksiyon bulduk: http://www.dotnetfunda.com/articles/article597-imeivalidator-in-vbnet-.aspx

Ama geçerli IMEI en (F. E. 352972024585360) için false döndürür. Bu sayfada çevrimiçi olarak doğrulayabilir: http://www.numberingplans.com/?page=analysis&sub=imeinr

verilen bir IMEI geçerli olup olmadığını kontrol etmek (VB.Net'te) doğru yolu nedir?

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: sayfasından yukarıdan Bu fonksiyon bir şekilde yanlış olmalıdır

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

Aynı problemim var! Yeni bir telefonun kutusunda taranan IMEI numaraları hem VBA validator rutine (hem de Wikipedia'dan alınan link) ve dotnetfunda.com sayfanız tarafından reddedilir. Bu konuda haberin var mı? –

+0

Soruyu düzenledim ve çözümüme ekledim. –

cevap

9

IMEI numaraları şunlardır: Bu benim çalışma "checkIMEI" -Fonksiyon olduğunu Luhn algoritması kullanılarak doğrulandı. Bağlantılı sayfada çeşitli dillerde uygulamalar var.

+0

İpucu için teşekkürler. –

İlgili konular