Verificação do CPF e do CNPJ
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Rotina para verificar se o CPF é válido
O CPF é um número formado por 11 algarismos, sendo que os dois últimos são de controle.
Vamos considerar este número de CPF 836.895.167- 49, como exemplo.
Para se calcular o número de controle do CPF, realizamos primeiro a soma, do seguinte quadro resultante:
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
8 | 3 | 6 | 8 | 9 | 5 | 1 | 6 | 7 |
80 | 27 | 48 | 56 | 54 | 25 | 4 | 18 | 14 |
80 + 27 + 48 + 56 + 54 + 25 + 4 + 18 + 14 = 326
Utilizando a fórmula abaixo, iremos encontrar o primeiro algarismo de controle.
11 - (326 mod 11) = 4
836.895.167- 49
Nota: caso a (soma mod 11) < 2 , o algarismo de controle assume o valor zero (0).
A partir daí, uma nova soma deve ser realizada, incluindo no quadro, o primeiro algarismo de controle encontrado. Veja:
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
8 | 3 | 6 | 8 | 9 | 5 | 1 | 6 | 7 | 4 |
88 | 30 | 54 | 64 | 63 | 30 | 5 | 24 | 21 | 8 |
88 + 30 + 54 + 64 + 63 + 30 + 5 + 24 + 21 + 8 = 387
Utilizando a fórmula abaixo, iremos encontrar o segundo algarismo de controle.
11 - (387 mod 11) = 9
836.895.167- 49
Nota: caso a (soma mod 11) < 2 , o algarismo de controle assume o valor zero (0).
Agora, observe atentamente, a montagem do código que realiza o cálculo de controle, demonstrado na seqüência acima:
Faça o login aqui para ter acesso ao código.
No evento Antes de Atualizar do campo CPF, utilize a função de verificação.
Private Sub CPF_BeforeUpdate(Cancel As Integer) If fncCpfValido(Me!CPF) = False Then MsgBox "CPF inválido...", vbInformation, "Aviso" Cancel = True End If End Sub
Rotina para verificar se o CNPJ é válido
O CNPJ é composto de 14 algarismos que são divididos em três blocos. No exemplo abaixo, esses blocos estão destacados através de cores:
03.144.633/0001-61
Os dois últimos algarismos, que estão em vermelho, correspondem ao Dígito Verificador. Para o cálculo do primeiro algarismo do Dígito Verificador, observe o quadro abaixo:
5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
0 | 3 | 1 | 4 | 4 | 6 | 3 | 3 | 0 | 0 | 0 | 1 |
0 | 12 | 3 | 8 | 36 | 48 | 21 | 18 | 0 | 0 | 0 | 2 |
Somamos o resultado do quadro:
0 + 12 + 3 + 36 + 48 + 21 + 18 + 0 + 0 + 0 + 2 = 148
O primeiro algarismo do Dígito Verificador é extraído da seguinte fórmula:
11 - (148 mod 11) = 6
Nota: caso a (soma mod 11) < 2, o algarismo do Dígito Verificador assume o valor zero (0).
Para o cálculo do último algarismo, remontamos a grade, incluindo o primeiro algarismo calculado:
6 | 5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
0 | 3 | 1 | 4 | 4 | 6 | 3 | 3 | 0 | 0 | 0 | 1 | 6 |
0 | 15 | 4 | 12 | 8 | 54 | 24 | 21 | 0 | 0 | 0 | 3 | 12 |
Somamos os resultados obtidos da grade:
0 + 15 + 4 + 12 + 8 + 54 + 24 + 21 + 0 + 0 + 0 + 3 + 12 = 153
O segundo algarismo do Dígito Verificador é extraído da seguinte fórmula:
11 - (153 mod 11 ) = 1
Nota: caso a (soma mod 11) < 2, o algarismo do Dígito Verificador assume o valor zero (0).
Observe atentamente, a montagem do código que realiza o cálculo do Dígito Verificador, conforme demonstrado na seqüência acima:
Faça o login aqui para ter acesso ao código.
No evento Antes de Atualizar do campo CNPJ, utilize a função de verificação.
Private Sub CNPJ_BeforeUpdate(Cancel As Integer) If fncCnpjValido(Me!CNPJ) = False Then MsgBox "CNPJ inválido...", vbInformation, "Aviso" Cancel = True End If End Sub
Download
Baixe aqui um aplicativo exemplo, para você testar na prática, as funções propostas.
Sucesso!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Vídeo - Criando Ribbons parte 1 - Conhecendo a estrutura Xml
16 comentários Mario Luiz Duarfte Ribeiro 28/01/2023 12:43:15 Eu consegui fazer a maskara para trazer o CPF ou CNPJ dependendo da Natureza do cliente se Fisica ou Juridica. Eu queria incluir nesta maskara a função para validar tanto o cpf, como o cnpj. Voce pode me ajudar. Obrigado Marcio Morvan da Silva Jr 09/11/2022 15:45:43 Boa tarde pessoal. Fiz este teste de Verificador de CPF e deu certo. Só que tem um porém. Quando você coloca algum CPF que não é correto, dai vem a Msgbox dizendo que está errado. Quando você apaga e deixa o campo zerado (Null) ele dá erro e precisa depurar. Existe algum comando para que este erro seja anulado quando o campo estiver Null? Obrigado! Robson Oliveira dos Santos 22/06/2022 16:44:06 Já cadastrado e criado topico em 'Off'. Caso tenha criado em local inadequado, por favor, faça a devida correção. Avelino sampaio 22/06/2022 05:10:08 Robson, se inscreva no nosso fórum e abra um tópico sobre este assunto. Lá poderei te ajudar de forma mais efetiva. http://www.redeaccess.com.br Te aguardo Robson Oliveira dos Santos 21/06/2022 17:17:40 Avelino, boa tarde! Acompanho suas aulas ja ha algum tempo e me apareceu uma duvido em um projeto. Utilizo o verificador de CPF/CNPJ com sucesso, mas esbarrei em uma outra verificação necessária: a do Titulo de Eleitor! Um companheiro, em um comentário acima, dispôs um código, no entanto não parece estar funcionando a contento. Poderia comentar se testou e disponibilizar mais detalhes. Obs.: peço por esse canal, por que nao tenho acesso ao contato do citado comentador (Marcio Melo). Grato William Pereira 20/03/2022 13:06:45 Eu de novo! Eu copiei os códigos para CPF e CNPJ, colocando cada um dentro de um módulo. Depois nos campos respectivos de CPF e CNPJ, nos seus respectivos formulários, eu copiei os códigos recomendados para Antes de Atualizar. Não funcionou. Fica dando a seguinte mensagem: O Microsoft Access não pode localizar o objeto 'Private Sub CPF_BeforeUpdate(cancel As Integer) If fncCpfValido(Me!CPF) = False Then MsgBox "CPF inválido". Onde está o erro? Eu salvei os módulos com os nomes de Valida CPF e Valida CNPJ. O erro está aqui? Devo salvar com que nomes? Agradeço a ajuda! William Pereira 20/03/2022 12:05:40 Olá, Sou aprendiz inexperiente no ACCESS mas olhando videos aulas no you tube eu consegui criar um sisteminha de inventário. Eu gostaria de colocar essas validações de CPF e CNPF no meu aplicativo. Como fazer? Tenho que copiar esses códigos para dentro de um módulo ou no próprio campo? Onde fica esse evento de campo que tem que inserir o código final? Agradeço qualquer ajuda. Rubens Cusnir 18/03/2022 12:49:47 Agradeço a explicação, usei a rotina do CPF e deu certo. Abraços, Rubens Cusnir Avelino Sampaio 26/02/2022 11:29:47 Wenderson, Esta realizando o teste com o meu exemplo ou no seu aplicativo ? Experimente com este cpf e me diga se funcionou: 076.853.978-11 No agurdo Wenderson Fernandes 26/02/2022 11:01:52 Boa tarde, estou fazendo testes com o validador de cpf e me deparei com um problema, cpf's que iniciam com zero ele retorna falso, como resolver, sou um pouco leigo no assunto. Marcio Melo 02/10/2021 08:57:00 Aproveitando que estamos em tempo de eleição, uma função onde faz o teste para ver se o titulo é verdadeiro ou falso: 'Testa Título de Eleitor Public Function TestaTitulo(qqNum As String) As Boolean 'Testa Titulo de Eleitor - retorna True ou False 'Autor: Carlos Moura - www.geocities.com/espaco_access Dim strDigVer As String, PriDig As String Dim strDig As String, SecDig As String strDigVer = Right(qqNum, 2) PriDig = Base_11(Left(qqNum, Len(qqNum) - 4)) SecDig = Base_11(Mid(Right(qqNum, 4), 1, 3)) strDig = PriDig & SecDig If strDigVer <> strDig Then TestaTitulo = False Else TestaTitulo = True End If End Function Private Function Base_11(QNumero As String) As Integer Dim Numero As String, i As Integer, Produto As Integer Dim Multiplicador As Integer, Digito As Integer Numero = Trim$(QNumero) ' Calcula digito do modulo 11 Multiplicador = 2 For i = Len(Numero) To 1 Step -1 Produto = Produto + Val(Mid(Numero, i, 1)) * Multiplicador Multiplicador = IIf(Multiplicador = 9, 2, Multiplicador + 1) Next ' Exceção Digito = 11 - Int(Produto Mod 11) Digito = IIf(Digito = 10 Or Digito = 11, 0, Digito) Base_11 = Trim$(Digito) End Function Quero o usandoaccess cada vez mais completo... Forte abraço! Marcio Melo 30/09/2021 14:09:55 Sensacional a forma que explica em como chegar no digito de verificação do CPF, eu tenho uma rotina que achei na internet sem nenhum comentário e bem maior que a sua, sempre tive muita vontade de enxergar como que era feito esse procedimento... Irei passar a utilizar o seu método... muito obrigado por mais uma aula de como minimizar uma rotina.... Sou mais Brasil! Forte abraço... Avelino Sampaio 30/09/2021 05:20:43 Eduardo, a função MOD retorna o RESTO da divisão. (387 MOD 11) Retorna 2 :::> 11-2 = 9 Sucesso! Marcelo David 30/09/2021 00:03:47 Muito bom! Melhor do que apenas dar pronto é ensinar e isso encontramos mais uma vez aqui! Parabéns! Eduardo Pires 29/09/2021 20:49:58 oi avelino. gostei da explicação. só não entendi como chegou no resultado daquela formula final. 11 - (387 mod 11) = 9, pode explicar mais detalhado? Mario Luiz Duarte Ribeiro 24/01/2021 12:11:17 Gostaria de saber se voce tem procedimento de evento para usarmos um mesmo campo para CPF e CNPJ, no formato de cada um; sendo que o Titulo do campo venha com o nome CPF ou CNPJ; já validando-os. Eu tentei fazer mais para cadastrar clientes tanto Pessoa Fisica como Juridica; mas quando acesso um novo cliente o access traz as informações da ultima atualização que fiz. |