Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Mascara para CPF ou CNPJ no mesmo campo.Mascara para cpf e cnpj no mesmo campo!Tive a necessidade de pesquisar clientes pelo cpf/cnpj, então fiz este script que já formataa mascara para os dois casos no mesmo campo.aproveitei e economizei um campo no form de cadastro pois faço o cadastro dos dois dados nosmesmos campos:Vamos ao que interessa:Aqui eu crio a função cpfcnpj(), que será chamada no evento onkeyup="cpfcnpj(this)" do campo.inputt
> function cpfcnpj(){//testo o tamanho do campo e quando atingir três caracteres coloco o ponto.if(document.a.b.value.length == 3){//para exemplo dei nome para o form de a e pro campo de b, o que pode ser mudado.document.a.b.value = document.a.b.value + '.';return false;}//agora testo ao sétimo digito que é onde vai o segundo ponto na mascara para o cpf.if(document.a.b.value.length == 7){document.a.b.value = document.a.b.value + '.';return false;}//e final mente o traço do digito verificadorif(document.a.b.value.length == 11){document.a.b.value = document.a.b.value + '-';return false;}//agora é que fico sabendo se o campo é um cnpj, se tiver 15 caracteres pego todos eles pra dentrode variáveis, sei que da pra fazer com um array mas assim fica fácil da galera entender.if(document.a.b.value.length == 15){//aqui uso charAt(0) que me retorna um caracter especifico, assim posso pegar apenas os númerosdo cpf e não os pontos e o traço.p0=document.a.b.value.charAt(0);p1=document.a.b.value.charAt(1);p2=document.a.b.value.charAt(2);p3=document.a.b.value.charAt(4);p4=document.a.b.value.charAt(5);p5=document.a.b.value.charAt(6);p6=document.a.b.value.charAt(8);p7=document.a.b.value.charAt(9);p8=document.a.b.value.charAt(10);p9=document.a.b.value.charAt(12);p10=document.a.b.value.charAt(13);p11=document.a.b.value.charAt(14);limpo o campo pra depois colocar o cnpj.document.a.b.value = '';//e faço uma concatenação das variáveisdocument.a.b.value = p0 + p1 + '.' + p2 + p3 + p4 + '.' + p5 + p6 + p7 + '/' + p8 + p9 + p10 + p11 + '-';return false;
E no imput você coloca no onkeyup="cpfcnpj(this)"É isso aí sei que o código e bem simples e se alguém tem colaboração agradeço desde já.até a próxima.
É tem que ser melhorado!Tem que acietar apenas numeros.E estou fazendo o seguinte, quando quando completar os 14 digitos do CPF ele valida e se for un cpf valido passa pro proximo campo nao permitindo que o usuario digite mais nada.
para q soh seja inserido numeros o script eh esse
<script language="JavaScript">function Verifica(event){var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;var caract = new RegExp(/^[0-9]+$/i);var caract = caract.test(String.fromCharCode(keyCode));if(!caract){//alert("Caracter inválido: " +String.fromCharCode(keyCode));keyCode=0;return false;}}</script>Eis a melhor formatação e validação de CPF e CNPJ (CGC) no mesmo input:
<script LANGUAGE="JavaScript">
<!--
//Formata a digitação de CPF e CGC
function mask_cpfcgc(formulario,campo,tammax,teclapres) {
var tecla = teclapres.keyCode;
if ( (teclapres.shiftKey && tecla != 9) || teclapres.ctrlKey || teclapres.altKey ) {
return false;
}
//48 a 57 são os números do teclado alfabético (1 a 0)
//96 a 105 são os números do teclado numérico (0 a 9)
//8 é a tecla de BACKSPACE
//46 é a tecla DELETE
//9 é a tecla de TAB
//39 e 37 são as teclas para direita e para esquerda para retirar a seleção do campo
if ((tecla < 48 || tecla > 57) && (tecla < 96 || tecla > 105) && tecla != 8 && tecla != 9 && tecla != 46 && tecla != 37 && tecla != 39 ) {
return false;
}
vr = document.forms(formulario).item(campo.name).value;
tam_vr = vr.length;
vr = vr.replace( "/", "" );
vr = vr.replace( "/", "" );
vr = vr.replace( "-", "" );
vr = vr.replace( ".", "" );
vr = vr.replace( ".", "" );
vr = vr.replace( ".", "" );
vr = vr.replace( ".", "" );
tam = vr.length;
if (tam < tammax && tecla != 8) {
tam = vr.length+1;
}
if (tecla == 8 ) {
tam = tam - 1;
}
else {
if ( tecla != 9 && tecla != 37 && tecla != 39 ) {
if ( tam_vr >= tammax ) {
return false;
}
}
}
}
function form_cpfcgc(formulario,campo,tammax,teclapres) {
var tecla = teclapres.keyCode;
if ((tecla < 48 || tecla > 57) && (tecla < 96 || tecla > 105) && tecla != 46 && tecla != 8) {
return false;
}
vr = campo.value;
vr = vr.replace( "/", "" );
vr = vr.replace( "/", "" );
vr = vr.replace( "-", "" );
vr = vr.replace( ".", "" );
vr = vr.replace( ".", "" );
vr = vr.replace( ".", "" );
vr = vr.replace( ".", "" );
tam = vr.length;
if ( tam <= 2 ) {
document.forms(formulario).item(campo.name).value = vr;
}
if ( (tam > 2) && (tam <= 5) ) {
document.forms(formulario).item(campo.name).value = vr.substr( 0, tam - 2 ) + '-' + vr.substr( tam - 2, tam );
}
if ( (tam >= 6) && (tam <= 8) ) {
document.forms(formulario).item(campo.name).value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + '-' + vr.substr( tam - 2, tam );
}
if ( (tam >= 9) && (tam <= 11) ) {
document.forms(formulario).item(campo.name).value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + '-' + vr.substr( tam - 2, tam );
}
if ( (tam == 12) ) {
document.forms(formulario).item(campo.name).value = vr.substr( tam - 12, 3 ) + '.' + vr.substr( tam - 9, 3 ) + '/' + vr.substr( tam - 6, 4 ) + '-' + vr.substr( tam - 2, tam );
}
if ( (tam > 12) && (tam <= 14) ) {
document.forms(formulario).item(campo.name).value = vr.substr( 0, tam - 12 ) + '.' + vr.substr( tam - 12, 3 ) + '.' + vr.substr( tam - 9, 3 ) + '/' + vr.substr( tam - 6, 4 ) + '-' + vr.substr( tam - 2, tam );
}
}
//Verifica se CPF ou CGC e encaminha para a devida função de teste
function consiste_cpfcgc(Param) {
tmp = Param;
if (tmp.length == 11) {
x = verifica_cpf(tmp);
if (!x) {
return false;
}
}
else {
if (tmp.length == 14) {
cgc_aux = tmp.substring(0,2) + tmp.substring(2,5) + tmp.substring(5,8) + tmp.substring(8,12) + tmp.substring(12,14);
x = verifica_cgc(cgc_aux);
if (!x) {
return false;
}
}
else {
return false;
}
}
return true;
}
//Verifica se CPF ou CGC e encaminha para a devida função, no caso do cpf/cgc estar digitado sem mascara
function consiste_cpfcgc_sem_mascara(Param) {
tmp = Param;
if (tmp.length <= 11) {
x = verifica_cpf(tmp);
if (!x) {
return false;
}
}
else {
x = verifica_cgc(tmp);
if (!x) {
return false;
}
}
return true;
}
//Verifica se o número de CPF informado é válido
function verifica_cpf(sequencia) {
if ( Procura_Str(1,sequencia,'00000000000,11111111111,22222222222,33333333333,44444444444,55555555555,6666 return false;
}
seq = sequencia;
soma = 0;
multiplicador = 2;
for (f = seq.length - 3;f >= 0;f--) {
soma += seq.substring(f,f + 1) * multiplicador;
multiplicador++;
}
resto = soma % 11;
if (resto == 1 || resto == 0) {
digito = 0;
}
else {
digito = 11 - resto;
}
if (digito != seq.substring(seq.length - 2,seq.length - 1)) {
return false;
}
soma = 0;
multiplicador = 2;
for (f = seq.length - 2;f >= 0;f--) {
soma += seq.substring(f,f + 1) * multiplicador;
multiplicador++;
}
resto = soma % 11;
if (resto == 1 || resto == 0) {
digito = 0;
}
else {
digito = 11 - resto;
}
if (digito != seq.substring(seq.length - 1,seq.length)) {
return false;
}
return true;
}
//Verifica se o número de CGC informado é válido
function verifica_cgc(sequencia) {
seq = sequencia;
soma = 0;
multiplicador = 2;
for (f = seq.length - 3;f >= 0;f-- ) {
soma += seq.substring(f,f + 1) * multiplicador;
if ( multiplicador < 9 ) {
multiplicador++;
}
else {
multiplicador = 2;
}
}
resto = soma % 11;
if (resto == 1 || resto == 0) {
digito = 0;
}
else {
digito = 11 - resto;
}
if (digito != seq.substring(seq.length - 2,seq.length - 1)) {
return false;
}
soma = 0;
multiplicador = 2;
for (f = seq.length - 2;f >= 0;f--) {
soma += seq.substring(f,f + 1) * multiplicador;
if (multiplicador < 9) {
multiplicador++;
}
else {
multiplicador = 2;
}
}
resto = soma % 11;
if (resto == 1 || resto == 0) {
digito = 0;
}
else {
digito = 11 - resto;
}
if (digito != seq.substring(seq.length - 1,seq.length)) {
return false;
}
return true;
}
//Procura uma string dentro de outra string
function Procura_Str(param0,param1,param2) {
for (a = param0 - 1;a < param1.length;a++) {
for (b = 1;b < param1.length;b++) {
if (param2 == param1.substring(b - 1,b + param2.length - 1)) {
return a;
}
}
}
return 0;
}
//Limpa "." e "-" e "/"
function LimpaCPFCGC(strCPFCGC)
{
return strCPFCGC.replace(/\./g,'').replace(/-/g,'').replace(/\//g,'')
}
// Funcao que formata o campo conforme a Digitação de Caracteres
// Utiliza evento OnKeyPress
// OBS: Este campo somente aceitará valores numéricos
// Parametro: << campo do formulario >>
// Retorno:
function FormataData( campo )
{ var tam = campo.value.length;
if (((event.keyCode) >= 48 ) && ((event.keyCode) <= 57 ))
{ event.keyCode;
if ( ( tam == 2 ) || ( tam == 5 ) )
{ campo.value = campo.value + "/"; }
}
else
{ event.keyCode = 0; }
}</script>
onkeydown="return mask_cpfcgc(form.name,this,18,event)" onkeyup="return form_cpfcgc(form.name,this,18,event)"Pessoal como fazer esse script funcionar?
Inseri o script em no cabeçalho de uma pagina .asp e criei um formulario e no campo texto coloquei assim:
<input type="text" name="cpf-cnpj" onkeydown="return mask_cpfcgc(form.name,this,18,event)" onkeyup="return form_cpfcgc(form.name,this,18,event)">
mas não funionou!!!
precisa configurar mais alguma coisa?
O código do Pierre Bruno não estava funcionando pra mim também, então fiz uma modificações e agora funciona perfeitamente.
<html>
<head>
<script LANGUAGE="Javascript">
<!--
//Aplica a máscara no campo
//Função para ser utilizada nos eventos do input para formatação dinâmica
function aplica_mascara_cpfcnpj(campo,tammax,teclapres) {
var tecla = teclapres.keyCode;
if ((tecla < 48 || tecla > 57) && (tecla < 96 || tecla > 105) && tecla != 46 && tecla != 8) {
return false;
}
var vr = campo.value;
vr = vr.replace( /\//g, "" );
vr = vr.replace( /-/g, "" );
vr = vr.replace( /\./g, "" );
var tam = vr.length;
if ( tam <= 2 ) {
campo.value = vr;
}
if ( (tam > 2) && (tam <= 5) ) {
campo.value = vr.substr( 0, tam - 2 ) + '-' + vr.substr( tam - 2, tam );
}
if ( (tam >= 6) && (tam <= 8) ) {
campo.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + '-' + vr.substr( tam - 2, tam );
}
if ( (tam >= 9) && (tam <= 11) ) {
campo.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + '-' + vr.substr( tam - 2, tam );
}
if ( (tam == 12) ) {
campo.value = vr.substr( tam - 12, 3 ) + '.' + vr.substr( tam - 9, 3 ) + '/' + vr.substr( tam - 6, 4 ) + '-' + vr.substr( tam - 2, tam );
}
if ( (tam > 12) && (tam <= 14) ) {
campo.value = vr.substr( 0, tam - 12 ) + '.' + vr.substr( tam - 12, 3 ) + '.' + vr.substr( tam - 9, 3 ) + '/' + vr.substr( tam - 6, 4 ) + '-' + vr.substr( tam - 2, tam );
}
}
//Verifica se CPF ou CGC e encaminha para a devida função, no caso do cpf/cgc estar digitado sem mascara
function verifica_cpf_cnpj(cpf_cnpj) {
if (cpf_cnpj.length == 11) {
return(verifica_cpf(cpf_cnpj));
} else if (cpf_cnpj.length == 14) {
return(verifica_cnpj(cpf_cnpj));
} else {
return false;
}
return true;
}
//Verifica se o número de CPF informado é válido
function verifica_cpf(sequencia) {
if ( Procura_Str(1,sequencia,'00000000000,11111111111,22222222222,33333333333,44444444444,55555555555,66666666666,77777777777,88888888888,99999999999,00000000191,19100000000') > 0 ) {
return false;
}
seq = sequencia;
soma = 0;
multiplicador = 2;
for (f = seq.length - 3;f >= 0;f--) {
soma += seq.substring(f,f + 1) * multiplicador;
multiplicador++;
}
resto = soma % 11;
if (resto == 1 || resto == 0) {
digito = 0;
} else {
digito = 11 - resto;
}
if (digito != seq.substring(seq.length - 2,seq.length - 1)) {
return false;
}
soma = 0;
multiplicador = 2;
for (f = seq.length - 2;f >= 0;f--) {
soma += seq.substring(f,f + 1) * multiplicador;
multiplicador++;
}
resto = soma % 11;
if (resto == 1 || resto == 0) {
digito = 0;
} else {
digito = 11 - resto;
}
if (digito != seq.substring(seq.length - 1,seq.length)) {
return false;
}
return true;
}
//Verifica se o número de CNPJ informado é válido
function verifica_cnpj(sequencia) {
seq = sequencia;
soma = 0;
multiplicador = 2;
for (f = seq.length - 3;f >= 0;f-- ) {
soma += seq.substring(f,f + 1) * multiplicador;
if ( multiplicador < 9 ) {
multiplicador++;
} else {
multiplicador = 2;
}
}
resto = soma % 11;
if (resto == 1 || resto == 0) {
digito = 0;
} else {
digito = 11 - resto;
}
if (digito != seq.substring(seq.length - 2,seq.length - 1)) {
return false;
}
soma = 0;
multiplicador = 2;
for (f = seq.length - 2;f >= 0;f--) {
soma += seq.substring(f,f + 1) * multiplicador;
if (multiplicador < 9) {
multiplicador++;
} else {
multiplicador = 2;
}
}
resto = soma % 11;
if (resto == 1 || resto == 0) {
digito = 0;
} else {
digito = 11 - resto;
}
if (digito != seq.substring(seq.length - 1,seq.length)) {
return false;
}
return true;
}
//Procura uma string dentro de outra string
function Procura_Str(param0,param1,param2) {
for (a = param0 - 1;a < param1.length;a++) {
for (b = 1;b < param1.length;b++) {
if (param2 == param1.substring(b - 1,b + param2.length - 1)) {
return a;
}
}
}
return 0;
}
//Retira a máscara do valor de cpf_cnpj
function retira_mascara(cpf_cnpj) {
return cpf_cnpj.replace(/\./g,'').replace(/-/g,'').replace(/\//g,'')
}
</script>
</head>
<body>
<form name='a'>
<input type="text" id="cpf-cnpj" name="cpf-cnpj" onkeydown="javascript:return aplica_mascara_cpfcnpj(this,18,event)" onkeyup="javascript:return aplica_mascara_cpfcnpj(this,18,event)">
</form>
</body>
</html>
Para validar um cpf/cnpj, use os comandos:
var campo = document.getElementById('cpf-cnpj');
//Mostra true se cpf/cnpj válido, false se inválido
alert(verifica_cpf_cnpj(retira_mascara(campo.value)));
Boa tarde,
Será que teria como me enviar este código, pq não sei o que estou fazendo de errado, mas não funcionou no IE e nem o Fire Fox, não sei arrumar.
Grato pela atenção
Elias
Fiz umas alterações para a máscara e CPF e CNPJ em campos separados. Funciona perfeitamente!
//Início do JavaScript que validará os campos CPF e CNPJ no cadastro de Cliente
function cpfoucnpj(){
if(document.cadastro.cli_cpf.value.length == 3){
document.cadastro.cli_cpf.value = document.cadastro.cli_cpf.value + '.';
return false;
}
if(document.cadastro.cli_cpf.value.length == 7){
document.cadastro.cli_cpf.value = document.cadastro.cli_cpf.value + '.';
return false;
}
if(document.cadastro.cli_cpf.value.length == 11){
document.cadastro.cli_cpf.value = document.cadastro.cli_cpf.value + '-';
return false;
}
if(document.cadastro.cli_cnpj.value.length == 2){
document.cadastro.cli_cnpj.value = document.cadastro.cli_cnpj.value + '.';
return false;
}
if(document.cadastro.cli_cnpj.value.length == 6){
document.cadastro.cli_cnpj.value = document.cadastro.cli_cnpj.value + '.';
return false;
}
if(document.cadastro.cli_cnpj.value.length == 10){
document.cadastro.cli_cnpj.value = document.cadastro.cli_cnpj.value + '/';
return false;
}
if(document.cadastro.cli_cnpj.value.length == 15){
document.cadastro.cli_cnpj.value = document.cadastro.cli_cnpj.value + '-';
return false;
}
}Caros, continuando o tópico...Estou querendo o CPF e CNPJ no mesmo campo. Estou usando o seguinte:
function jscpfcnpj(v){
v=v.replace(/\D/g,"");
if (v.length > 0 && v.length <= 14) {
v=v.replace(/(\d{3})(\d)/,"$1.$2");
v=v.replace(/(\d{3})(\d)/,"$1.$2");
v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2");
} else {
v=v.replace(/^(\d{2})(\d)/,"$1.$2");
v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3");
v=v.replace(/\.(\d{3})(\d)/,".$1/$2");
v=v.replace(/(\d{4})(\d)/,"$1-$2");
}
return v;
}
O CPF funciona perfeitamente mas o CNPJ retorna um zero a mais no final: 12.345.678/0001-000.
O input está assim:
<input class="cadastro" type="text" id="cpfcnpj" style="width: 180px" name="cpfcnpj" size="18" onkeypress="mascara(this,jscpfcnpj)" onblur="clearTimeout()" maxlength="18" /></div>
Agradeço qualquer ajuda.
Abs
JR
Depois de semanas tentando, consegui.....
Modifiquei o seguinte:
if (v.length > 0 && v.length <= 11) {
JR
Ok o codigo que coloquei acima funciona pra menha necessidade.
exemplo:
quando digito um CPF que tem 11 digitos, o script coloca a mascara de CPF, se eu continuar a digitar,
o script formata o campo pra CNPJ :
Testem ai!
A qui funcionou!