/* verifica_cpf_cnpj Verifica se é CPF ou CNPJ @see http://www.todoespacoonline.com/w/ */ function verifica_cpf_cnpj ( valor ) { // Garante que o valor é uma string valor = valor.toString(); // Remove caracteres inválidos do valor valor = valor.replace(/[^0-9]/g, ''); // Verifica CPF if ( valor.length === 11 ) { return 'CPF'; } // Verifica CNPJ else if ( valor.length === 14 ) { return 'CNPJ'; } // Não retorna nada else { return false; } } // verifica_cpf_cnpj /* calc_digitos_posicoes Multiplica dígitos vezes posições @param string digitos Os digitos desejados @param string posicoes A posição que vai iniciar a regressão @param string soma_digitos A soma das multiplicações entre posições e dígitos @return string Os dígitos enviados concatenados com o último dígito */ function calc_digitos_posicoes( digitos, posicoes, soma_digitos) { if(posicoes == null || posicoes == ''){ posicoes = 10; } if(soma_digitos == null || soma_digitos == ''){ soma_digitos = 0; } // Garante que o valor é uma string digitos = digitos.toString(); // Faz a soma dos dígitos com a posição // Ex. para 10 posições: // 0 2 5 4 6 2 8 8 4 // x10 x9 x8 x7 x6 x5 x4 x3 x2 // 0 + 18 + 40 + 28 + 36 + 10 + 32 + 24 + 8 = 196 for ( var i = 0; i < digitos.length; i++ ) { // Preenche a soma com o dígito vezes a posição soma_digitos = soma_digitos + ( digitos[i] * posicoes ); // Subtrai 1 da posição posicoes--; // Parte específica para CNPJ // Ex.: 5-4-3-2-9-8-7-6-5-4-3-2 if ( posicoes < 2 ) { // Retorno a posição para 9 posicoes = 9; } } // Captura o resto da divisão entre soma_digitos dividido por 11 // Ex.: 196 % 11 = 9 soma_digitos = soma_digitos % 11; // Verifica se soma_digitos é menor que 2 if ( soma_digitos < 2 ) { // soma_digitos agora será zero soma_digitos = 0; } else { // Se for maior que 2, o resultado é 11 menos soma_digitos // Ex.: 11 - 9 = 2 // Nosso dígito procurado é 2 soma_digitos = 11 - soma_digitos; } // Concatena mais um dígito aos primeiro nove dígitos // Ex.: 025462884 + 2 = 0254628842 var cpf = digitos + soma_digitos; // Retorna return cpf; } // calc_digitos_posicoes /* Valida CPF Valida se for CPF @param string cpf O CPF com ou sem pontos e traço @return bool True para CPF correto - False para CPF incorreto */ function valida_cpf( valor ) { // Garante que o valor é uma string valor = valor.toString(); // Remove caracteres inválidos do valor valor = valor.replace(/[^0-9]/g, ''); // Captura os 9 primeiros dígitos do CPF // Ex.: 02546288423 = 025462884 var digitos = valor.substr(0, 9); // Faz o cálculo dos 9 primeiros dígitos do CPF para obter o primeiro dígito var novo_cpf = calc_digitos_posicoes( digitos ); // Faz o cálculo dos 10 dígitos do CPF para obter o último dígito var novo_cpf = calc_digitos_posicoes( novo_cpf, 11 ); // Verifica se o novo CPF gerado é idêntico ao CPF enviado if ( novo_cpf === valor ) { // CPF válido return true; } else { // CPF inválido return false; } } // valida_cpf /* valida_cnpj Valida se for um CNPJ @param string cnpj @return bool true para CNPJ correto */ function valida_cnpj ( valor ) { // Garante que o valor é uma string valor = valor.toString(); // Remove caracteres inválidos do valor valor = valor.replace(/[^0-9]/g, ''); // O valor original var cnpj_original = valor; // Captura os primeiros 12 números do CNPJ var primeiros_numeros_cnpj = valor.substr( 0, 12 ); // Faz o primeiro cálculo var primeiro_calculo = calc_digitos_posicoes( primeiros_numeros_cnpj, 5 ); // O segundo cálculo é a mesma coisa do primeiro, porém, começa na posição 6 var segundo_calculo = calc_digitos_posicoes( primeiro_calculo, 6 ); // Concatena o segundo dígito ao CNPJ var cnpj = segundo_calculo; // Verifica se o CNPJ gerado é idêntico ao enviado if ( cnpj === cnpj_original ) { return true; } // Retorna falso por padrão return false; } // valida_cnpj /* valida_cpf_cnpj Valida o CPF ou CNPJ @access public @return bool true para válido, false para inválido */ function valida_cpf_cnpj ( valor ) { // Verifica se é CPF ou CNPJ var valida = verifica_cpf_cnpj( valor ); // Garante que o valor é uma string valor = valor.toString(); // Remove caracteres inválidos do valor valor = valor.replace(/[^0-9]/g, ''); // Valida CPF if ( valida === 'CPF' ) { // Retorna true para cpf válido return valida_cpf( valor ); } // Valida CNPJ else if ( valida === 'CNPJ' ) { // Retorna true para CNPJ válido return valida_cnpj( valor ); } // Não retorna nada else { return false; } } // valida_cpf_cnpj function formata_cpf(cpf, e, isValida){ cpf = cpf.toString(); // Remove caracteres inválidos do valor cpf = cpf.replace(/[^0-9]/g, ''); if(cpf.length>11){ cpf = cpf.substr(0, 11); } cpf=cpf.replace(/\D/g,"") //Remove tudo o que não é dígito cpf=cpf.replace(/(\d{3})(\d)/,"$1.$2") //Coloca ponto entre o terceiro e o quarto dígitos cpf=cpf.replace(/(\d{3})(\d)/,"$1.$2") //Coloca ponto entre o setimo e o oitava dígitos cpf=cpf.replace(/(\d{3})(\d)/,"$1-$2") //Coloca ponto entre o decimoprimeiro e o decimosegundo dígitos return cpf; } function formatUtil(){ $(".cpf:not(input)").each(function(i, item){item = $(item);item.text(formata_cpf(completeZeroEsquerda(item.text(), 11)));}); $(".cnpj:not(input)").each(function(i, item){item = $(item);item.text(formata_cnpj(completeZeroEsquerda(item.text(), 14)));}); $("input.cpf").each(function(i, item){item = $(item);item.val(formata_cpf(completeZeroEsquerda(item.val(), 11)));}); $("input.cnpj").each(function(i, item){item = $(item);item.val(formata_cnpj(completeZeroEsquerda(item.val(), 14)));}); if($(".radio-cpf").is(":checked")){ $(".cpf-cnpj").each(function(i, item){item = $(item);item.val(formata_cpf(completeZeroEsquerda(item.val(), 11)));}); }else if($(".radio-cnpj").is(":checked")){ $(".cpf-cnpj").each(function(i, item){item = $(item);item.val(formata_cnpj(completeZeroEsquerda(item.val(), 14)));}); } $("input[type='text'][name='dareEmissao.foneNumero'], .input-telefone").each(function(i,item){ formatFone($(item)); }); $("input[type='text'][name='dareEmissao.foneDdd'], .input-ddd").each(function(i,item){ formatDDD($(item)); }); } function formatDDD(field, removeOne){ var ddd = field.val().toString(); ddd = ddd.replace(/[^0-9]/g, ''); if(ddd.length>0&&removeOne){ddd = ddd.substr(0,ddd.length-1);}; if(ddd.match("^0")){ddd = ddd.substr(1,ddd.length);} if(ddd.length>2){ddd=ddd.substr(0,2);}; if(ddd.length == 1){ddd = "(0"+ddd+")";} else if(ddd.length >= 2 && ddd.length <= 3){ddd = "("+ddd+")";} field.val(ddd); }; function formatFone(field){ // jAlert("Telefone"); var fone = field.attr("maxlength", "10").val().toString(); fone = fone.replace(/[^0-9]/g, ''); if(fone.length <= 8){fone = fone.replace(/(\d{4})(\d)/,"$1-$2");} else if(fone.length >= 9){ if(fone.substr(0,1)==="9"){ fone = fone.substr(0,9); fone = fone.replace(/(\d{5})(\d)/,"$1-$2"); }else{ fone = fone.substr(0,8); fone = fone.replace(/(\d{4})(\d)/,"$1-$2"); } } field.val(fone); }; function formata_cnpj(cnpj){ cnpj = cnpj.toString(); // Remove caracteres inválidos do valor cnpj = cnpj.replace(/[^0-9]/g, ''); if(cnpj.length>14){ cnpj = cnpj.substr(0, 14); } //Formato: // Formata o CNPJ ##.###.###/####-## cnpj=cnpj.replace(/\D/g,"") //Remove tudo o que não é dígito cnpj=cnpj.replace(/(\d{2})(\d)/,"$1.$2") //Coloca ponto entre o segundo e o terceiro dígitos cnpj=cnpj.replace(/(\d{3})(\d)/,"$1.$2") //Coloca ponto entre o quito e o sexto dígitos cnpj=cnpj.replace(/(\d{3})(\d)/,"$1/$2") //Coloca ponto entre o oitavo e o nono dígitos cnpj=cnpj.replace(/(\d{4})(\d)/,"$1-$2") //Coloca ponto entre o decimosegundo e o decimoterceiro dígitos return cnpj; } function completeZeroEsquerda(value, tam){ value = value.toString().replace(/\D/g,""); for(;value.length < tam;){ value = "0"+value; } return value; } function validaCNPJ_CPF(campoCNPJCPF){ $("#message-cpf-cnpj").removeClass("invalido").removeClass("valido").hide(); // O CPF ou CNPJ var cpf_cnpj = campoCNPJCPF.val(); if($("#radio-cpf, input.radio-cpf, .radio-pessoa.física").is(":checked")){ if(valida_cpf(cpf_cnpj)){ // $("#message-cpf-cnpj").html("CPF Válido.").addClass("valido").show(); return true; }else{ $("#message-cpf-cnpj").html("CPF Inválido.").addClass("invalido").show(); } }else if($("#radio-cnpj, input.radio-cnpj, .radio-pessoa.jurídica").is(":checked")){ if(valida_cnpj(cpf_cnpj)){ // $("#message-cpf-cnpj").html("CNPJ Válido.").addClass("valido").show(); if($("span.emissao .radio-cnpj").is(":checked")){ carregaEmpresaPorCNPJ("dareEmissao", cpf_cnpj); } return true; }else{ $("#message-cpf-cnpj").html("CNPJ Inválido.").addClass("invalido").show(); } }else if($("input.radio-todos").is(":checked")){ campoCNPJCPF.val(""); return true; } else { $("#message-cpf-cnpj").html("CPF/CNPJ Inválido.").addClass("invalido").show(); } return false; }; function limparMascaraDeNumero(selectorToCssSeparadoPorVirgula){ var csss = selectorToCssSeparadoPorVirgula.split(","); var result = ""; $.each(csss, function(i, item){ var valor = $(item).val(); result = result + i + " - " + item + ": " + valor if(valor!=null){ valor = valor.toString().replace(/[^0-9]/g, ""); $(item).val(valor); result = result + " -> " + valor; } result = result + "; "; }); }; function cpfCnpjFormataEventChangeKeyupInput(event){ $("#message-cpf-cnpj").removeClass("invalido").removeClass("valido").hide(); var _$this=$(this); if(_$this.val()==null||_$this.val()==""){return;} var charCode = (event.which) ? event.which : ((event.charCode) ? event.charCode : ((event.keyCode) ? event.keyCode : 0)); switch(charCode){case 37:/*left*/case 39:/*right*/event.returnValue=true;return;} if($(".radio-cpf, input#radio-cpf, .radio-pessoa.física").is(":checked")){ var cpf = _$this.attr("maxlength", "14").val(); var formatado = formata_cpf(cpf, event); _$this.val(formatado); if(formatado.length == 14){ _$this.trigger("blur"); } } else if ($(".radio-cnpj, input#radio-cnpj, .radio-pessoa.jurídica").is(":checked")){//TODO var cnpj = _$this.attr("maxlength", "18").val(); var formatado = formata_cnpj(cnpj, event); _$this.val(formatado); if(formatado.length == 18){ if($("#radio-cnpj").is(":checked")){ carregaEmpresaPorCNPJ("dareEmissao", cnpj); } _$this.trigger("blur"); } }else{ console.info("Nao encontrou radio de cpf nem cnpj checked."); // jAlert("Opção marcada é invalida."+$("#radio-cnpj, input.cnpj").is(":checked")); } _$this.focus(); }; // Testando a validação usando jQuery $( document ).ready(function(){ // Aciona a validação e formatação ao sair do input $inputCpfCnpj = $("#dareEmissaonumeroCpfCnpj, .cpf-cnpj, input.cnpj, input.cpf"); $inputCpfCnpj.unbind("keyup"); $inputCpfCnpj.blur(function(){ var $this = $(this); if($this.val()==null||$this.val()==""){return;} var valid = validaCNPJ_CPF($(this)); if(valid==false) $this.focus(); }).bind("change keyup input", cpfCnpjFormataEventChangeKeyupInput); $("#radio-cpf, input.radio-cpf, #radio-cnpj, input.radio-cnpj").click(function(){$("#dareEmissaonumeroCpfCnpj, .cpf-cnpj").focus().trigger("keyup")}); formatUtil(); $inputCpfCnpj.each(function(i,item){ item = $(item); if(item.val()==undefined || parseInt(item.val().toString().replace(/\D/g, '')) == 0){ item.val(""); } }); });