CPF e CNPJ no mesmo campo definido pelo tamanho

9,400 views
Skip to first unread message

Chander Valle

unread,
May 22, 2012, 9:04:13 AM5/22/12
to jque...@googlegroups.com
Olá pessoal,

Bem dei uma procurada no fórum mas não achei um solução.
Estou utilizando plugin Mask Input e funciona sem problemas, mas ele não me atende quando quero por mais de uma mascara em um mesmo campo, como CPF e CNPJ, não quero colocar um radio ou um select pra dizer que o campo é um ou outro quero definir isso com o tamanho "length" dele.

Alguém sabe como fazer ? Ou se existe outro plugin que atenda ?

Obrigado.

Wagner Moreira

unread,
May 22, 2012, 9:31:55 AM5/22/12
to jque...@googlegroups.com
Bem interessante isso, também estou a procura




--
Wagner Moreira
Portfolio - [http://www.wagnermoreira.com]
@ero_dev

Flávio Alves Granato

unread,
May 22, 2012, 9:40:20 AM5/22/12
to jque...@googlegroups.com
Acho que seria ou um desenvolmento de um plugin novo com estas características ou é o caso de uma regexp aceitando os dois padrões...

2012/5/22 Wagner Moreira <wagn...@gmail.com>

Tiago Agostinho

unread,
May 22, 2012, 9:43:02 AM5/22/12
to jque...@googlegroups.com

Paulo Eduardo Fagundes Santos

unread,
May 22, 2012, 9:44:54 AM5/22/12
to jque...@googlegroups.com
Caros colegas uso essas por aqui e funciona muito bem.

function chama_mascara(o) {
if (o.value.length > 14)
mascara(o, cnpj);
else
mascara(o, cpf);
}

function mascara(o, f) {
v_obj = o;
v_fun = f;
setTimeout("execmascara()", 1);
}

function execmascara() {
v_obj.value = v_fun(v_obj.value);
}

function telefone(v) {
v = v.replace( /\D/g , ""); //Remove tudo o que não é dígito
v = v.replace( /^(\d\d)(\d)/g , "($1) $2"); //Coloca parênteses em volta dos dois primeiros dígitos
v = v.replace( /(\d{4})(\d)/ , "$1-$2"); //Coloca hífen entre o quarto e o quinto dígitos
return v;
}

function cpf(v) {
v = v.replace( /\D/g , ""); //Remove tudo o que não é dígito
v = v.replace( /(\d{3})(\d)/ , "$1.$2"); //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})$/ , "$1-$2"); //Coloca um hífen entre o terceiro e o quarto dígitos
return v;
}

function cep(v) {
v = v.replace( /D/g , ""); //Remove tudo o que não é dígito
v = v.replace( /^(\d{2})(\d)/ , "$1.$2");
v = v.replace( /(\d{3})(\d{1,2})$/ , "$1-$2"); //Esse é tão fácil que não merece explicações
return v;
}

function cnpj(v) {
v = v.replace( /\D/g , ""); //Remove tudo o que não é dígito
v = v.replace( /^(\d{2})(\d)/ , "$1.$2"); //Coloca ponto entre o segundo e o terceiro dígitos
v = v.replace( /^(\d{2})\.(\d{3})(\d)/ , "$1.$2.$3"); //Coloca ponto entre o quinto e o sexto dígitos
v = v.replace( /\.(\d{3})(\d)/ , ".$1/$2"); //Coloca uma barra entre o oitavo e o nono dígitos
v = v.replace( /(\d{4})(\d)/ , "$1-$2"); //Coloca um hífen depois do bloco de quatro dígitos
return v;
}

Paulo Eduardo Fagundes dos Santos
Analista Desenvolvedor
55 (12) 9159-0648 - paulo....@gmail.com
nobreakpramente.blogspot.com - twitter.com/pauloesantos - Skype: paulo.esantos
"Não vos enganeis: de Deus não se zomba. O que o homem semeia, isso mesmo colherá." - Carta aos Gálatas 6,7


2012/5/22 Tiago Agostinho <tiago.a...@gmail.com>

Giovani Arduini

unread,
May 23, 2012, 8:18:16 AM5/23/12
to jQuery (Brasil)
A solução do Paulo Eduardo Fagundes Santos foi boa, eu ja fiz um pouco
diferente, criei um radioButtom que ao clicar muda o tipo de campo
para CPF ou CNPJ

On 22 maio, 10:44, Paulo Eduardo Fagundes Santos
> 55 (12) 9159-0648 - paulo.esan...@gmail.com
> nobreakpramente.blogspot.com - twitter.com/pauloesantos - Skype:
> paulo.esantos
> "Não vos enganeis: de Deus não se zomba. O que o homem semeia, isso mesmo
> colherá." - Carta aos Gálatas 6,7
>
> 2012/5/22 Tiago Agostinho <tiago.agosti...@gmail.com>
>
>
>
>
>
>
>
> > este link pode te ajudar:
>
> >http://brunobrum.wordpress.com/2010/05/20/mascara-javascript-de-cnpj-...
>
> > Tiago
> >www.linhadecomando.com
>
> > 2012/5/22 Flávio Alves Granato <flavio.gran...@gmail.com>
>
> >> Acho que seria ou um desenvolmento de um plugin novo com estas
> >> características ou é o caso de uma regexp aceitando os dois padrões...
>
> >> 2012/5/22 Wagner Moreira <wagner...@gmail.com>
>
> >>> Bem interessante isso, também estou a procura
>
> >>> Em 22 de maio de 2012 10:04, Chander Valle <chan...@gmail.com> escreveu:
>
> >>> Olá pessoal,
>
> >>>> Bem dei uma procurada no fórum mas não achei um solução.
> >>>> Estou utilizando plugin *Mask Input* e funciona sem problemas, mas ele
> >>>> não me atende quando quero por mais de uma mascara em um mesmo campo, como
> >>>> CPF e CNPJ, não quero colocar um radio ou um select pra dizer que o campo é
> >>>> um ou outro quero definir isso com o tamanho *"length*" dele.
>
> >>>> Alguém sabe como fazer ? Ou se existe outro plugin que atenda ?
>
> >>>> Obrigado.
>
> >>>> --
> >>>> Grupo de jQuery Brasil.
>
> >>>> REGRAS:
> >>>>https://docs.google.com/document/d/1VfvTDmeHTSj-L5ouZJjQQ4OkjTCU1Hr2X...
>
> >>>> USE O JSBIN.COM / JSFIDDLE.NET PARA CÓDIGOS.
>
> >>>> Email: jque...@googlegroups.com
> >>>> Biba: jquery-br+...@googlegroups.com
> >>>> Site:http://groups.google.com/group/jquery-br?hl=pt-BR
>
> >>> --
> >>> Wagner Moreira
> >>> Portfolio - [http://www.wagnermoreira. <http://www.wagnermoreira.com>com]
>
> >>> @ero_dev
>
> >>>  --
> >>> Grupo de jQuery Brasil.
>
> >>> REGRAS:
> >>>https://docs.google.com/document/d/1VfvTDmeHTSj-L5ouZJjQQ4OkjTCU1Hr2X...
>
> >>> USE O JSBIN.COM / JSFIDDLE.NET PARA CÓDIGOS.
>
> >>> Email: jque...@googlegroups.com
> >>> Biba: jquery-br+...@googlegroups.com
> >>> Site:http://groups.google.com/group/jquery-br?hl=pt-BR
>
> >>  --
> >> Grupo de jQuery Brasil.
>
> >> REGRAS:
> >>https://docs.google.com/document/d/1VfvTDmeHTSj-L5ouZJjQQ4OkjTCU1Hr2X...
>
> >> USE O JSBIN.COM / JSFIDDLE.NET PARA CÓDIGOS.
>
> >> Email: jque...@googlegroups.com
> >> Biba: jquery-br+...@googlegroups.com
> >> Site:http://groups.google.com/group/jquery-br?hl=pt-BR
>
> >  --
> > Grupo de jQuery Brasil.
>
> > REGRAS:
> >https://docs.google.com/document/d/1VfvTDmeHTSj-L5ouZJjQQ4OkjTCU1Hr2X...

Felipe Rohde

unread,
May 23, 2012, 10:34:30 AM5/23/12
to jque...@googlegroups.com
nao seria ago mais ou menos assim:

if($(input).val().size()==11)
{
 $(input).mask('999.999.999-99');
}
else if($(input).val().size()==14)
{
 $(input).mask('99.999.999/9999-99');

Giovani Arduini

unread,
May 24, 2012, 8:27:44 AM5/24/12
to jQuery (Brasil)
quase isso, daa uma olhada no cadastro desse site:
https://www.domesticasbrasil.com.br/quero-contratar-cadastro1-pessoal

E inspecione com fire bug do mozila e verá o que aconte, ele troca os
dados do input

On 23 maio, 11:34, Felipe Rohde <fr.ro...@gmail.com> wrote:
> nao seria ago mais ou menos assim:
>
> if($(input).val().size()==11)
> {
>  $(input).mask('999.999.999-99');}
>
> else if($(input).val().size()==14)
> {
>  $(input).mask('99.999.999/9999-99');
>
>
>
>
>
>
>
> }
> On Tuesday, May 22, 2012 10:04:13 AM UTC-3, Chander Valle wrote:
>
> > Olá pessoal,
>
> > Bem dei uma procurada no fórum mas não achei um solução.
> > Estou utilizando plugin *Mask Input* e funciona sem problemas, mas ele
> > não me atende quando quero por mais de uma mascara em um mesmo campo, como
> > CPF e CNPJ, não quero colocar um radio ou um select pra dizer que o campo é
> > um ou outro quero definir isso com o tamanho *"length*" dele.

Franklin Anderson de Oliveira Souza

unread,
May 25, 2012, 8:15:44 AM5/25/12
to jque...@googlegroups.com
Felipe Rohde...

acho a sua solucao melhor ainda, mas creio que só funcionaria com sucesso com o uso do unbind() para resetar o campo antes de inserir uma nova mascara !!

--
Grupo de jQuery Brasil.




--
foobar

Eduardo Kraus

unread,
May 25, 2012, 9:59:01 AM5/25/12
to jque...@googlegroups.com
Eu aconselho você usar um Radio button para selecionar ambos os campos.

                 <div>
    <label>&nbsp;</label>
    <input type="radio" value="cpf" name="documento" checked="checked"> CPF
    <input type="radio" value="cnpj" name="documento"> CNPJ
    </div>
               <div id="cpf">
    <label for="documentoCPF">CPF <span>*</span></label>
    <input type="text" name="documentoCPF" id="documentoCPF" class="cpf required" maxlength="14">
    </div>
                <div id="cnpj" style="display: none;">
    <label for="documentoCNPJ">CNPJ <span>*</span></label>
    <input type="text" name="documentoCNPJ" id="documentoCNPJ" class="cnpj" maxlength="18">
    </div>

    jQuery("input[name=documento]:radio").change(
    function(){
    if( jQuery("input[name=documento]:radio:checked").val() == 'cpf' )
    {
    jQuery("#cnpj").hide();
    jQuery("#documentoCNPJ").removeClass('required');
    jQuery("#cpf").show();
    jQuery("#documentoCPF").addClass('required');
    }
    else
    {
    jQuery("#cnpj").show();
    jQuery("#documentoCNPJ").addClass('required');
    jQuery("#cpf").hide();
    jQuery("#documentoCPF").removeClass('required');
    }
    }
    );

Eduardo Kraus
Professor
kr...@eduardokraus.com
www.eduardokraus.com
Blog PHP php.eduardokraus.com
Blog Adobe Flex flex.eduardokraus.com





--

Ruan Carlos

unread,
May 25, 2012, 10:12:17 AM5/25/12
to jque...@googlegroups.com
Eduardo jsfiddle.net por favor.
-----------------------------------------------------------------
Ruan Carlos
@ruanltbg
www.ruancarlos.com.br
www.jquerybrasil.org
Bacharel em Sistemas de Informação - Desenvolvedor web

Marcelo Filho

unread,
May 25, 2012, 3:55:16 PM5/25/12
to jque...@googlegroups.com
Também acho que usar um radio buttom uma ótima solução, além de ser bastante intuitivo.

Mas em um caso especial que fiz aqui, quando o usuário vai cadastrar uma pessoa, ele tem que selecionas se ela é pessoa física ou jurídica, dependendo da escolha ele puxa uma tela com as mascaras já definidas. mas o manipulador de dados é igual.

Felipe Oriani

unread,
May 28, 2012, 7:44:42 AM5/28/12
to jque...@googlegroups.com
Pessoal, desculpa levantar a thread novamente, mas vocês costumam persistir no banco de dados, formatado mesmo ou removem a formatação em server-side?

[]s


2012/5/25 Marcelo Filho <marcel...@gmail.com>
Também acho que usar um radio buttom uma ótima solução, além de ser bastante intuitivo.

Mas em um caso especial que fiz aqui, quando o usuário vai cadastrar uma pessoa, ele tem que selecionas se ela é pessoa física ou jurídica, dependendo da escolha ele puxa uma tela com as mascaras já definidas. mas o manipulador de dados é igual.

--



--
______________________________________
Felipe B. Oriani
Contato: (19) 9611-8646 / (19) 3421-7850

"...Trabalhe quanto puder, tornando-se útil quanto possível..." , por André Luiz


Marcelo Filho

unread,
May 28, 2012, 2:37:34 PM5/28/12
to jque...@googlegroups.com
no meu caso depende, se eu tenho um atributo chamado "CPF" e outro chamado "CNPJ" (eu não acho essa uma boa prática) posso guarda-la formatada, mas se eu tenho somente um atributo no banco, "CPF/CNPJ" então eu a guardo sem formatação e aplico a mesma quando tenho que apresentar na tela.

--
Não tenho vergonha de mudar de idéia, porque não tenho vergonha de pensar.

Blaise Pascal

Eduardo Kraus

unread,
May 28, 2012, 11:28:58 PM5/28/12
to jque...@googlegroups.com
Eu sempre guardo formatado...

Não formatado, pode, disse "pode" causar erro pelo zero no início.

Ex: o CNPJ 00.000.001/0001-xx pertence ao banco do Brasil.....

Gilton Guma

unread,
May 29, 2012, 7:51:57 AM5/29/12
to jque...@googlegroups.com
Particularmente, guardo apenas como string sem formatações, pois se existir a necessidade de se aumentar seu tamanho e/ou mudar a mascara altera-se somente no layout. Um exemplo que está acontecendo atualmente é com os padrões de IP's, que estão mudando de IPV4 pra IPV6, se fosse o caso poderia ter alterado sua máscara e quem tivesse salvo mascarado teria mais trabalho do que quem salvou apenas números.

Espero ter ajudado! ;)
Reply all
Reply to author
Forward
0 new messages