I Techie SV

  • Aleatorio
  • Archivo
  • RSS
  • ¿alguna duda?

Verificar si el ICCID de un SIM card es correcto

SIM card

Dentro de mis labores diarias me topé con una incognita, ¿Cómo demonios puedo verificar si el ICCID de una SIM card, esta bien escrito? … bueno la respuesta es muy simple. Después de un rato de investigación me di cuenta que el algoritmo que utiliza el ICCID para calcular el digito de verificación o mejor conocido por su nombre en ingles: checksum digit; se llama algoritmo de Luhn, el cual les voy a explicar en simple y vulgar español.

Tomaremos como ejemplo el siguiente ICCID: 8950301211030316837 (el ultimo digito es el checksum digit); lo primero que tenemos que hacer es multiplicar por 2 un digito sí y un digito no, sin tomar en cuenta el 7 (de derecha a izquierda).

3   8   6   1  3  0  3  0  1  1  2  1  0  3  0  5  9   8
6   8  12  1  6  0  6  0  2  1  4  1  0  3  0  5  18  8 

Luego sumamos los digitos de las cifras de dos digitos (si al multiplicar 6 x 2 nos da 12; entonces sumamos 1 + 2) y nos queda:

3   8   6   1  3  0  3  0  1  1  2  1  0  3  0  5  9   8
6   8   3   1  6  0  6  0  2  1  4  1  0  3  0  5  9  8 = 63

Luego solo sumamos todos los dígitos de la siguiente manera:

63 + el digto de verificacion = 63 + 7 = 70

Al final hacemos una división entera para obtener el resto (Mod):

70 mod 10 = 0

Y si el resultado es 0, entonces el el ICCID es correcto. Acá les dejo el código que utilicé en Visual Basic 2010:

Function verifyICCID(ByVal ICCID As String, ByVal checksumDigit As Byte) As Boolean
        Dim ICCIDArray(ICCID.Length - 1) As Integer
        Dim sumatoria As Integer = 0

        For i As Integer = 0 To ICCID.Length - 1
            ICCIDArray(i) = ICCID.Substring(ICCID.Length - (i + 1), 1)
        Next

        For i As Integer = 0 To ICCIDArray.GetUpperBound(0) Step 2
            ICCIDArray(i) = ICCIDArray(i) * 2
        Next

        For Each numero As Integer In ICCIDArray
        
            If numero < 10 Then
                sumatoria += numero
            ElseIf numero >= 10 Then
                Dim n As String = numero.ToString()
                sumatoria += Convert.ToInt16(n.Substring(0, 1)) + Convert.ToInt16(n.Substring(1, 1))
            End If
        Next

        Return IIf((sumatoria + checksumDigit) Mod 10 = 0, True, False)

End Function

Fuente: Wikipedia

    • #SIM card
    • #programación
    • #visual basic
    • #ICCID
  • hace 1 año
  • 1
  • Enlace permanente
Share

URL corta

TwitterFacebookPinterestGoogle+

1 Notes/ Hide

  1. A krengi le gusta esto
  2. itechiesv ha publicado esto
← Anterior • Siguiente →

Acerca de Tumblr

Avatar Un poco de todo lo que tenga que ver con tecnología, especialmente lenguajes de programación =)

Me, Elsewhere

  • @pachinsv on Twitter
  • Facebook Profile
  • pachinsv on Youtube
  • pachinsv on Delicious
  • pachinsv on Grooveshark
  • Google
  • My Skype Info

Twitter

loading tweets…

Siguiendo

  • equipo
  • geekdtwo5

I Dig These Posts

Ver más →
  • Publicación vía geekdtwo5
    Zip Head Phones

    If you will for a moment, please turn your attention the every present battle against tangled headphone cords. These zipper designs...

    Publicación vía geekdtwo5
  • Foto vía scipsy

    (via Photos from DEPTHX-Zacatón Project)

    Best t-shirt ever?

    Foto vía scipsy
  • RSS
  • Aleatorio
  • Archivo
  • ¿alguna duda?
  • Móvil
Effector Theme by Pixel Union