none
Erro algoritmo de Luhn - Verificar CC RRS feed

  • Pergunta

  • Estou tentando validar cartões de crédito antes de enviados para a db, porém o código falha com alguns cartões, válidos.

    Dim multiplo As Integer
        Private Function CheckCC(ByVal cc As String) As String
            Dim validade As Boolean
            Dim z, x, c, v, b, n, m As Integer
            Dim contado1, contador2, contador3 As String
            z = cc.Substring(0, 1)
            x = cc.Substring(2, 1)
            c = cc.Substring(5, 1)
            v = cc.Substring(7, 1)
            b = cc.Substring(9, 1)
            n = cc.Substring(11, 1)
            m = cc.Substring(13, 1)
            '--------------------------------------/
            contado1 = z * 2
            If contado1.Length = 2 Then
                Dim v1, v2 As Integer
                v1 = contado1.Substring(0, 1)
                v2 = contado1.Substring(1, 1)
                z = Val(v1) + (v2)
            Else
                z = contado1
            End If
            contado1 = 0
            '--------------------------------------/
            contado1 = x * 2
            If contado1.Length = 2 Then
                Dim v1, v2 As Integer
                v1 = contado1.Substring(0, 1)
                v2 = contado1.Substring(1, 1)
                x = Val(v1) + (v2)
            Else
                x = contado1
            End If
            contado1 = 0
            '--------------------------------------/
            contado1 = c * 2
            If contado1.Length = 2 Then
                Dim v1, v2 As Integer
                v1 = contado1.Substring(0, 1)
                v2 = contado1.Substring(1, 1)
                c = Val(v1) + (v2)
            Else
                c = contado1
            End If
            contado1 = 0
            '--------------------------------------/
            contado1 = v * 2
            If contado1.Length = 2 Then
                Dim v1, v2 As Integer
                v1 = contado1.Substring(0, 1)
                v2 = contado1.Substring(1, 1)
                v = Val(v1) + (v2)
            Else
                v = contado1
            End If
            contado1 = 0
            '--------------------------------------/
            contado1 = b * 2
            If contado1.Length = 2 Then
                Dim v1, v2 As Integer
                v1 = contado1.Substring(0, 1)
                v2 = contado1.Substring(1, 1)
                b = Val(v1) + (v2)
            Else
                b = contado1
            End If
            contado1 = 0
            '--------------------------------------/
            contado1 = n * 2
            If contado1.Length = 2 Then
                Dim v1, v2 As Integer
                v1 = contado1.Substring(0, 1)
                v2 = contado1.Substring(1, 1)
                n = Val(v1) + (v2)
            Else
                n = contado1
            End If
            contado1 = 0
            '--------------------------------------/
            contado1 = m * 2
            If contado1.Length = 2 Then
                Dim v1, v2 As Integer
                v1 = contado1.Substring(0, 1)
                v2 = contado1.Substring(1, 1)
                m = Val(v1) + (v2)
            Else
                m = contado1
            End If
            contado1 = 0
            'soma total
            contado1 = z + x + c + v + b + n + m
            MsgBox(contado1)
            '--------------------------------------/
            Dim a, s, d, f, g, h, j, k As Integer
            a = cc.Substring(1, 1)
            s = cc.Substring(3, 1)
            d = cc.Substring(4, 1)
            f = cc.Substring(6, 1)
            g = cc.Substring(8, 1)
            h = cc.Substring(10, 1)
            j = cc.Substring(12, 1)
            k = cc.Substring(14, 1)
            'soma total
            contador2 = a + s + d + f + g + h + j + k
            contador3 = Val(contado1) + (contador2)
            '-----------localizar multiplo de 10----/
            multiplo = contador3
            Do
                multiplo = multiplo + 1
                If (multiplo Mod 10 = 0) Then
                    Exit Do
                End If
            Loop
            MsgBox(Val(multiplo) - (contador3))
            If cc.Substring(15, 1) = Val(multiplo) - (contador3) Then
                validade = True
                'valido
            ElseIf cc.Substring(15, 1) <> Val(multiplo) - (contador3) Then
                validade = False
                'invalido
            End If
            Return validade
        End Function

    segunda-feira, 12 de setembro de 2016 03:45

Respostas

  • Bom dia Tiago.SP,

    Tudo bem?

    Você já debugou o código?

    Qual ou quais os erros apresentados, em qual linha eles são acusados?

    Por favor nos providencie mais informações para podermos lhe auxiliar melhor.

    Abraço.


    Thales F Quintas

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    TechNet Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 12 de setembro de 2016 12:24

Todas as Respostas

  • Bom dia Tiago.SP,

    Tudo bem?

    Você já debugou o código?

    Qual ou quais os erros apresentados, em qual linha eles são acusados?

    Por favor nos providencie mais informações para podermos lhe auxiliar melhor.

    Abraço.


    Thales F Quintas

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    TechNet Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 12 de setembro de 2016 12:24
  • Bom dia,

    Devido a falta de resposta do usuário

    essa thread está sendo fechada.

    Se o problema ainda estiver ocorrendo,

    favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 15 de setembro de 2016 12:21
    Moderador