Cómo detectar si una tarjeta de crédito es válida

En una aplicación de comercio electrónico o una aplicación que necesite validar el número de una tarjeta de crédito, se puede hacer uso del algoritmo ISO 2894. Este algoritmo permite comprobar que la numeración de la tarjeta es correcta, pero obviamente no indica si la tarjeta sigue siendo válida (no ha sido anulada, ha caducado, etc.).

A continuación, se muestra el código Visual Basic para comprobar la validez en la numeración de una tarjeta de crédito:

1.- Crea un nuevo proyecto en Visual Basic y añade una caja de texto y un botón.

2.- Pega el siguiente código:

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' EsCCValido
'
' Valida la tarjeta de crédito de acuerdo con el algoritmo ISO 2894
' El algoritmo es:
' 1. Calcular el peso para el primer dígito: si el número de dígitos
'    es par el primer peso es 2 de lo contrario es 1. Después los
'    pesos alternan entre 1, 2, 1, 2, 1 ...
' 2. Multiplicar cada dígito por su peso
' 3. Si el resultado del 2º paso es mayor que 9, restar 9
' 4. Sumar todos los dígitos
' 5. Comprobar que el resultado es divisible por 10
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function EsCCValido(sTarjeta As String) As Boolean
    Dim iPeso As Integer
    Dim iDigito As Integer
    Dim iSuma As Integer
    Dim iContador As Integer
    Dim sNuevaTarjeta As String
    Dim cCaracter As String * 1

    iPeso = 0
    iDigito = 0
    iSuma = 0
    
    'Reemplazar cualquier no digito por una cadena vacía
    For iContador = 1 To Len(sTarjeta)
        cCaracter = Mid(sTarjeta, iContador, 1)
        If IsNumeric(cCaracter) Then
            sNuevaTarjeta = sNuevaTarjeta & cCaracter
        End If
    Next iContador
    
    ' Si es 0 devolver Falso
    If sNuevaTarjeta = 0 Then
        EsCCValido = False
        Exit Function
    End If
        
    ' Si el número de dígitos es par el primer peso es 2, de lo
    ' contrario es 1
    If (Len(sNuevaTarjeta) Mod 2) = 0 Then
        iPeso = 2
    Else
        iPeso = 1
    End If
    
    For iContador = 1 To Len(sNuevaTarjeta)
        iDigito = Mid(sNuevaTarjeta, iContador, 1) * iPeso
        If iDigito > 9 Then iDigito = iDigito - 9
        iSuma = iSuma + iDigito
        ' Cambiar peso para el siguiente dígito
        If iPeso = 2 Then
            iPeso = 1
        Else
            iPeso = 2
        End If
    Next iContador
    
    ' Devolver verdadero si la suma es divisible por 10
    If (iSuma Mod 10) = 0 Then
        EsCCValido = True
    Else
        EsCCValido = False
    End If
End Function
Private Sub btnComprobarCC_Click()
    If EsCCValido(Text1) Then
        MsgBox "Tarjeta válida"
    Else
        MsgBox "Tarjeta inválida"
    End If
End Sub

3.- Ejecuta la aplicación. En la caja de texto introduce el número de la tarjeta de crédito y pulsa el botón de comprobación. Puedes probar con 4242 4242 4242 4242 que es un número válido.

NOTA: No sé el origen de este código, alguien me lo paso, pero no tengo el remitente, lo siento.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s