Já imaginou como seria legal se existisse uma Regra de validação para CPF e CNPJ, vivemos em um país burocrático, onde existem muitas regras, e um conjunto de números sem igual, é RG, Título de eleitor, CPF e CNPJ entre muitos outros números que temos que lidar no nosso dia a dia.
Muitas vezes o ideal é termos uma validação para esses números, a fim de evitar cadastros com números errados, e para nossa sorte existe sim uma forma de fazermos essa regra de validação, mas primeiro vamos entender como funciona uma validação de CPF e CNPJ e depois, como criar uma regra de validação no Salesforce para isso.
O que é o CPF?
O CPF ou Cadastro de Pessoa Física é um documento brasileiro emitido pela Secretaria da Receita Federal do Ministério da Fazenda. Seu número é composto por 11 dígitos, sendo os dois últimos os dígitos verificadores, que atestam se o número do CPF é válido.
Como verificar se um CPF é válido?
Para exemplificar o cálculo, vamos imaginar o número de um CPF hipotético:
- 123.456.789-10
São os dois últimos dígitos que atestam a validade do CPF, e estes são calculados baseando-se nos 9 primeiros dígitos.
Calculando o Primeiro Dígito Verificador
O primeiro dígito verificador do CPF é calculado baseando-se no seguinte algoritmo.
1) Distribua os 9 primeiros dígitos do CPF na primeira linha de uma tabela, e na linha abaixo distribua os pesos 10, 9, 8, 7, 6, 5, 4, 3, 2 conforme representação abaixo:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
2) Multiplique os valores de cada coluna:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
10 | 18 | 24 | 28 | 30 | 30 | 28 | 24 | 18 |
3) Calcule a somatória dos resultados (10+18+…+24+18) = 210
4) O resultado obtido (210) será divido por 11. Considere como quociente apenas o valor inteiro obtido na divisão, o resto da divisão será responsável pelo cálculo do primeiro dígito verificador.
O resto da divisão é 1. Para calcular o dígito verificador, você deve subtrair o resto encontrado de onze.
11 – 1 = 10
Se o resultado da subtração for maior que 9, o dígito verificador é ZERO. Caso contrário, o dígito verificador é o resultado dessa subtração. Neste caso, o primeiro dígito verificador é ZERO.
Já temos portanto parte do CPF válido, confira: 123.456.789-0X.
Calculando o Segundo Dígito Verificador
1) Para calcular o segundo dígito verificador, fazemos o cálculo de forma análoga ao primeiro dígito, acrescentando ao CPF o dígito encontrado no passo anterior. Na segunda linha, os pesos são distribuídos começando por 11.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
11 | 20 | 27 | 32 | 35 | 36 | 35 | 32 | 27 | 0 |
2) Faça a somatória da multiplicação das colunas: (11+20+…+27+0) = 255
3) Encontre o resto da divisão da somatória por 11.
O resto da divisão é 2. Para calcular o dígito verificador, você deve subtrair o resto encontrado de onze.
11 – 2 = 9
Como agora o resultado da subtração não é maior que 9, o resultado é o próprio dígito verificador.
Agora já sabemos quais são os dois dígitos verificadores válidos, 0 e 9, podemos afirmar que o CPF hipotético usado no exemplo não é válido.
123.456.789-10 (CPF inválido)
123.456.789-09 (CPF válido)
Regra de Validação de CPF
Agora que já entendemos como a regra funciona, vamos a mágica, vamos imaginar um cadastro de contato, onde temos um campo chamado CPF__c, vamos então criar uma regra de validação para este campo, conforme a imagem abaixo.
Insira no campo fórmula o seguinte código:
NOT( OR( LEN(CPF__c)=0,AND(MOD(MOD(11-MOD( VALUE(MID(CPF__c,1,1))*10+ VALUE(MID(CPF__c,2,1))*9+ VALUE(MID(CPF__c,3,1))*8+ VALUE(MID(CPF__c,5,1))*7+ VALUE(MID(CPF__c,6,1))*6+ VALUE(MID(CPF__c,7,1))*5+ VALUE(MID(CPF__c,9,1))*4+ VALUE(MID(CPF__c,10,1))*3+ VALUE(MID(CPF__c,11,1))*2,11),11),10)= VALUE(MID(CPF__c,13,1)),MOD(MOD(11-MOD( VALUE(MID(CPF__c,1,1))*11+ VALUE(MID(CPF__c,2,1))*10+ VALUE(MID(CPF__c,3,1))*9+ VALUE(MID(CPF__c,5,1))*8+ VALUE(MID(CPF__c,6,1))*7+ VALUE(MID(CPF__c,7,1))*6+ VALUE(MID(CPF__c,9,1))*5+ VALUE(MID(CPF__c,10,1))*4+ VALUE(MID(CPF__c,11,1))*3+ VALUE(MID(CPF__c,13,1))*2,11),11),10)= VALUE(MID(CPF__c,14,1))))) && NOT(OR(LEN(CPF__c)=0,AND(MOD(MOD(11-MOD( VALUE(MID(CPF__c,1,1))*10+ VALUE(MID(CPF__c,2,1))*9+ VALUE(MID(CPF__c,3,1))*8+ VALUE(MID(CPF__c,4,1))*7+ VALUE(MID(CPF__c,5,1))*6+ VALUE(MID(CPF__c,6,1))*5+ VALUE(MID(CPF__c,7,1))*4+ VALUE(MID(CPF__c,8,1))*3+ VALUE(MID(CPF__c,9,1))*2,11),11),10)= VALUE(MID(CPF__c,10,1)),MOD(MOD(11-MOD( VALUE(MID(CPF__c,1,1))*11+ VALUE(MID(CPF__c,2,1))*10+ VALUE(MID(CPF__c,3,1))*9+ VALUE(MID(CPF__c,4,1))*8+ VALUE(MID(CPF__c,5,1))*7+ VALUE(MID(CPF__c,6,1))*6+ VALUE(MID(CPF__c,7,1))*5+ VALUE(MID(CPF__c,8,1))*4+ VALUE(MID(CPF__c,9,1))*3+ VALUE(MID(CPF__c,10,1))*2,11),11),10)= VALUE(MID(CPF__c,11,1)))))
Prontinho, agora é só testar a sua nova regra de validação e fazer bom uso dela.
A de CNPJ é bem parecido, mas com algumas particularidades, vamos lá.
O que é um CNPJ?
No Brasil, o Cadastro Nacional da Pessoa Jurídica, é um número único que identifica uma pessoa jurídica e outros tipos de arranjo jurídico sem personalidade jurídica (como condomínios, órgãos públicos, fundos) junto à Receita Federal brasileira (órgão do Ministério da Fazenda).
O CNPJ compreende as informações cadastrais das entidades de interesse das administrações tributárias da União, dos Estados, do Distrito Federal e dos Municípios.
Como verificar se um CNPJ é válido?
O CNPJ é composto por quatorze algarismos, divididos em três blocos:
– o primeiro, que representa o número da inscrição propriamente dito;
– o segundo, localizado após a barra, que representa um código único para a matrix ou filial;
– o terceiro, representados pelos dois últimos valores chamados de dígitos verificadores (DV).
Os dígitos verificadores (DV) são criados a partir dos doze primeiros. O cálculo é feito em duas etapas utilizando o módulo de divisão 11.
Para exemplificar o processo e tornar mais fácil a explicação vamos calcular os dígitos verificadores de um CNPJ hipotético, por exemplo, 11.444.777/0001-XX.
Calculando o Primeiro Dígito Verificador
O primeiro dígito é calculado utilizando-se o seguinte algoritmo.
1) Distribua os 12 primeiros dígitos em um quadro colocando os pesos 5,4,3,2,9,8,7,6,5,4,3,2 abaixo da esquerda para a direita, conforme representação abaixo:
1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 | 0 | 0 | 0 | 1 |
5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
2) Multiplique os valores de cada coluna:
1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 | 0 | 0 | 0 | 1 |
5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
5 | 4 | 12 | 8 | 36 | 56 | 49 | 42 | 0 | 0 | 0 | 2 |
3) Calcule o somatório dos resultados (5+4+…+0+2) = 214
4) O resultado obtido (214) será divido por 11. Considere como quociente apenas o valor inteiro, o resto da divisão será responsável pelo cálculo do primeiro dígito verificador.
Vamos acompanhar: 214 dividido por 11 obtemos 19 como quociente e 5 como resto da divisão. Caso o resto da divisão seja menor que 2, o nosso primeiro dígito verificador se torna 0 (zero), caso contrário subtrai-se o valor obtido de 11, que é nosso caso. Sendo assim nosso dígito verificador é 11-5, ou seja, 6 (seis). Já temos portanto parte do CNPJ, confira: 11.444.777/0001-6X.
Calculando o Segundo Dígito Verificador
1) Para o cálculo do segundo dígito será usado o primeiro dígito verificador já calculado. Montaremos uma tabela semelhante a anterior só que desta vez usaremos na segunda linha os valores 6,5,4,3,2,9,8,7,6,5,4,3,2 já que estamos incorporando mais um algarismo para esse cálculo. Veja:
1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 | 0 | 0 | 0 | 1 | 6 |
6 | 5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
2) Na próxima etapa faremos como na situação do cálculo do primeiro dígito verificador, multiplicaremos os valores de cada coluna e efetuaremos o somatório dos resultados obtidos: (6+5+…+3+12) = 221.
1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 | 0 | 0 | 0 | 1 | 6 |
6 | 5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
6 | 5 | 16 | 12 | 8 | 63 | 56 | 49 | 0 | 0 | 0 | 3 | 12 |
3) Realizamos novamente o cálculo do módulo 11. Dividimos o total do somatório por 11 e consideramos o resto da divisão.
Vamos acompanhar: 230 dividido por 11 obtemos 20 como quociente e 10 como resto da divisão.
4) Caso o valor do resto da divisão seja menor que 2, esse valor passa automaticamente a ser zero, caso contrário (como no nosso exemplo) é necessário subtrair o valor obtido de 11 para se obter o dígito verificador, como realizado no cálculo do primeiro dígito. Logo, 11-10 = 1 é o nosso segundo dígito verificador.
Chegamos ao final dos cálculos e descobrimos que os dígitos verificadores do nosso CNPJ hipotético são os números 6 e 1, portanto o CNPJ ficaria assim: 11.444.777/0001-61.
Regra de Validação de CNPJ
Agora que já entendemos como a regra de validação de CNPJ funciona, vamos imaginar um cadastro de Contas, onde temos um campo chamado CNPJ__c, vamos então criar uma regra de validação para este campo, conforme a imagem abaixo.
Insira no campo fórmula o seguinte código:IF(LEN(CNPJ__c)=14,OR(AND(MOD(( (VALUE(MID(CNPJ__c,1,1))*6)+ (VALUE(MID(CNPJ__c,2,1))*5)+ (VALUE(MID(CNPJ__c,3,1))*4)+ (VALUE(MID(CNPJ__c,4,1))*3)+ (VALUE(MID(CNPJ__c,5,1))*2)+ (VALUE(MID(CNPJ__c,6,1))*9)+ (VALUE(MID(CNPJ__c,7,1))*8)+ (VALUE(MID(CNPJ__c,8,1))*7)+ (VALUE(MID(CNPJ__c,9,1))*6)+ (VALUE(MID(CNPJ__c,10,1))*5)+ (VALUE(MID(CNPJ__c,11,1))*4)+ (VALUE(MID(CNPJ__c,12,1))*3)+ (VALUE(MID(CNPJ__c,13,1))*2)) ,11)<=1 ,VALUE(MID(CNPJ__c,14,1))!=0) ,AND(MOD(( (VALUE(MID(CNPJ__c,1,1))*6)+ (VALUE(MID(CNPJ__c,2,1))*5)+ (VALUE(MID(CNPJ__c,3,1))*4)+ (VALUE(MID(CNPJ__c,4,1))*3)+ (VALUE(MID(CNPJ__c,5,1))*2)+ (VALUE(MID(CNPJ__c,6,1))*9)+ (VALUE(MID(CNPJ__c,7,1))*8)+ (VALUE(MID(CNPJ__c,8,1))*7)+ (VALUE(MID(CNPJ__c,9,1))*6)+ (VALUE(MID(CNPJ__c,10,1))*5)+ (VALUE(MID(CNPJ__c,11,1))*4)+ (VALUE(MID(CNPJ__c,12,1))*3)+ (VALUE(MID(CNPJ__c,13,1))*2)) ,11)>1 ,(11-MOD(( (VALUE(MID(CNPJ__c,1,1))*6)+ (VALUE(MID(CNPJ__c,2,1))*5)+ (VALUE(MID(CNPJ__c,3,1))*4)+ (VALUE(MID(CNPJ__c,4,1))*3)+ (VALUE(MID(CNPJ__c,5,1))*2)+ (VALUE(MID(CNPJ__c,6,1))*9)+ (VALUE(MID(CNPJ__c,7,1))*8)+ (VALUE(MID(CNPJ__c,8,1))*7)+ (VALUE(MID(CNPJ__c,9,1))*6)+ (VALUE(MID(CNPJ__c,10,1))*5)+ (VALUE(MID(CNPJ__c,11,1))*4)+ (VALUE(MID(CNPJ__c,12,1))*3)+ (VALUE(MID(CNPJ__c,13,1))*2) ),11 ))!=VALUE(MID(CNPJ__c,14,1)))),false)Espero que esses dois códigos possam ser muito útil para o seu projeto, eu não sou o autor dessas regra de validação, mas as utilizo na empresa e acho muito útil compartilhar com o maior número possível de pessoas. Para testar eu utilizo este site para gerar números de CPF e este para números de CNPJ. Se você tem dúvidas de como criar uma regra de validação, sugiro que de uma olhada neste trailhead que fala sobre campos fórmula e regra de validação, se tem dúvida do que é o trailhead, de uma olhada neste post. Um forte abraço e até o próximo post :)
Fernando Sousa
Senior Salesforce Developer
Bacharel em Sistemas da Informação pela Universidade de Taubaté (UNITAU) e MBA em Projeto de Aplicações para Dispositivos Móveis pelo IGTI – Instituto de Gestão em Tecnologia da Informação.
Comecei a programar bem cedo, por volta de 10 anos de idade, de maneira auto-didata passei por várias linguagens.
Em 2015 me conectei a plataforma Salesforce pela primeira vez, para fazer una integração entre um Aplicativos Mobile em android e o Salesforce Platform.
Atualmente com as certificações Salesforce Certified Platform Developer I, Salesforce Certified Platform App Builder, Salesforce Certified Platform Developer II, Salesforce Administrator e Sharing and Visibility.
Acompanhe meu Trailhead aqui.