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.

calculo dígito verificador de CPF

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.

Calculo digito verificador de CPF

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.

Regra de validação de CPF

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.

Regra de validação de CNPJ 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

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 BuilderSalesforce Certified Platform Developer IISalesforce Administrator e Sharing and Visibility.

Acompanhe meu Trailhead aqui.