Excelente código para Máscara e Validação de CNPJ, CPF, CEP Data e Telefone

(OBS 17/02/2014 – Outro código muito bom para validação: Criando máscaras em formulários com Jquery)
Procurando um código para Máscara e Validação de CNPJ encontrei um excelente código que me permite criar outras máscaras (Máscara de RG por exemplo).
Encontrei o código no site Fórum Imasters.
Segue abaixo o código do form:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Formatacao de campos</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script language="JavaScript" type="text/javascript" src="MascaraValidacao.js"></script> </head> <body> <form name="form1"> <br><br>CEP: <input type="text" name="cep" onKeyPress="MascaraCep(form1.cep);" maxlength="10" onBlur="ValidaCep(form1.cep)"> <br><br>DATA: <input type="text" name="data" onKeyPress="MascaraData(form1.data);" maxlength="10" onBlur= "ValidaDataform1.data);"> <br><br>Telefone: <input type="text" name="tel" onKeyPress="MascaraTelefone(form1.tel);" maxlength="14" onBlur="ValidaTelefone(form1.tel);"> <br><br>CPF: <input type="text" name="cpf" onBlur="ValidarCPF(form1.cpf);" onKeyPress="MascaraCPF(form1.cpf);" maxlength="14"> <br><br>CNPJ: <input type="text" name="cnpj" onKeyPress="MascaraCNPJ(form1.cnpj);" maxlength="18" onBlur="ValidarCNPJ(form1.cnpj);"> </form> </body> </html>
Segue o JavaScript MascaraValidacao.js
// JavaScript Document
//adiciona mascara de cnpj
function MascaraCNPJ(cnpj){
if(mascaraInteiro(cnpj)==false){
event.returnValue = false;
}
return formataCampo(cnpj, '00.000.000/0000-00', event);
}
//adiciona mascara de cep
function MascaraCep(cep){
if(mascaraInteiro(cep)==false){
event.returnValue = false;
}
return formataCampo(cep, '00.000-000', event);
}
//adiciona mascara de data
function MascaraData(data){
if(mascaraInteiro(data)==false){
event.returnValue = false;
}
return formataCampo(data, '00/00/0000', event);
}
//adiciona mascara ao telefone
function MascaraTelefone(tel){
if(mascaraInteiro(tel)==false){
event.returnValue = false;
}
return formataCampo(tel, '(00) 0000-0000', event);
}
//adiciona mascara ao CPF
function MascaraCPF(cpf){
if(mascaraInteiro(cpf)==false){
event.returnValue = false;
}
return formataCampo(cpf, '000.000.000-00', event);
}
//valida telefone
function ValidaTelefone(tel){
exp = /\(\d{2}\)\ \d{4}\-\d{4}/
if(!exp.test(tel.value))
alert('Numero de Telefone Invalido!');
}
//valida CEP
function ValidaCep(cep){
exp = /\d{2}\.\d{3}\-\d{3}/
if(!exp.test(cep.value))
alert('Numero de Cep Invalido!');
}
//valida data
function ValidaData(data){
exp = /\d{2}\/\d{2}\/\d{4}/
if(!exp.test(data.value))
alert('Data Invalida!');
}
//valida o CPF digitado
function ValidarCPF(Objcpf){
var cpf = Objcpf.value;
exp = /\.|\-/g
cpf = cpf.toString().replace( exp, "" );
var digitoDigitado = eval(cpf.charAt(9)+cpf.charAt(10));
var soma1=0, soma2=0;
var vlr =11;
for(i=0;i<9;i++){
soma1+=eval(cpf.charAt(i)*(vlr-1));
soma2+=eval(cpf.charAt(i)*vlr);
vlr--;
}
soma1 = (((soma1*10)%11)==10 ? 0:((soma1*10)%11));
soma2=(((soma2+(2*soma1))*10)%11);
var digitoGerado=(soma1*10)+soma2;
if(digitoGerado!=digitoDigitado)
alert('CPF Invalido!');
}
//valida numero inteiro com mascara
function mascaraInteiro(){
if (event.keyCode < 48 || event.keyCode > 57){
event.returnValue = false;
return false;
}
return true;
}
//valida o CNPJ digitado
function ValidarCNPJ(ObjCnpj){
var cnpj = ObjCnpj.value;
var valida = new Array(6,5,4,3,2,9,8,7,6,5,4,3,2);
var dig1= new Number;
var dig2= new Number;
exp = /\.|\-|\//g
cnpj = cnpj.toString().replace( exp, "" );
var digito = new Number(eval(cnpj.charAt(12)+cnpj.charAt(13)));
for(i = 0; i<valida.length; i++){
dig1 += (i>0? (cnpj.charAt(i-1)*valida[i]):0);
dig2 += cnpj.charAt(i)*valida[i];
}
dig1 = (((dig1%11)<2)? 0:(11-(dig1%11)));
dig2 = (((dig2%11)<2)? 0:(11-(dig2%11)));
if(((dig1*10)+dig2) != digito)
alert('CNPJ Invalido!');
}
//formata de forma generica os campos
function formataCampo(campo, Mascara, evento) {
var boleanoMascara;
var Digitato = evento.keyCode;
exp = /\-|\.|\/|\(|\)| /g
campoSoNumeros = campo.value.toString().replace( exp, "" );
var posicaoCampo = 0;
var NovoValorCampo="";
var TamanhoMascara = campoSoNumeros.length;;
if (Digitato != 8) { // backspace
for(i=0; i<= TamanhoMascara; i++) {
boleanoMascara = ((Mascara.charAt(i) == "-") || (Mascara.charAt(i) == ".")
|| (Mascara.charAt(i) == "/"))
boleanoMascara = boleanoMascara || ((Mascara.charAt(i) == "(")
|| (Mascara.charAt(i) == ")") || (Mascara.charAt(i) == " "))
if (boleanoMascara) {
NovoValorCampo += Mascara.charAt(i);
TamanhoMascara++;
}else {
NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);
posicaoCampo++;
}
}
campo.value = NovoValorCampo;
return true;
}else {
return true;
}
}
Ainda, nesse código, inseri uma Máscara para RG, muito fácil:
//adiciona mascara ao RG
function MascaraRG(rg){
if((rg)==false){
event.returnValue = false;
}
return formataCampo(rg, '00.000.000-0', event);
}
No form fica da seguinte forma:
<label for="rg">RG*</label><br /> <input name="rg" type="text" id="rg" size="30" maxlength="12" onKeyPress="MascaraRG(form1.rg);" />
Olá! Sou Fábio Bmed — fundador da Metapax, consultoria estratégica de posicionamento e crescimento para negócios, e criador da MapexMind, um método de neuropsicologia aplicada voltado à compreensão prática da mente humana. Também sou o criador do blog FabioBmed.com.br.
Desde 2006 trabalho com tecnologia, marketing digital e análise de sistemas complexos. Mas os sistemas que mais me fascinam hoje são os que carregamos dentro da cabeça.
Estou entrando na psicologia, com foco em neuropsicologia — a ciência que explica por que você pensa, decide e se comporta do jeito que faz. Essa transição não é um desvio de rota: é a evolução natural de quem passou décadas entendendo como sistemas funcionam — e percebeu que o mais complexo de todos ainda estava por ser mapeado.
Ao longo dessa trajetória, criei dois projetos que sintetizam essa visão.
A Metapax nasceu da percepção de que negócios não crescem por acaso. Crescem quando existe uma estrutura clara de autoridade, presença e experiência do cliente. Depois de mais de duas décadas liderando operações digitais e analisando padrões de crescimento empresarial, transformei esse entendimento no Método APA — Autoridade, Presença e Atendimento — aplicado a empresas e profissionais que querem crescer com previsibilidade e posicionamento sólido.
Já a MapexMind surgiu de outro tipo de investigação: entender a arquitetura da mente humana. O projeto aplica neuropsicologia à vida real para ajudar pessoas a compreenderem padrões emocionais, cognitivos e comportamentais — próprios ou de quem amam — traduzindo conceitos complexos em clareza prática e utilizável.
No fundo, os dois projetos partem da mesma pergunta:
Como sistemas funcionam por trás da superfície?
Negócios, comportamento, decisões, relações humanas, tecnologia, marketing e mente — tudo aqui é analisado pelo mesmo prisma: estrutura, padrões e a ciência por trás de como as coisas realmente funcionam.
Este blog é o ponto de encontro dessas áreas. Um espaço onde tecnologia, psicologia, neurociência, comportamento humano, marketing e filosofia prática deixam de ser assuntos separados e passam a conversar entre si.
Publicação Criada em: julho 16, 2012
Atualizado em: março 17, 2025 12:57 pm



