none
Help com javascript cnpj e cpf RRS feed

  • 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

    terça-feira, 9 de julho de 2013 03:38

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
    terça-feira, 9 de julho de 2013 12:20

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
    terça-feira, 9 de julho de 2013 12:20
  • 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

    terça-feira, 9 de julho de 2013 15:41
  • 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! 

    terça-feira, 9 de julho de 2013 18:07