Agregando conhecimento…
Recentemente tive “corrigir” um pequeno problema que ocorre no navegador do Google, o Chrome. A validação de data do jQuery.validate faz a verificação da data pelo formato americano, ou seja, se você informasse 30/05/2009 (30 de maio, ou qualquer outro dia maior que 12) o validate interpreta no Chrome como dia 5 do mês 30. Beleza, vou procurar um método para validar a data para a localidade brasileira.
Procurando este método encontrei também o metodo para validar data hora e CPF. Daí pensei, deve ter também do CNPJ, procurei por algum tempo e não encontrei. Dando uma olhada no código do CPF, percebi que é bem fácil de implementar um método novo ao validate. Eu já tinha visto outras funções para validar CNPJ, no meu blog mesmo tem um gerador de CPF/CNPJ, para quem quiser testar o método que implementei sinta-se a vontade XD.
Uma observação importante, se vocês encontrarem algum bug, erro, testarem em outros navegadores E NÃO FUNCIONAR, ou simplemente se vocês quiserem elogiar o meu esforço de implementar este método ao validate, comentem a vontade.
Não vou explicar aqui o funcionamento da validação, nem o calculo do digito verificador, nem que a casa da moeda… é deixa pra lá. XD
Chega de delongas e vamos ao código, abaixo coloquei o método e o exemplo de como utilizá-lo com o validate. Nos arquivos disponíveis tem o exemplo funcionando.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Testando validate com novos módulos</title> <script type="text/javascript" src="http://www.shiguenori.com/jquery/jquery-1.3.1.js"></script> <script type="text/javascript" src="jquery.validate.js"></script> <script type="text/javascript"> /* * * NOVO METODO PARA O JQUERY VALIDATE * VALIDA CNPJ COM 14 OU 15 DIGITOS * A VALIDAÇÃO É FEITA COM OU SEM OS CARACTERES SEPARADORES, PONTO, HIFEN, BARRA * * ESTE MÉTODO FOI ADAPTADO POR: * * Shiguenori Suguiura Junior <junior@dothcom.net> * * http://blog.shiguenori.com * http://www.dothcom.net * */ jQuery.validator.addMethod("cnpj", function(cnpj, element) { cnpj = jQuery.trim(cnpj);// retira espaços em branco // DEIXA APENAS OS NÚMEROS cnpj = cnpj.replace('/',''); cnpj = cnpj.replace('.',''); cnpj = cnpj.replace('.',''); cnpj = cnpj.replace('-',''); var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais; digitos_iguais = 1; if (cnpj.length < 14 && cnpj.length < 15){ return false; } for (i = 0; i < cnpj.length - 1; i++){ if (cnpj.charAt(i) != cnpj.charAt(i + 1)){ digitos_iguais = 0; break; } } if (!digitos_iguais){ tamanho = cnpj.length - 2 numeros = cnpj.substring(0,tamanho); digitos = cnpj.substring(tamanho); soma = 0; pos = tamanho - 7; for (i = tamanho; i >= 1; i--){ soma += numeros.charAt(tamanho - i) * pos--; if (pos < 2){ pos = 9; } } resultado = soma % 11 < 2 ? 0 : 11 - soma % 11; if (resultado != digitos.charAt(0)){ return false; } tamanho = tamanho + 1; numeros = cnpj.substring(0,tamanho); soma = 0; pos = tamanho - 7; for (i = tamanho; i >= 1; i--){ soma += numeros.charAt(tamanho - i) * pos--; if (pos < 2){ pos = 9; } } resultado = soma % 11 < 2 ? 0 : 11 - soma % 11; if (resultado != digitos.charAt(1)){ return false; } return true; }else{ return false; } }, "Informe um CNPJ válido."); // Mensagem padrão // QUANDO O DOCUMENTO ESTIVER PRONTO $(document).ready(function(){ // CONFIGURA A VALIDACAO DO FORMULARIO $("#meuForm").validate({ rules: { titulo: {required: true}, data_galeria: {required: true, dateBR: true}, cnpj: {cnpj: true} }, messages: { titulo: {required: 'Informe o titulo'}, data_galeria: {required: 'Informe a data', dateBR: 'Digite uma data válida'}, cnpj: { cnpj: 'CNPJ inválido'} } ,submitHandler:function(form) { alert('ok'); } }); $('#result').html('jQuery Validate com novos métodos: cpf, cnpj, dateBR e dateTimeBR'); }); </script> </head> <body> <div id="result"></div> <form id="meuForm" action=""> <label>Título</label> <input id="titulo" name="titulo" type="text" value="" /><br /> <label>Data</label> <input id="data_galeria" name="data_galeria" type="text" value="" /><br /> <label>CNPJ</label> <input id="cnpj" name="cnpj" type="text" value="" /><br /> <input type="submit" value="Enviar" /> </form> </body> </html> |
jquery-1.3.1.js
jquery.validate.js com novos métodos
Exemplo On-line
Exemplo Comprimido
ATUALIZAÇÃO
Galera estou atualizando o post, abaixo os links das atualizações do jQuery 1.5.1 e do jQuery.validate 1.7 no arquivo do validate estou deixando os mesmos arquivos que é disponibilizado no site do bassistance.de entre os arquivos estão alguns plugins opcionais (um para ajax e outro para meta-data) e um arquivo chamado additiona-methods.js que contem algumas funções úteis e outras uteis para outros paises. Também disponibilizo um arquivo que juntei os métodos comentados ou que fizemos por causa da solicitação de algumas pessoas:
jquery-1.5.1.min.js (quem quiser a versão não minimizada baixe do site oficial)
jQuery.validate 1.7 (inclui plugins opcionais, novos métodos e demonstração)
Métodos comentados (tudo o que agente falou por aqui)
OBS.: nos métodos comentados eu atualizei os métodos CPF e CNPJ, deixando os como opcionais, para que eles sejam obrigatórios lembrem-se de utilizar o método required:true. Lembrem também de utilizar o atributo name ou classe diferente de cpf ou cnpj para que a validação não seja chamada automaticamente.
Página para publicar e armazenar conteúdo relacionado a Desenvolvimento Web:
PHP, MySQL, Javascript, JQuery, CSS e as novas tecnologias do momento.
Façam comentários, perguntas e sugestões que ficarei satisfeito por recebê-los.
Shiguenori Junior
Valor diferente com jQuery validate | Shiguenori
maio 30th, 2009 at 14:24
[...] de ter adaptado o método de CNPJ para o validate, fiz um outro método que não sei por qual motivo não estava presente no source [...]
Luiz Henrique
junho 8th, 2009 at 23:37
Cara meus parabens, com sua adptaçao tive uma oa base para, inplementar funcões no jquery, sou um iniciante mais sou curioso.
Muito obrigado por ter disponibilizado seu trabalho.
Grande Abraço!
Ingo Hoffmann
junho 26th, 2009 at 11:56
Meu ídolo!
Lucio
julho 21st, 2009 at 17:29
Ao inves de exibir as labels em vermelho, eh possivel optar apenas pelos inputs (type text) com borda vermelha? nao estou conseguindo mexer nesse plugin.!!
Junior
julho 23rd, 2009 at 11:04
Sim, é possível fazer isto. Você especifica a regra e na mensagem você deixa em vazio:
Daí é só fazer o CSS para o input ficar com a borda, mais ou menos assim: input.error{ border:red solid 1px; }
Para mexer com esse plugin você precisa colocar os scripts do jquery e do validate, ai na página você adiciona um código semelhante ao que escrevi ai em cima, só que você troca “seu_formulario” pela id que você coloca no seu form, em rules(regras) você define quais campos são obrigatórios e suas condições, messages são as mensagens correspondente as regras.
Qualquer coisa explique melhor sua dúvida ou publique em algum servidor o código que darei uma olhada
Lucio
julho 24th, 2009 at 17:08
Ola Junior..
Obrigado pela dica, funcionou numa boa.
Valew mesmo!!
Alex Sandro
julho 27th, 2009 at 0:41
Olá, parabens pelas dicas. Uma dificuldade que estou tendo aqui, onde coloco o action do form? Ele nao executa, certo? Como chamo esta pagina (que é PHP) atraves do trecho:
submitHandler: function(form){
// processa os dados
}
Abraços
Junior
julho 28th, 2009 at 19:15
Ai depende de como você envia ou trata os dados e como você vai recebê-los:
Se você quer apenas enviar você pode suprimir as linhas do “submitHandler”, ou por exemplo, você pode apenas submeter o formulário usando “form.submit();” dai ele vai enviar pro action do seu form utilizando o método definido ou GET caso omitido. Você pode usar requisções ajax utilizando o próprio jQuery (o que recomendo) com o $.post, $.get ou a função que você preferir ou achar melhor.
Fabio
agosto 9th, 2009 at 11:03
Olá Júnior,
Excelente artigo, mas será que poderia me ajudar ?
Preciso que a validação apareça em uma div modal, quase semelhante ao logtbox. Na realidade aparecer tipo um “balão” de história em quadrinho.
Poderia me ajudar ?
Junior
agosto 17th, 2009 at 20:29
Opa, estamos aqui para isso. Primeiro como vai ser aberta essa div? Clique, envio de formulário, ou as ações vão acontecer dentro da janela?
Qualquer coisa também tem os plugins:
Click Modal
SimpleModal
Tickbox
Além dos plugins que eu escrevi aqui também:
SeekAttention
Impromptu
Alerts
Este são alguns exemplos de ‘janelas modais’, caso você queira algo mais personalizado, publique uma imagem ou esboço do que você quer, que eu vejo o que posso fazer. Já fiz vários exemplos (profissionalmente) de formulários para lembrar senha:
Clique em “Esqueci minha senha”
No topo clique na interrogação “?”
No topo clique em “ESQUECEU SUA SENHA?”
Frederico Mottinha de Figueiredo
agosto 27th, 2009 at 19:34
Boa iniciativa! Obrigado por compartilhar!
Alexandre
outubro 28th, 2009 at 21:33
Quase chorei quando encontrei este código.
Adaptei algo no que já tinha e deu tudo certo….
Obrigado Mesmo!!!!!
CARLOS M.
novembro 6th, 2009 at 9:45
amigo, utilizando o sua implementação (que está ótimo), tenho um mesmo campo que recebe CPF ou CNPJ, dependendo da quantidade de caracteres, quero validar com um ou outro, qual a melhor forma de fazer isto?
Abraço e obrigado, Carlos
Junior
novembro 10th, 2009 at 9:26
Essa vai de bandeija. Eu já fiz isso num formulário de cadastro, no HTML eu inseri dois input radio com as ids #pessoaFisica e #pessoaJuridica, um input text com a id/name #cpf_cnpj, daí o script eu fiz da seguinte maneira:
OBS: eu não tratei a quantidade de caracteres, mas você pode implementar isso no clicar de cada input radio. Eu não achei necessário isto porque o script de validação não deixa passar se você informar um campo que não for o marcado, por exemplo: Se tiver marcado Pessoa Física, precisa ser informado CPF, se eu mudar o input para Pessoa Juridica, e tentar enviar o formulário aparece a mensagem para informar o CNPJ e vice-versa. Qualquer coisa estamos ai pra resolver.
allan
novembro 12th, 2009 at 8:37
cara n funciona no Interlixo Bostaesplorer(vulgarmente conhecico como IE)
Junior
novembro 12th, 2009 at 15:33
Em qual dos navegadores não deu certo para você? Que tipo de teste você fez? Todos os testes que fiz em IE6, IE7, IE8, FF3, Chrome foram positivos. Diga-nos qual foi o problema para que agente possa viabilizar uma solução. Fico aguardando.
allan
novembro 12th, 2009 at 22:50
fiz o teste no IE7 e não funcionou, no FF funcionou numa boa.
no IE não funcionou nada
allan
novembro 12th, 2009 at 22:52
eu tb queria um codigo que valide cpf, como seria para validar o cpf no JQuery
allan
novembro 13th, 2009 at 5:20
seu código ta muito 10…
só faltou o codigo para validar cpf(esse só valida cnpj)
Carlos M
novembro 19th, 2009 at 9:55
Amigo, obrigado pela dica anterior, foi 100%, agora tenho mais 2 dúvidas sobre o mesmo assunto.
1° quero implementar a crítica para evitar duplicidade de CNPJ, criei uma função ajax para retornar o cliente passando o cnpj. Se o cpf for válido, criar mais um regra para validar a existência de duplicidade.
2° o validate funciona apenas quando clico no submit, como faze-lo funcionar no evento onChange do campo?.
Abraço, Carlos.
Junior
novembro 23rd, 2009 at 14:50
Deixa eu ver se entendi, você quer permitir a postagem de um conteúdo para CNPJ únicos certo?
1º – Sabe na dica anterior, quando coloquei uma condição para verificar se um checkbox estava marcado? Para verificar via ajax se um CNPJ ou qualquer outro termo já foi inserido, eu aconselho colocar um campo oculto com o nome “cnpj_usado” com valor vazio. Daí no retorno do seu AJAX você insere algum valor neste campo oculto. No validate você faz a condição em cima do campo oculto.
2º Se você precisa mesmo que seja validado pelo change de um select, tente utilizar:
Mas acredito que se você fizer o que disse na primeira questão isso não será necessário. Qualquer coisa pergunta ai.
Matheus Lucas
novembro 25th, 2009 at 11:18
Ola junior, gostaria de saber como deixar o validate de cnpj não ser obrigatorio. vi que por default, vc inserindo a classe “cnpj” no input, ele sempre deixará o input como required, obrigatorio… gostaria de configurar ele como nao obrigatorio, se o usuario inserir os dados, ele valida, se nao, ele nao reclama… nao sei se vc entendeu.
o resto esta tudo funcionando blz, muito bom seu blog.
parabens !
Junior
novembro 26th, 2009 at 9:49
E aí, Matheus tudo bem? Para tornar um campo não obrigatório retire a regra required: true
Nem precisa adicionar classe, a função puxa pelo atributo name do input, na função eu deixei o name padrão de cnpj, isso faz com que todo input que tenha o atributo name=”cnpj” (desde que o formulário passe pelo validate) seja obrigatório. Para contornar isso você pode ou mudar o name do input (input name=”cnpj_cliente”) ou entra no código da função e altera o valor do campo “cnpj” para um nome menos comum. Fique a vontade para fazer essa alteração.
Caso você faça essa alteração, toda vez que você quiser tornar o campo como obrigatório você usa a regra required: true.
Qualquer coisa é só perguntar.
Junior
novembro 26th, 2009 at 9:55
@allan desculpa não ter respondido antes, mas nessa versão do validate que disponibilizo, tem a função para validar CPF também. Seu uso é semelhante ao do CNPJ, na regra você coloca algo como:
cpf_cliente: {cpf: true}
Matheus Lucas
novembro 26th, 2009 at 14:56
Grande Junior,
avaliando seu codigo com mais calma, pude concluir que ele não aceita cnpj vazio. Desta forma tomei a liberdade de alterar seu codigo da seguinte forma…
//anteriormente
if (cnpj.length < 14 && cnpj.length < 15){
return false;
}
// para atender meu problema fiz o seguinte:
if (cnpj.length < 14 ){
if (cnpj.length != 0)
return false;
else
return true;
}
Para finalizar, chamo a atencao para sua condicional:
todo cnpj que for menor que 14, obrigatoriamente é menor que 15 assim os unicos numero que atendem sua condicao sao os menores que 14 logo basta apenas verificar se cnpj < 14.
Mesmo assim obrigado pelo auxilio,
abracao,
rodrigo de melo
dezembro 22nd, 2009 at 16:45
amigão… me ajudou muito.. valew pela ajuda, ótimo trabalho
rodrigo de melo
dezembro 22nd, 2009 at 16:48
utilizei esse script para validar o cpf…
$(“#form”).validate({
rules: {
cpf: {cpf: true }
},
submitHandler: function(form){
// processa os dados
}
rodrigo de melo
dezembro 22nd, 2009 at 16:55
foi mal postei errado…
é esse:
$(“#form”).validate({
rules: {
cpf: {cpf: true }
}
gisele
janeiro 18th, 2010 at 17:17
gostei muiiito, estava a algumas horas procurando um bom validador.
só fiquei com um problema….
estou usando seu exemplo para cpf ou cnpj, porem eu consigo clicar nos dois input radio, como eu bloqueio para se eu clicar em cpf e depois em cnpj ele desmarcar o cpf e permanecer apenas o cnpj… por ex.
como ficou:
Pessoa Física
pessoa Juridica
Junior
janeiro 27th, 2010 at 19:19
@gisele eu já tive que fazer essa validação, eu fiz da seguinte maneira:
Fiz isso no site do Agroline no cadastro de clientes
Joni Wilson
janeiro 29th, 2010 at 19:28
Pois bem estou com dois problemas, quando peço pra validar o cpf, da erro:
Mensagem: ‘$.validator.methods[...]‘ é nulo ou não é um objeto,
estou fazendo assim:
rules: {
cpf: {cpf: true}
},
outra coisa: como posso fazer a validação tanto de cpf quanto de cnpj num mesmo campo?, isto sem utilizar radio button, ou outro apenas na digitação dos numeros no campo? Ou seja o usuario ditaga nº de cpf o script verifica se é valido, ou se digita cnpj verirfca se é valido?
Obrigado Junior.
Gisele
fevereiro 1st, 2010 at 15:10
Junior, muito bom seu exemplo, eu estou usando com sua dica do seleção com radio button para cpf ou cnpj
Mas o cliente não quer assim: ele quer que o sistema faça sozinho, sele informar 11 caracters ele valide por cpf e se ele informar 14 ele valide por cnpj… mas estou tentando, e me batendo para fazer,
Se souber em dar uma luz…agradeço
Como estou fazendo hoje para contar os caracteres esta abaixo, porem não consigo juntar os dois… alguma maneira mais pratica?
Junior
fevereiro 1st, 2010 at 15:23
@Joni Wilson primeiramente, verifique se você baixou os métodos que implementei, segundo com a parte de código que você postou não dá para saber muito (fora a virgula do final, se não tiver mais código para baixo).
@Joni Wilson e @Gisele vocês querem tudo de mão-beijada não é galera? Mas aqui vai, nessa situação que vocês mencionaram eu faria da seguinte forma:
Aqui vai a demonstração para quem quiser conferir, havendo dúvidas escrevam aí que agente tenta resolver. Até mais.
Carlos Henrique
fevereiro 2nd, 2010 at 17:26
Olá Junior,
Primeiramente parabéns! estava procurando essa função e logo na primeira posição do google já encontrei.
Estou tentando utilizar, porém, em meu campo de cpf só quero que valide se tiver algum valor pois o campo não é obrigatório.
Tentei utilizar
…
rules: {
cpf: false
}
.. mas continua validando
depois tentei:
rules: {
cpf: function(element) {
if($(“#cpf”).val().length){ return true; }
}
}
.. e também continua
Poderia dar uma dica?
Obrigado,
Carlos Henrique
Junior
fevereiro 3rd, 2010 at 17:51
@Carlos Henrique essa é fácil e rápida, mude o nome do campo ou classe (se tiver) de ‘cpf’ para qualquer outro. Isso não chega nem a ser bug, os métodos do validate utilizam os atributos name e class para chamar a validação também. Se você mudar o name/class irá resolver.
homemrobo
fevereiro 20th, 2010 at 19:49
Ei donburi, digita 10 zeros e um espaço em branco e vê se valida. Aqui ele passa. Belo código. Abraço.
Junior
fevereiro 22nd, 2010 at 16:23
@homemrobo Donburi ou do twitter?
Como deixei bem claro (ou tentei deixar), eu apenas implementei o método, esta validação de CNPJ já encontrei a algum tempo. Se o problema for só espaços em branco no inicio adicione a função Jquery.trim()
Os scripts disponíveis para download já foram corrigidos, obrigado por reportar esta falha até mais…
André Gama
março 18th, 2010 at 15:16
Olá Junior, sem comentários… FANTÁSTICO!! Estou tentando fazer uma coisa diferente, tentei me basear no agroline mas mesmo assim não está dando certo
Seguinte… tenho que definir pessoa física e pessoa jurídica… Preciso “esconder” campos e “mostrar” outros… Consegui fazer por style para esconder e mostrar, mas ele não deixa avançar porque está tentando validar no “backstage”…
Se fosse somente em um campo “trocar” a por b ia na boa… mas simur um e aparecer outro não sei como… Imagine que tenho 4 ou 5 campos diferentes para cada opção… O que sugere?? Obrigado!! Ps. O que acontece se o browser tiver scripts desabilitados? No ie 6 rola legal? Obrigado pelo material fascinante do seu blog… Cada dia gosto mais do Jquery e AJAX hehehehe… Ps. Li que você está interessado em Ruby… Vc é de SP? abs.
Junior
março 23rd, 2010 at 11:52
@André Gama tudo bom? primeiramente veja se as minhas respostas não te ajudam dia 10 de novembro 2009 e 01 de feveriro de 2010, com esses exemplos vc pode chegar aonde quer.
Só para esclarecer, o seu formulário possui as opções pessoa física e jurídica. Sendo pessoa física informa apenas o nome e cpf, pessoas jurídicas precisam informar nome, cnpj, razão social, nome fantasia, entre outros certo? Dê uma olhada nos comentários que fiz, você precisará colocar em “rules” funções com estruturas condicionais para fazer este tipo de validação. Só para vc entender melhor: vc adiciona a regra “required” atribuindo uma função nela vc verifica se pessoa jurídica marcada retorna verdadeiro. Isso vc faz para todos os itens obrigatórios para as pessoas jurídicas.
Sim estou interessado em aprender (do zero) Ruby, e não sou de SP sou de Campo Grande/MS se vc puder me passar uns links para iniciantes eu fico agradecido.
Rodrigo
abril 12th, 2010 at 13:02
Ola pessoal,
Estou começando a mexer com Jquery, no qual estou curtindo, so estou me batendo no seguinte: meu script é todo em php, tals, meu action do meu form manda para um arquivo inclusao.php.
eu li nos posts dos colegas que o envio é feito na funcao em:
,submitHandler:function(form) {
So nao estou conseguindo implementar aqui, algum colega pode me da uma força.
Grato desde ja,
Rodrigo
Junior
abril 12th, 2010 at 13:21
@Rodrigo com o plugin validate você pode enviar os dados do formulário (ou qualquer dado da página) de várias maneiras. Se você omitir a parte do ‘submitHandler’, após passar pelas regras(rules – se tiver) o formulário será enviado para o action do form, ou via get se vc não colocou nada no atributo ‘method’. Você pode enviar por debaixo dos panos (sem dar refresh na página) utilizando as funções $.post(), $.get(), $.ajax(), $.load() entre outras.
Você pode especificar funções callback para fazer o retorno. Pode parecer complicado no começo esse negócio de função de retorno, mas é muito útil e prático. No seu caso seria algo como:
lucas
maio 5th, 2010 at 14:30
muito bom curti pakas o codigo era o que precisava não encontrava nada que pudesse me ajudar. abrax
Marcelo Cajaíba
maio 19th, 2010 at 23:57
Galera eu tenho um codigo que adiciona campo mas dá o seguinte problema não funciona com vetor
tipo digamos que eles duplica
Aqui está o codigo de duplicar
[editado]
Junior
maio 20th, 2010 at 11:25
@Marcelo Cajaíba não entendi bem sua dúvida, vc quer adicionar campos com vetor? Como está seu formulário? É um campo para e-mail com um botão “Adicionar e-mail”? Eu fiz um formulário que duplica uma linha (tagf TR) com nove campos de formulário. Veja se é algo parecido com isso, nesse caso a duplicação acontece no blur do campo “Nome” (quando preenchido):
http://www.nelorems.org/inscricoes/form/1/prova-ganho-de-peso.html
Veja o código fonte do html para vc entender melhor. Qualquer coisa é só falar.
Junior
maio 25th, 2010 at 17:11
Galera, atendendo um pedido adaptei o método para comparação(maior que e menor que)
Para quem quiser conferir clique aqui
Marcelo Cajaíba
julho 29th, 2010 at 11:48
Galera estou fazendo da seguinte forma só que o cpf aparece com problema pois ele valida mesmo ser for pesso juridica , estou colocando campos separados por causa da mascara.
o cnpj funciona perfeitamente se eu colocar pesso juridica e se eu colocar pesso fisica ele não valida , ficou correto já o cpf valida sempre.
cnpj: { required: ‘ Informe o CNPJ !’, cnpj: ‘ CNPJ inválido’ },
cpf: { required: ‘ Informe o cpf !’,cpf: ‘ CPF Inválido !’ },
Marcelo Cajaíba
julho 29th, 2010 at 11:49
ops errei o codigo é esse pessoal
cpf: {required: “#fisica:checked”,cpf:true},
cnpj: {required: “#juridica:checked”,cnpj: true},
Junior
julho 31st, 2010 at 18:11
@Marcelo Cajaíba vc já viu um comentário acima o input do CPF está com a classe ‘cpf’?
Marco Aurélio
outubro 14th, 2010 at 20:16
Junior, parabéns pela iniciativa de compartilhar seus conhecimentos….estou com uma dúvida, se puder me ajudar agradeço bastante.
Eu tenho um campo de telefone e um de celular. eu quero que apenas 1 deles seja obrigatório, isto é, a pessoa poderá preencher só o telefone ou só o celular.
como posso fazer isso usando jquery validate?
muito obrigado!
Junior
outubro 16th, 2010 at 12:00
@Marco Aurélio basicamente você coloca uma função no “required”. Já tentou isso?
Marco Aurélio
outubro 16th, 2010 at 16:40
não…na verdade eu sei fazer o básico, mas algumas coisas mais avençadas to aprendendo ainda…..poderia me dar uma luz do que eu teria que colocar nesta função?
grato!
Marco Aurélio
outubro 16th, 2010 at 17:04
cara, acho que consegui!
muito obrigado pela atenção!
Irineu Martins Junior
novembro 4th, 2010 at 10:08
Junior, fiz uma adaptação da sua função para o jQuery.tools.
Créditos mantidos.
http://flowplayer.org/tools/forum/60/52279
Parabens pelo blog.
Marcelo Grimberg
novembro 5th, 2010 at 7:23
Olá Junior
Muito bom esse validador CNPJ e como devo fazer para validar o campo CPF ?
poderia me ajudar ?
E existe meio para validar RG e inscrição estatual ?
Obrigado
Felipe
novembro 6th, 2010 at 13:00
Boa tarde!!!
Bacana esse seu código….e como muitos estou com pequenas dúvidas…
Vi em um comentário, que é possível colocar a borda das textbox em vermelho, ja avisando que sou marinheiro de primeira viajem em programação web, fiz tudo que vc falou no comentário, mas não consegui, vc poderia mostrar de uma forma mais detalhada de como é feito essa alteração no css e tbm no jquery.validator? Desde já agradeço!
Junior
novembro 12th, 2010 at 10:12
@Marcelo Grimberg baixe o script que disponibilizei no final do post, nele também tem o método para validação do CPF, seu uso é bem parecido como o do CNPJ. Em “rules” coloque: seletor_cpf: { required:true, cpf:true }
E em “messages” coloque as mensagem que você quer que apareça: seletor_cpf: { required:”Obrigatório”, cpf:”CPF inválido” }
OBS.: se você utilizar os seletores “cpf” e “cnpj” pode ser que sempre apareceç a mensagem, pois os métodos utilizam estes como seletor e nome da método (expliquei em algum comentário acima). Para solucionar isto você pode trocar o nome/classe do elemento ou trocar no script.
Quanto ao “Registro Geral” sempre é relativo a um particular órgão emisso, cada qual com sua regra matemática de autenticidade, tornando inviável escrever um script para validar cada cidade/estado x órgão emissor. Se você pesquisar você até consegue encontrar alguns scripts que dizem fazer isto, mas não dizem se está validando em TODOS (que são muitos mesmo) os órgãos.
QUanto à inscrição estadual o problema é um pouco menor a validação é feita apenas para cada estado (como diz o próprio nome). As regras pode ser vistas no site da SINTEGRA
Eu encontrei um script (o mesmo) em 2 sites, só não estão adaptados como métodos do Validate, se você quiser adaptá-los, taí a dica:
http://www.htmlstaff.org/ver.php?id=6969
ou
http://www.scriptbrasil.com.br/forum/index.php?showtopic=85770
Junior
novembro 12th, 2010 at 10:31
@Felipe segue o link no exemplo que criei tem mais explicações
Marcelo Grimberg
novembro 12th, 2010 at 14:46
Muito Obrigado Junior, mas eu desicanei, fiquei procurando e testando até então não funcionou, cpf e cnpj é sufiente para o desenvolvimento

esse jquery facilita muito
Junior outra dúvida, estou tentanto procurar na net um artigo que fala sobre concedendo previlégio a um usuario em php
de forma dinamicamente que eu possa dar permissao de inserir, alterar e excluir para casa usuario com seus espectitivo grupo…
Obrigado
Junior
novembro 14th, 2010 at 18:57
@Marcelo Grimberg nesse seu problema com php vc vai precisar montar a regra de como vai funcionar. Eu geralmente trabalho com uma tabela que guarda id do usuario, a página que ele terá permissão, e colunas para os 4 tipos de permissão (listar, inserir, editar, excluir). Assim nessa tabela um usuário pode ter acesso a várias páginas com privilégios diferentes.
Alê Borba
novembro 19th, 2010 at 11:06
Cara, parabens pelo post e pela iniciativa.
A modificação de data eu já havia feito por conta, assim como a de CEP e de telefone =). mas a de cpf e cnpj.. nó.. quebrou uma árvore!
abraço
@ale_borba
Derkian
novembro 26th, 2010 at 11:49
Júnior; quando clico fora do imput ele não valida a data;
apenas quando clico no botão de enviar.
No seu funciona tranquilamente bem.
Alguma dica?
Junior
dezembro 6th, 2010 at 10:03
@Derkian não fiz intencionalmente, mas já tentou colocar o atributo action=”" no form? Ou dentro do form tem o botão com type=”submit”? Se você notar o disparo de erros só ocorre quando se digita algo incorreto, pois no título (required) quando vc tira o foco deste campo não aparece “automaticamente” apenas no envio do form. Se vc quer mesmo fazer a validação, tenta no blur de cada campo chamar a função $(‘#seletor_do_form’).valid() ou $(‘#seletor_do_form’).validate();
Tem a função showErrors({“campo1″: “mensagem de erro 1″}); caso não dê certo.
Daniel Miguel
janeiro 13th, 2011 at 20:59
Você é o cara! Vou testar sua implementação! Muito obrigado e um abraço!
Qualquer coisa que eu puder otimizar eu te mando por aqui!
Bueno
janeiro 23rd, 2011 at 15:00
Olá Junior,
Muito obrigado pelo código. Tentei lhe pagar uma cerveja, mas esse Pagseguro é muito ruim. Quando eu estiver em Campo Grande lhe pago uma cerveja pessoalmente.
Abraços,
Bueno
Sandro M. Ferreira
março 14th, 2011 at 3:04
Olá, parabens pelo script, funciona muito bem.
Mas tenho uma necessidade um pouco diferente:
- Somente validar caso o campo tenha sido preenchido.
Em uma resposta ao comentário do Sr Carlos Henrique, você dise para mudar o nome ou classe do campo, bem, pelo que entendi desta forma o campo nao seria validado.
Só que no meu caso estou precisando validar o numero e nao obrigar a preencher o cnpj e o cpf (no meu form uso os dois campos). Será que fui claro? “Validar somente se for preenchido”. Agradeço muito se puder me ajudar.
Junior
março 16th, 2011 at 19:51
@Sandro M. Ferreira fiz uma atualização no post e nos arquivos tente baixar os Métodos comentados
Sandro M. Ferreira
março 24th, 2011 at 13:43
Parabéns!! e Obrigado por implementar e disponibilizar a funcionalidade de nao validar campo vazio, somente se preenchido… Agora este ficou bala! É o melhor script de validação que encontrei na net.. Parabéns!
Leonardo Leal
abril 26th, 2011 at 14:35
Show de bola!!
Já foi pro favoritos!!
Belo trabalho valeu!!
Ederson
maio 19th, 2011 at 9:48
Junior, muito bom o seu tuto!!.. Vlw Demais… mas estou com uma dúvida. Se já estou utilizando o validate no campo CNPJ pra aplicar uma máscara, fazendo que quando o campo CNPJ ganhar foco, aparece __.___.___/____-__ no campo. pra pessoa digitar. Não está funcionando os dois juntos.. alguma sugestão?
Ederson
maio 19th, 2011 at 10:08
Ops.. esquece… já vi onde estava errando….
é só tirar essa parte: [code] cnpj = jQuery.trim(cnpj);// retira espaços em branco
// DEIXA APENAS OS NÚMEROS
cnpj = cnpj.replace('/','');
cnpj = cnpj.replace('.','');
cnpj = cnpj.replace('.','');
cnpj = cnpj.replace('-',''); [/code]
Ederson
maio 19th, 2011 at 11:25
Junior, estou mesmo com um problema sobre aplicação de mascara e a validação. Tenho o seguinte script:
jQuery(function($){
jQuery(“#cnpj”).mask(“99.999.999/9999-99″);
});
que aplica a mascara> __.___.___/____-__ no campo do CNPJ. Se eu habilito essa função, a validação não funciona. Como posso deixar o código para que funcione já com a mascara??
Felipe Duardo
maio 25th, 2011 at 19:04
Opa! estou com um problema em usar seus métodos…
eu estava usando o validate 1.8, mas sempre esse problema..
$.validator.methods[method] is undefined
mudei para o 1.7, mesma coisa… pegando os metodos direto do seu site nao importa como eu faça não consigo superar esse erro…
usando o validate normalmente sem esse metodos adicionais
passa de boa…
sabe o que pode ser?
Junior
junho 1st, 2011 at 19:26
@Ederson vc está utilizando o plugin jquery.maskedinput? Eu adicionei este plugin no exemplo que fiz, coloquei máscara para CNPJ e coloquei ele como opcional, se informar deve ser um número correto. Uma coisa que fiz foi instanciar a máscara assim: $(“.testar_cnpj”).mask(“99.999.999/9999-99″); pois se tivesse utilizado uma classe chamada “cnpj” o método do validate “cnpj” seria acionado. Veja se o exemplo é o que precisa, qualquer coisa é só falar.
Junior
junho 1st, 2011 at 19:43
@Felipe Duardo qual arquivo vc chama primeiro o que contem os métodos ou o do validate? Posta o seu teste em algum lugar que a gente tenta resolver.
Jose
julho 9th, 2011 at 8:50
O *&% cade o de CPF? só tem cnpj ai, que *&%$# de de titulo q vc colocou
Junior
julho 19th, 2011 at 19:14
@Jose a educação passou longe camarada. Conforme escrevi, eu adaptei a função do CNPJ para o Validate, a do CPF já tinha sido feita e eu apenas anexei o arquivo. Se você tivesse lido o texto e/ou os comentários veria que os arquivo estão completos. Possui até exemplos solicitados pelas pessoas. Se tiver dificuldade em utilizar o código não deixe de perguntar.
Robson
julho 27th, 2011 at 22:14
Função adaptada pra quem precisar utilizar no formato $(“#id”).validateCNPJ();
jQuery.fn.validateCNPJ=function(a){
var cnpj = this;
cnpj = jQuery.trim(cnpj.val());// retira espaços em branco
// DEIXA APENAS OS NÚMEROS
cnpj = cnpj.replace(‘/’,”);
cnpj = cnpj.replace(‘.’,”);
cnpj = cnpj.replace(‘.’,”);
cnpj = cnpj.replace(‘-’,”);
var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais;
digitos_iguais = 1;
if (cnpj.length < 14 && cnpj.length < 15){
return false;
}
for (i = 0; i = 1; i–){
soma += numeros.charAt(tamanho – i) * pos–;
if (pos < 2){
pos = 9;
}
}
resultado = soma % 11 = 1; i–){
soma += numeros.charAt(tamanho – i) * pos–;
if (pos < 2){
pos = 9;
}
}
resultado = soma % 11 < 2 ? 0 : 11 – soma % 11;
if (resultado != digitos.charAt(1)){
return false;
}
return true;
}else{
return false;
}
}
Wilson
agosto 15th, 2011 at 3:01
Junior, gostei muito do seu tutorial, mas estou com um problema e gostaria de saber se você pode me ajudar. Estou tentando fazer uma validação de CEP da seguinte forma: fiz um input para os primeiros 5 digitos e um input para os 3 digitos finais. Só que não consegui desenvolver uma lógica para verificar o primeiro input (5 digitos) e caso esteja vazio ou incompleto retornar a mensagem de erro apenas do primeiro input e só retornar uma mensagem de erro para o segundo input caso o primeiro esteja correto. Será que vc pode me ajudar? Abraço
Bruno H G Corazza
agosto 17th, 2011 at 16:56
Muito bom, parabéns.
Juliano
agosto 18th, 2011 at 15:40
Cara salvo meu dia… Parabéns pelo blog!
Porém sugiu outra dúvida aqui, tenho que validar o tanhanho de uma imagem enviada via upload, é possivel validar o tamanho da imagem tambem?
Uma opção seria redimencionar a mesma pelo PHP, só que no meu caso não seria muito interesante.
Obrigado!
Junior
agosto 19th, 2011 at 12:48
@Wilson utilizando o “required” do jQuery Validate você consegue fazer isto que falou, seria mais ou menos assim:
Onde cep1 e cep2 são os nomes dos campos
Junior
agosto 19th, 2011 at 12:54
@Juliano eu aconselho utilizar o SWFUpload, tem vários comentários no post que fiz sobre uma versão antiga, tem uma opção “file_size_limit” que verifica o tamanho antes de fazer o upload.
Wilson
agosto 22nd, 2011 at 0:05
Junior, obrigado pela resposta. Eu já fiz dessa maneira, o problema é que quando ele retorna a mensagem de erro, ele desalinha os inputs. Por isso pensei em fazer um novo método no qual ele validaria os dois campos. Só que não estou conseguindo desenvolver este método.
Pensei em fazer desta forma:
jQuery.validator.addMethod(“cep”, function(value, element) {
var cep1 = document.cadastro.cep1.value;
var cep2 = document.cadastro.cep2.value;
if(cep1.length < 5 && cep2.lenght < 3){
return false;
}else{return true;}
});
Só que não está dando certo.
Wilson
agosto 22nd, 2011 at 0:58
Não sei se é a melhor maneira mas consegui resolver assim:
jQuery.validator.addMethod(“cep”, function(value, element) {
var cep1 = document.cadastro.cep1.value;
var cep2 = document.cadastro.cep2.value;
if(cep1 == “” || cep2 == “”){
return false;}
else if(cep1.length < 5){
return false;}
else if(cep2.length < 3){
return false;
}else{return true;}
});
Obrigado
Junior
agosto 24th, 2011 at 19:20
@Wilson você pode resolver a questão do alinhamento utilizando CSS, veja como fiz na página de contato da MS Record, basicamente você envolve o elemento a ser validade dentro de outro com position:relative, dai adiciona CSS para label.error (que é gerado pelo javascript)
position:absolute, colocar cor se quiser, alinha conforme seu layout.
Wilson
agosto 25th, 2011 at 2:35
Junior, o problema é que quando o formulário é submetido sem que os campos sejam preenchidos, ele retorna uma mensagem em cima da outra.
Junior
agosto 27th, 2011 at 13:02
@Wilson a validação não está funcionando? O submit do formulário só poderia ser enviado se passasse pela validação. Posta o código no http://pastie.org/ e manda o link
Wilson
agosto 29th, 2011 at 1:56
Junior,
Não sei se fiz certo, nunca trabalhei com isso.
Wilson
Wilson
agosto 29th, 2011 at 1:56
src=’http://pastie.org/2446693.js’
Junior
agosto 30th, 2011 at 19:09
@Wilson retirei o .js que vc adicionou na URL, só faltou vc postar o código do arquivo validarJQuery.js que, acredito eu, deve conter os métodos
Wilson
agosto 30th, 2011 at 23:42
src=’http://pastie.org/2457601′
Junior
agosto 31st, 2011 at 19:14
@Wilson vamos tentar de outra forma, passa o endereço (se estiver online) do seu form do jeito que está. Você já deu uma olhada no comentário que fiz para o Marco Aurélio, acho que vc irá utilizar uma function no lugar do valor booleano, dá uma olhada no exemplo que você vai entender.
No seu caso coloque os dois campos no return (cep1 e cep2)
tiago lage
outubro 6th, 2011 at 12:17
Show muito bom mesmo resolveu minha vida aqui!!!!!!
Dartanhan
outubro 19th, 2011 at 9:52
Opa Junior bom dia.
Seguinte, fiz um teste direto na sua própria tela de exemplo, e vi que ao digitar o CPF , o campo só permite usar os números de cima do teclado, teria como permitir que se possa usar o teclado numérico também??
Parabéns pelo blog principalmente pela ajuda que você dá a todos ai, simplemente não fez um blog com uma coisa útil e deixou.
Mais uma vez parabéns.
Abraços.
Fabio Souza
dezembro 9th, 2011 at 16:53
Vlw Amigo, grande contribuição!
Lizzie
dezembro 10th, 2011 at 7:55
I’ve been looking for this type of information for my research. Thanks
Tiago
janeiro 9th, 2012 at 18:15
Valeu, depois de encontrar muitos exemplos que nao funcionavam vc conseguiu me salvar!!!
Rafael
janeiro 11th, 2012 at 15:35
Junior, primeiramente parabéns pelo seu excelente código!
Estou com uma dúvida de estagiário, quero exibir a mensagem em um local específico, como faço isso?
por exemplo, meu formulário está em uma tabela e possui uma coluna somente para exibição das mensagens…
Rafael
janeiro 11th, 2012 at 16:14
Junior, outra dúvida, como faço para limpar o input quando a validação encontra erros?
Por exemplo, em validação de confirma_senha equalTo senha, quero limpar as 2 senhas digitadas se houver erro nesta validação.
Rafael
janeiro 12th, 2012 at 3:02
Junior, pra enriquecer ainda mais sua página sobre este assunto, segue outra probleminha.
O código abaixo, é uma adaptação de uma função para validação de cep e preenchimento do endereço automaticamente.
Ocorre que, da forma que o código está, sempre é exibido a mensagem de CEP inválido, até mesmo quando o cep está correto e o endereço é preenchido automaticamente.
Abaixo segue o código, onde devo alterar para corrigir isto?
Caio
janeiro 13th, 2012 at 10:17
Bom dia! Bem legal seus métodos. Só tive uma duvida:
No arquivo diz que “VALIDA CNPJ COM 14 OU 15 DÍGITOS” e a linha abaixo era para garantir essa regra
“if (cnpj.length < 14 && cnpj.length < 15){"
porem analisando o if acredito que CNPJs digitados com mais de 15 dígitos também vai passar para ser validade.
Agora a duvida, reescrevendo o if desta forma "if (cnpj.length 15){” não fica mais condizente ou eu estou comendo bola?
OBS: Sei que o campo deve ter limites de caracteres, formatação e validação com mascara, mas isso vai do programador colocar ou não, se ele não colocar ai sim vai poder ocorrer o problema e pode acontecer da validação passar batida com um retorno verdadeiro.
Grato
Junior
janeiro 14th, 2012 at 21:59
@Dartanhan parece meio óbvio, mas o Num Lock estava ligado, aqui funciona normal. Em qual navegador isso aconteceu?
principle investigators
janeiro 17th, 2012 at 21:04
Just want to say your article is as astonishing. The clearness in your put up is simply nice and i could think you are knowledgeable on this subject. Fine together with your permission let me to take hold of your feed to keep up to date with drawing close post. Thank you a million and please carry on the rewarding work.
Junior
março 11th, 2012 at 19:06
@Rafael use antes de rules coloque o código:
Este código vai fazer com que todos os erros sejam escritos em #seletor_da_mensagem_de_erro, personalize para o seu código, você pode colocar o erro em niveis diferentes utilizando a variavel element
Junior
março 11th, 2012 at 20:14
@Rafael acredito que se a depuração do navegador, como a consulta ao site demora mais que a leitura do navegador sempre vai pegar o return false; eu o aconselho fazer a validação no blur do campo, com o código que você postou dá para adaptá-lo facilmente.
Junior
março 11th, 2012 at 20:16
@Rafael você pode personalizar a função, procure a parte que está o return false e coloque algo como $(element).val(”);
João Paulo Baptista
abril 17th, 2012 at 14:35
Olá Junior, muito obrigado pela atenção que dá para todos que tem alguma dúvida.
Gostaria de saber se tem como eu fazer uma função que abrisse uma “DIV” com um botão Comprar se o CNPJ for válido.
Ou seja, a pessoa digita o CNPJ, se ele for válido abre uma div em baixo do text com o Botão. Se for inválido aparece a mensagem de erro.
Obrigado pela atenção novamente.
Marcelo Lourenço
abril 29th, 2012 at 16:28
Oi Pessoal
Criei uma Extensão Chrome para Gerar e Validar CPF ou CNPJ.
https://chrome.google.com/webstore/detail/ipfihnddjaepajgdamecijfdefikdgam
Vantagens da extensão:
Disponível off-line;
Não é um executável (roda direto no browser);
Maior agilidade ao criar Massa de Teste.
Funcionalidades:
Gerador CPF/CNPJ (apenas números);
Gerador CPF/CNPJ (com mascará);
Validador CPF/CNPJ.
Jordan
abril 30th, 2012 at 15:11
Cara, muito obrigado pela dica e pelos códigos.
Me ajudou muito mesmo.
Vlw!
Sheila Souza
junho 12th, 2012 at 12:42
Tudo bem Júnior?
Excelente essa extensão do jQuery para validar datas e cnpjs.
Parabéns!
Estou tendo um probleminha.
Funcionou perfeitamente no IE7, porém no IE8 está dando um erro na linha 875 do validate.js: Objeto necessário, quando clico no botão para dar um submit no form.
A linha é essa:
return options.length > 0 && ( element.type == “select-multiple” || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
Tenho alguns selects no meu form, porém não estou validando eles, apenas o campo data.
Quando o foco sai do campo data o label do erro aparece, porém ao clicar no submit o depurador do IE para nessa linha(875)
Se puder me dar uma mão, estou precisando muito validar essa data.
Valeu!
Junior
junho 20th, 2012 at 16:49
@Sheila Souza talvez o erro aconteçã por incompatibilidade de versões, por exemplo, se você colocar a versão mais recente do jQuery e utilizar a primeira versão do plugin pode ser que não funcione.
No site do bassistance.de vc encontra a versão mais recente.
Ronaldo
setembro 26th, 2012 at 11:17
Olá, o meu campo cpf não é obrigatório, mas agora que coloquei a validação, tenho que preenchê-lo… como faço para somente validar, se tiver sido preenchido?
sds
Junior
outubro 15th, 2012 at 17:54
@Ronaldo o atributo name do input está como “cpf”? nós atualizamos o script para ele ficar opcional. Se você alterar o name para “valor_cpf”, por exemplo, ele não será obrigatório.
Junior
outubro 15th, 2012 at 18:05
@ João Paulo Baptista é mais ou menos assim: no submitHandler:function(form) { $(‘#id_da_div’).show(); return false; }
No CSS deixa essa div com display:none; para ficar inicialmente oculta.
Rafael Andrade
fevereiro 5th, 2013 at 17:02
ótimo!