Bom dia Fabio. A pouco tempo, peguei o codigo do validador do CPF para testar e recebi muitas reclamacoes que o cpf estava certo. Decidi validar e parece que realmente seu algoritmo não está 100%. Estou enviando essa mensagem so par que voce possa corrigir e não (prejudicar) algum programador. Para voce ter certeza, estou enviando 2 cpfs validos que o seu algoritmo esta apresentando como invalido: 10116988380 e 10119995290 Espero ter ajudado. FAvor confirmar o recebimento dessa mensagem
Realmente testei em um dos formulário que utilizam o mesmo validador em um site que programei, e esses CPF deram como incorretos,
Porém, ao consultar os CPF na receita, consta que os CPFs não são válidos, veja:
http://fabiobmed.com.br/wp-content/uploads/2012/10/cpf-10119995290.gif
http://fabiobmed.com.br/wp-content/uploads/2012/10/cpf-10116988380.gif
Amigo,
Realmente não está validando o CPF. Inseri o meu e está dando inválido…
Olá boa Noite.. Coloco um CEP válido e acusa inválido.
Bom dia Jan,
Esse código foi substituído por outro que estou usando atualmente que é baseado em jQuery.
Oi Fábio
Parabéns pela função, mas a do CPF está com um problema sim. Tenho um CPF que não posso colocar em público aqui mas que é valido na receita e na função aqui foi dito como invalido dei alerta no digitoGerado!=digitoDigitado e ela dava 40 != 30
A máscara do RG não aceita texto.
Há números de RG que tem ‘X’, por exemplo.
Abraços!
Acho que ficaria um pouco melhor:
“99.999.999-*”
Muito bom. Obrigado!
Legal gostei muito do arquivo
porem por ser meio ou totalmente leigo
tenho uma pergunta
como faço no caso para incorporar ele ao WHMCS ?
muito bom o exemplo !
obrigado !
Boa Tarde Brother, muito bom seu código, o melhor que eu já vi até hoje. Porém ele diz que meu CPF é inválido, apenas o meu rsrsrsrsrsrsrsrsrs, mas funciona perfeitamente.
Gente, está funcionando normal, mas você terá que validar com caracteres.
Exemplo:
CPF: 000.000.000-00
CNPJ: 00.000.000/0000-00
Olá.
Não sei se já testou, mas as máscaras funcionam somente no PC. Se você testar em um celular ou smartphone as máscaras não funcionam… você sabe o que pode ser? estou apanhando com isso.
Fabio
Menos é mais…, parabéns pelo código, se fosse possível gostaria de uma orientação de como formatar uma Mascara e validar o campo para caracteres maiúsculos com seu código.
Mais uma vez parabéns, muito bom!
Queria saber como se faz um menu igual ou parecido com esse do site.
Entra no https://www.w3schools.com, lá vc vai encontrar o código com o passo a passo.
No http://getbootstrap.com.br/components/#navbar também.
Espero ter ajudado. Abraço
Olá pessoal.
Não sei se alguém já testou, mas as máscaras funcionam somente no PC. Se você testar em um celular ou smartphone as máscaras não funcionam… alguém sabe o que pode ser? estou apanhando com isso.
provavelmente o charcode
Obrigado esse site foi muito útil para o meu trabalho no TCC
Fábio, muito obrigada! Ajudou d+++++
Muito legal o código, me ajudou bastante. Obrigado!