none
Validação de CPF e CNPJ

    Question

  • Bom dia galera blz?

    Bem toh querendo fazeh uma coisa a dias e nada, tenho uma tabela com cadastro de clientes onde tem nome, cpf, rg etc, e dessa tabela tem um formulário, ond na opção cpf gosria de uma validação, onde c o usuário digitar um número errado ele deh a mensagem número inválido e continue no mesmo campo c for o numero certo e vá para o próximo campo, e gostaria d saber isso com o cnpj, e tb tem q ser uma máscara d entrada q esteja ativada no word, uso o access 2007.


    Desde jah agradeço, Obrigado
    Friday, December 22, 2006 12:12 PM

Answers

  • Oi csfab,

     

    seguem as rotinas de validação de CPF e CNPJ:

     

    Option Compare Database
    Option Explicit

    '******************************************
    'Rotinas para cálculo de dígito verificador
    'e validação de CNPJ e CPF
    'Autor: Luiz Cláudio C. V. Rocha
    '******************************************

    Public Function fDigCNPJ(CNPJ As String) As String
    'Calcula os dígitos verificadores do CNPJ
    Dim I As Integer
    Dim intFator As Integer
    Dim intTotal As Integer
    Dim intResto

    'Verifica se tem 12 ou 14 dígitos
    If Not (Len(CNPJ) = 12 Or Len(CNPJ) = 14) Then
        Exit Function
    Else
        'Verifica se é numérico
        If Not IsNumeric(CNPJ) Then
            Exit Function
        Else
            'Trunca o CNPJ em 12 caracteres
            CNPJ = Left$(CNPJ, 12)
        End If
    End If

    Inicio:
    'Percorre as colunas (de trás para frente),
    'multiplicando por seus respectivos fatores
    intFator = 2
    intTotal = 0
    For I = Len(CNPJ) To 1 Step -1
        If intFator > 9 Then intFator = 2
        intTotal = intTotal + ((CInt(Mid(CNPJ, I, 1)) * intFator))
        intFator = intFator + 1
    Next I

    'Obtém o resto da divisão por 11
    I = intTotal Mod 11
    'Subtrai 11 do resto
    I = 11 - I
    'O dígito verificador é i
    If I = 10 Or I = 11 Then I = 0
    'Concatena ao CNPJ
    CNPJ = CNPJ & CStr(I)

    If Len(CNPJ) = 13 Then
        'Calcula o segundo dígito
        GoTo Inicio
    End If

    'Retorna os dígitos verificadores
    fDigCNPJ = Right$(CNPJ, 2)
    End Function

    Public Function fDigCPF(CPF As String) As String
    'Calcula os dígitos verificadores do CPF
    Dim I As Integer
    Dim intFator As Integer
    Dim intTotal As Integer
    Dim intResto

    'Verifica se tem 9 ou 11 dígitos
    If Not (Len(CPF) = 9 Or Len(CPF) = 11) Then
        Exit Function
    Else
        'Verifica se é numérico
        If Not IsNumeric(CPF) Then
            Exit Function
        Else
            'Trunca o CPF em 9 caracteres
            CPF = Left$(CPF, 9)
        End If
    End If

    Inicio:
    'Percorre as colunas (de trás para frente),
    'multiplicando por seus respectivos fatores
    intFator = 2
    intTotal = 0
    For I = Len(CPF) To 1 Step -1
        intTotal = intTotal + ((CInt(Mid(CPF, I, 1)) * intFator))
        intFator = intFator + 1
    Next I

    'Obtém o resto da divisão por 11
    I = intTotal Mod 11
    'Subtrai 11 do resto
    I = 11 - I
    'O dígito verificador é i
    If I = 10 Or I = 11 Then I = 0
    'Concatena ao CPF
    CPF = CPF & CStr(I)

    If Len(CPF) = 10 Then
        'Calcula o segundo dígito
        GoTo Inicio
    End If

    'Retorna os dígitos verificadores
    fDigCPF = Right$(CPF, 2)
    End Function

    Public Function fCNPJ(CNPJ As String) As Boolean
    'Verifica se o CNPJ é válido
    Dim strChar As String

    'Verifica se tem 14 caracteres
    If Not Len(CNPJ) = 14 Then
        fCNPJ = False
        Exit Function
    End If

    'Verifica se o dígito verificador confere
    strChar = Mid$(CNPJ, 13, 2)
    If fDigCNPJ(CNPJ) = strChar Then
        fCNPJ = True
    Else
        fCNPJ = False
    End If
    End Function

    Public Function fCPF(CPF As String) As Boolean
    'Verifica se o CPF é válido
    Dim strChar As String

    'Verifica se tem 11 caracteres
    If Not Len(CPF) = 11 Then
        fCPF = False
        Exit Function
    End If

    'Verifica se o dígito verificador confere
    strChar = Mid$(CPF, 10, 2)
    If fDigCPF(CPF) = strChar Then
        fCPF = True
    Else
        fCPF = False
    End If
    End Function

    Saturday, December 23, 2006 12:28 PM

