bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Verificação do CPF e do CNPJ

... Assinatura do site por 1 ano + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$100,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Verificação do CPF e do CNPJ

Antes de iniciar sua leitura, clique aqui e cadastre-se para receber comunicados sobre novos artigos.

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:

Public Function fncCpfValido(CPF) As Boolean
Dim j As Byte, intSoma%, bytControle As Byte, pCPF$
'-------------------------------------------------
'Retira os pontos e o traço, caso sejam utilizados
'--------------------------------------------------
CPF = Replace(CPF, ".", "")
CPF = Replace(CPF, "-", "")
'-------------------------------------------------------------------
'Verifica se tem 11 algarismos.  Se não tiver, sai da função com 
'o valor padrão FALSO
'-------------------------------------------------------------------
If Len(CPF) <> 11 Then Exit Function
'---------------------------
'Realiza a primeira soma
'---------------------------
For j = 1 To 9
    intSoma = intSoma + ((11 - j) * Val(Mid(CPF, j, 1)))
Next
'------------------------------------------
'Armazena o primeiro algarismo de controle
'------------------------------------------
bytControle = IIf((intSoma Mod 11) < 2, 0, (11 - (intSoma Mod 11)))
intSoma = 0
'-----------------------------------------------------------
'Remonta o CPF com o primeiro algarismo de controle calculado
'------------------------------------------------------------
pCPF = left(CPF,9) & bytControle
'---------------------------------
'Realiza a segunda soma
'---------------------------------
For j = 1 To 10
    intSoma = intSoma + ((12 - j) * Val(Mid(pCPF, j, 1)))
Next
'------------------------------------
'Monta o Número de Controle calculado
'-------------------------------------
bytControle = Val(bytControle & IIf((intSoma Mod 11) < 2, 0, (11 - (intSoma Mod 11))))
'-------------------------------------------------------------------------
'Compara o número de controle calculado com o número de controle informado
'e entrega o resultado para função.
'--------------------------------------------------------------------------
fncCpfValido = (bytControle = Val(Right(CPF, 2)))
End Function

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:

Public Function fncCnpjValido(CNPJ As String) As Boolean
Dim j As Byte, p As Byte, intSoma%, bytDV As Byte, pCNPJ$
'----------------------------------------------------
'Retira pontos, barra e traço, caso sejam utilizados
'-----------------------------------------------------
CNPJ = Replace(CNPJ, ".", "")
CNPJ = Replace(CNPJ, "/", "")
CNPJ = Replace(CNPJ, "-", "")
'-------------------------------------------------------------------
'Verifica se tem 14 algarismos.  Se não tiver, sai da função com
'o valor padrão FALSO
'-------------------------------------------------------------------
If Len(CNPJ) <> 14 Then Exit Function
'---------------------------
'Realiza a primeira soma
'---------------------------
For j = 1 To 12
    p = IIf(j < 5, 6, 14)
    intSoma = intSoma + ((p - j) * Val(Mid(CNPJ, j, 1)))
Next
'----------------------------------------------------
'Armazena o primeiro algarismo do Dígito Verificador
'----------------------------------------------------
bytDV = IIf((intSoma Mod 11) < 2, 0, (11 - (intSoma Mod 11)))
intSoma = 0
'-------------------------------------------------------------------------
'Remonta o CNPJ com o primeiro algarismo do Dígito Verificador calculado
'-------------------------------------------------------------------------
pCNPJ = Left(CNPJ, 12) & bytDV
'------------------------------------------------------------------
'Realiza a segunda soma para encontrar o segundo algarismo do DV
'------------------------------------------------------------------
For j = 1 To 13
    p = IIf(j < 6, 7, 15)
    intSoma = intSoma + ((p - j) * Val(Mid(pCNPJ, j, 1)))
Next
'---------------------------------------------------------
'Monta o número completo do Dígito Verificador calculado
'----------------------------------------------------------
bytDV = Val(bytDV & IIf((intSoma Mod 11) < 2, 0, (11 - (intSoma Mod 11))))
'-------------------------------------------------------------------------
'Compara o número do Dígito Verificador calculado com o número do Dígito
'Verificador informado e o resultado é entregue à função.
'--------------------------------------------------------------------------
fncCnpjValido = (bytDV = Val(Right(CNPJ, 2)))
End Function

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!


 

 


14 comentários

Eduardo Pires   29/09/2014 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?

Marcelo David   30/09/2014 00:03:47

Muito bom! Melhor do que apenas dar pronto é ensinar e isso encontramos mais uma vez aqui!
Parabéns!

Avelino Sampaio   30/09/2014 05:20:43

Eduardo,

a função MOD retorna o RESTO da divisão.

(387 MOD 11) Retorna 2 :::> 11-2 = 9

Sucesso!

Marcio Melo   30/09/2014 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...

Marcio Melo   02/10/2014 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!

Rubens Cusnir   18/03/2015 12:49:47

Agradeço a explicação, usei a rotina do CPF e deu certo.

Abraços,

Rubens Cusnir

Marcio Morvan da Silva Jr   09/11/2015 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   21/06/2016 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

Avelino sampaio   22/06/2016 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   22/06/2016 16:44:06

Já cadastrado e criado topico em 'Off'. Caso tenha criado em local inadequado, por favor, faça a devida correção.

Wenderson Fernandes   26/02/2017 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.

Avelino Sampaio   26/02/2017 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


William Pereira   20/03/2017 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.

William Pereira   20/03/2017 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!


Envie seu comentário: