Você já precisou de código para validar e formatar CPF? Caso sua resposta seja afirmativa você já deve ter encontrado centenas pela internet! E infelizmente são:
- Códigos grandes
- Não diz o que faz cada passo
- Não diz como implementar
- E o conceito está complexo
Então como sempre quero ajudar e inovar!! Não sei se irei conseguir abranger toda a lista acima, mas este será meu objetivo neste artigo.
Pra que Validar e Formatar CPF ??
Uma das principais funções de um sistema (veja como criar um) é a validação dos dados antes de gravá-los.
Devemos lembrar dos diversos cadastros de clientes que utilizam do CPF ou RG para encontrar seus clientes e sem um número válido sua base de dados está correndo risco.
Entendendo o código
Para entender o conceito é ideal que vejam o vídeo, mas mesmo assim tentarei explicar por aqui.
Em um número de CPF os dois últimos dígitos são os números verificadores. Estes são responsáveis para informar se a sequencia está correta e baseado nisso:
Para o DV1 (primeiro digito verificador) vamos:
- Multiplicar todos os números que compõem o CPF (com exceção dos dois dígitos verificadores) por usas respectivas posições
- Somar o resultado
- Dividir por 11 (total de dígitos) e pegar o resto
Que deve ser igual ao primeiro digito verificador do CPF (ver primeiro quadro amarelo).
Para o DV2 (segundo digito verificador) vamos:
- Desconsiderar a primeira posição
- Multiplicar todos os números que compõem o CPF (com exceção do último digito verificador) por usas posições – 1
- Somar o resultado
- Dividir por 11 (total de dígitos) e pegar o resto
Que deve estar idêntico ao segundo digito verificador do CPF (ver segundo quadro amarelo)
Observação: No cálculo de ambos dígitos verificadores se o resto for igual a 10, então vamos considerar como zero
Código vba de cpf super compacto
Para Validar e Formatar CPF o código abaixo está dividido em duas partes: pré-formatação e validação:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) numCPF = TextBox1.Value numCPF = Replace(numCPF, ".", "") numCPF = Replace(numCPF, "-", "") If Val(numCPF) = 0 Or validaCPF(numCPF) <> "OK" Then TextBox2.Value = "cpf invalido" Exit Sub Else TextBox1.Value = Left(numCPF, 3) & "." & Mid(numCPF, 4, 3) & "." & Mid(numCPF, 7, 3) & "-" & Right(numCPF, 2) TextBox2.Value = "cpf válido" End If End Sub Function validaCPF(numCPF) If Len(numCPF) < 11 Then numCPF = String(11 - Len(numCPF), "0") & numCPF For caracter = 1 To 9 DV1 = Val(Mid(numCPF, caracter, 1)) * caracter + DV1 If caracter > 1 Then DV2 = Val(Mid(numCPF, caracter, 1)) * (caracter - 1) + DV2 Next DV1 = Right(DV1 Mod 11, 1) DV2 = Right((DV2 + (DV1 * 9)) Mod 11, 1) If Mid(numCPF, 10, 1) = DV1 And Mid(numCPF, 11, 1) = DV2 Then validaCPF = "OK" End Function |