All replies

  • Oi csfab,

     

    seguem as rotinas de validação de CPF e CNPJ:

     

    Option Compare Database
    Option Explicit

    '******************************************
    'Rotinas para cálculo de dígito verificador
    'e validação de CNPJ e CPF
    'Autor: Luiz Cláudio C. V. Rocha
    '******************************************

    Public Function fDigCNPJ(CNPJ As String) As String
    'Calcula os dígitos verificadores do CNPJ
    Dim I As Integer
    Dim intFator As Integer
    Dim intTotal As Integer
    Dim intResto

    'Verifica se tem 12 ou 14 dígitos
    If Not (Len(CNPJ) = 12 Or Len(CNPJ) = 14) Then
        Exit Function
    Else
        'Verifica se é numérico
        If Not IsNumeric(CNPJ) Then
            Exit Function
        Else
            'Trunca o CNPJ em 12 caracteres
            CNPJ = Left$(CNPJ, 12)
        End If
    End If

    Inicio:
    'Percorre as colunas (de trás para frente),
    'multiplicando por seus respectivos fatores
    intFator = 2
    intTotal = 0
    For I = Len(CNPJ) To 1 Step -1
        If intFator > 9 Then intFator = 2
        intTotal = intTotal + ((CInt(Mid(CNPJ, I, 1)) * intFator))
        intFator = intFator + 1
    Next I

    'Obtém o resto da divisão por 11
    I = intTotal Mod 11
    'Subtrai 11 do resto
    I = 11 - I
    'O dígito verificador é i
    If I = 10 Or I = 11 Then I = 0
    'Concatena ao CNPJ
    CNPJ = CNPJ & CStr(I)

    If Len(CNPJ) = 13 Then
        'Calcula o segundo dígito
        GoTo Inicio
    End If

    'Retorna os dígitos verificadores
    fDigCNPJ = Right$(CNPJ, 2)
    End Function

    Public Function fDigCPF(CPF As String) As String
    'Calcula os dígitos verificadores do CPF
    Dim I As Integer
    Dim intFator As Integer
    Dim intTotal As Integer
    Dim intResto

    'Verifica se tem 9 ou 11 dígitos
    If Not (Len(CPF) = 9 Or Len(CPF) = 11) Then
        Exit Function
    Else
        'Verifica se é numérico
        If Not IsNumeric(CPF) Then
            Exit Function
        Else
            'Trunca o CPF em 9 caracteres
            CPF = Left$(CPF, 9)
        End If
    End If

    Inicio:
    'Percorre as colunas (de trás para frente),
    'multiplicando por seus respectivos fatores
    intFator = 2
    intTotal = 0
    For I = Len(CPF) To 1 Step -1
        intTotal = intTotal + ((CInt(Mid(CPF, I, 1)) * intFator))
        intFator = intFator + 1
    Next I

    'Obtém o resto da divisão por 11
    I = intTotal Mod 11
    'Subtrai 11 do resto
    I = 11 - I
    'O dígito verificador é i
    If I = 10 Or I = 11 Then I = 0
    'Concatena ao CPF
    CPF = CPF & CStr(I)

    If Len(CPF) = 10 Then
        'Calcula o segundo dígito
        GoTo Inicio
    End If

    'Retorna os dígitos verificadores
    fDigCPF = Right$(CPF, 2)
    End Function

    Public Function fCNPJ(CNPJ As String) As Boolean
    'Verifica se o CNPJ é válido
    Dim strChar As String

    'Verifica se tem 14 caracteres
    If Not Len(CNPJ) = 14 Then
        fCNPJ = False
        Exit Function
    End If

    'Verifica se o dígito verificador confere
    strChar = Mid$(CNPJ, 13, 2)
    If fDigCNPJ(CNPJ) = strChar Then
        fCNPJ = True
    Else
        fCNPJ = False
    End If
    End Function

    Public Function fCPF(CPF As String) As Boolean
    'Verifica se o CPF é válido
    Dim strChar As String

    'Verifica se tem 11 caracteres
    If Not Len(CPF) = 11 Then
        fCPF = False
        Exit Function
    End If

    'Verifica se o dígito verificador confere
    strChar = Mid$(CPF, 10, 2)
    If fDigCPF(CPF) = strChar Then
        fCPF = True
    Else
        fCPF = False
    End If
    End Function

    Saturday, December 23, 2006 12:28 PM
  • Boas,

    No meu blog, publiquei uma função que faz exatamente o que vc precisa, para ambos os casos, de uma olhada se ajuda!

     

    Monday, August 06, 2007 10:16 AM
  • Luiz,

     

    Gostaria de saber se esse código funciona também para um formulário do excel e que contém os dados de registro de usuários em uma sheet e o CPF é informado atravéz de um textbox de um formulário.

    Pergunto pq utilizei esse código, porém, quando o CPF é um número válido ele não responde.

     

    Obrigado

     

    Thursday, August 16, 2007 4:40 PM
  • ola pessoal
    por favor alguem pode me ajudar a achar um codigo para validar cnpj no HB++ para palm top
    a linguagem  no hb++ é vb
    obrigado.
    Tuesday, February 26, 2008 11:46 PM