Usuário com melhor resposta
Help com javascript cnpj e cpf

Pergunta
-
OLá pessoal,
estou tentando utilizar o seguinte código javascript e não sei pq ao informar o cnpj ele só formata corretamente o cnpj ao digitar um digito adicional exemplo o meu cnpj é : 92.787.530/0001-88 apenas quando acrescento um digito depois do 88 que ele faz a formatação corretamente.<script type="text/javascript"> function soNumeros(d) { return d.replace(/\D/g, "") } function mascara(el, masc) { el.value = masc(el.value) } //por ora eh o que funciona function mascaraMutuario(o, f) { v_obj = o v_fun = f setTimeout('execmascara()', 1) } function execmascara() { v_obj.value = v_fun(v_obj.value) } function cpfCnpj(v) { //Remove tudo o que não é dígito v = v.replace(/\D/g, "") if (v.length <= 14) { //CPF //Coloca um ponto entre o terceiro e o quarto dígitos v = v.replace(/(\d{3})(\d)/, "$1.$2") //Coloca um ponto entre o terceiro e o quarto dígitos //de novo (para o segundo bloco de números) v = v.replace(/(\d{3})(\d)/, "$1.$2") //Coloca um hífen entre o terceiro e o quarto dígitos v = v.replace(/(\d{3})(\d{1,2})$/, "$1-$2") } else { //CNPJ //coloca ponto entre o segundo e o terceiro dígitos v = v.replace(/^(\d{2})(\d)/, "$1.$2") //coloca ponto entre o quinto e o sexto dígitos v = v.replace(/^(\d{2})\.(\d{3})(\d)/, "$1.$2.$3") //coloca uma barra entre o oitavo e o nono dígitos v = v.replace(/\.(\d{3})(\d)/, ".$1/$2") //coloca um hífen depois do bloco de quatro dígitos v = v.replace(/(\d{4})(\d)/, "$1-$2") } return v } </script>
no html fica assim :
<asp:TextBox ID="txtcnpj_cpf" runat="server" MaxLength="18" Width="115px" onkeypress="mascara(this,cpfCnpj)" onkeyup="mascara(this,cpfCnpj)" onblur='clearTimeout()'/>
Agraço pela ajuda, eu já pedi ajuda do próprio autor que criou esse javascript mas ele não responde se alguém puder ajudar agradeço imensamente. abs
Abs, Adriano_SP
Respostas
-
Olá Adriano,
Testei o javascript aqui e realmente estava com problema, fiz um ajuste e alguns testes e agora esta funcionando.
function soNumeros(d) { return d.replace(/\D/g, "") } function mascara(el, masc) { el.value = masc(el.value) } //por ora eh o que funciona function mascaraMutuario(o, f) { v_obj = o v_fun = f setTimeout('execmascara()', 1) } function execmascara() { v_obj.value = v_fun(v_obj.value) } function cpfCnpj(v) { //Remove tudo o que não é dígito v = v.replace(/\D/g, "") if (v.length <= 11) { //CPF //Coloca um ponto entre o terceiro e o quarto dígitos v = v.replace(/(\d{3})(\d)/, "$1.$2") //Coloca um ponto entre o terceiro e o quarto dígitos //de novo (para o segundo bloco de números) v = v.replace(/(\d{3})(\d)/, "$1.$2") //Coloca um hífen entre o terceiro e o quarto dígitos v = v.replace(/(\d{3})(\d{1,2})$/, "$1-$2") } else { //CNPJ //coloca ponto entre o segundo e o terceiro dígitos v = v.replace(/^(\d{2})(\d)/, "$1.$2") //coloca ponto entre o quinto e o sexto dígitos v = v.replace(/^(\d{2})\.(\d{3})(\d)/, "$1.$2.$3") //coloca uma barra entre o oitavo e o nono dígitos v = v.replace(/\.(\d{3})(\d)/, ".$1/$2") //coloca um hífen depois do bloco de quatro dígitos v = v.replace(/(\d{4})(\d)/, "$1-$2") } return v }
Se a resposta for útil, não esqueça de marcar como resposta ;)
Abraço!
- Editado Alexandre Rapaki terça-feira, 9 de julho de 2013 12:23 edit
- Sugerido como Resposta Alexandre Rapaki terça-feira, 9 de julho de 2013 12:25
- Marcado como Resposta Adriano_SP terça-feira, 9 de julho de 2013 15:36
Todas as Respostas
-
Olá Adriano,
Testei o javascript aqui e realmente estava com problema, fiz um ajuste e alguns testes e agora esta funcionando.
function soNumeros(d) { return d.replace(/\D/g, "") } function mascara(el, masc) { el.value = masc(el.value) } //por ora eh o que funciona function mascaraMutuario(o, f) { v_obj = o v_fun = f setTimeout('execmascara()', 1) } function execmascara() { v_obj.value = v_fun(v_obj.value) } function cpfCnpj(v) { //Remove tudo o que não é dígito v = v.replace(/\D/g, "") if (v.length <= 11) { //CPF //Coloca um ponto entre o terceiro e o quarto dígitos v = v.replace(/(\d{3})(\d)/, "$1.$2") //Coloca um ponto entre o terceiro e o quarto dígitos //de novo (para o segundo bloco de números) v = v.replace(/(\d{3})(\d)/, "$1.$2") //Coloca um hífen entre o terceiro e o quarto dígitos v = v.replace(/(\d{3})(\d{1,2})$/, "$1-$2") } else { //CNPJ //coloca ponto entre o segundo e o terceiro dígitos v = v.replace(/^(\d{2})(\d)/, "$1.$2") //coloca ponto entre o quinto e o sexto dígitos v = v.replace(/^(\d{2})\.(\d{3})(\d)/, "$1.$2.$3") //coloca uma barra entre o oitavo e o nono dígitos v = v.replace(/\.(\d{3})(\d)/, ".$1/$2") //coloca um hífen depois do bloco de quatro dígitos v = v.replace(/(\d{4})(\d)/, "$1-$2") } return v }
Se a resposta for útil, não esqueça de marcar como resposta ;)
Abraço!
- Editado Alexandre Rapaki terça-feira, 9 de julho de 2013 12:23 edit
- Sugerido como Resposta Alexandre Rapaki terça-feira, 9 de julho de 2013 12:25
- Marcado como Resposta Adriano_SP terça-feira, 9 de julho de 2013 15:36
-
Valeu Alexandre show de bola, tb havia feito um test apenas alterando o script inicial para < 14 ao invés de <=14 e funcionou tb.
Agora só mais um detalhe saberia me dizer como eu poderia colocar uma validação pra saber se o cpf é válido ou não eu já tenho o seguinte script que funciona perfeitamente mas como o campo serveria para cpf e cnpj eu não sei como inserir no input o meu script que se fosse apenas cpf ficaria onblur="javascript: validarCPF(this.value);"
Agradeço novamente pela ajuda.Abs, Adriano_SP
-
Olá Adriano,
Você pode colocar a chamada para a função que valida o CPF no evento onblur, ficaria assim:
onchange="validarCPF(this.value);"
Dentro da tua function validarCPF(this.value) tu pode validar se existe 11 dígitos, se tiver ele faz a validação.. ficariam algo assim:
function validarCPF(v) { v = v.replace(/\D/g, "") if (v.length == 11) { //executa toda a validação aqui } }
Se a resposta for útil, não esqueça de marcar como resposta ;)
Abraço!