Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fernandopaiva

Validar CPF com JQuery ?

Recommended Posts

Salve galera, estou procurando uma maneira de fazer validação de CPF usando JQuery.

 

formato cpf: 999.999.999-99

 

Andei vendo sobre jquery-validade, mas não consegui fazer ainda.

 

Alguma dica ?

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://vinteum.com/jquery-mask-mascaras-para-campos-html-utilizando-jquery/

   $(function($){
   $(".date").mask("99/99/9999 99:99:99");
   $(".tel") .mask("(99)9999-9999");
   $(".cpf") .mask("999.999.999-99");
});

 

<input type="text" class="cpf" name="cpf" value=""  />
<input type="text" class="tel" name="" value=""  />
<input type="text" class="date" name="" value=""  />

Se for a função para somente aceitar formato de cpf

 

/*****************************
VALIDA O CPF
*****************************/	
	function valCpf($cpf){
		$cpf = preg_replace('/[^0-9]/','',$cpf);
		$digitoA = 0;
		$digitoB = 0;
		for($i = 0, $x = 10; $i <= 8; $i++, $x--){
			$digitoA += $cpf[$i] * $x;
		}
		for($i = 0, $x = 11; $i <= 9; $i++, $x--){
			if(str_repeat($i, 11) == $cpf){
				return false;
			}
			$digitoB += $cpf[$i] * $x;
		}
		$somaA = (($digitoA%11) < 2 ) ? 0 : 11-($digitoA%11);
		$somaB = (($digitoB%11) < 2 ) ? 0 : 11-($digitoB%11);
		if($somaA != $cpf[9] || $somaB != $cpf[10]){
			return false;	
		}else{
			return true;
		}
	}

 

http://www.geradordecpf.org/

 

 

 

<?php
    if(!valCpf($_POST['cpf'])){
          echo'erro';
    } 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o Jquery Validate oferece alguns validadores nativos e uma interface para criação de novos validadores.

 

CPF/CNPJ é uma coisa brasileira que não justifica vir nativo no pacote. Porém, graças a interface provida você pode criar o seu.

 

E quanto ao algoritimo, existem dezenas de implementações.

 

Só atente que validar é uma coisa, mostrar uma máscara, como o Rogério disse é outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E lembre-se que validação front-end não significa segurança, apenas uma questão de usabilidade.

 

Além de validar os formatos, você deve validar os algorítimos, de nada adianta um CPF do tipo 111.111.111-11, ele está no formato correto, mas é invalido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que não é assim a alternativa mais procurada, mas é só usar o atributo PATTERN do HTML5 com uma expressão regular que isso fica bem simples, ainda melhor do que com JS.

Pra você ter ideia de como é simples:

<input type="text" name="data" pattern="^([1-9]|0[1-9]|[1,2][0-9]|3[0,1])/([1-9]|1[0,1,2])/\d{4}$">

 

Esse exemplo aí que eu dei vai ter uma expressão regular pra definir o formato da data no modelo dd/mm/aaaa. Se quiser e/ou precisar dar uma estudada em expressões regulares é só acessar este site. Neste site aqui você pode testar as suas expressões.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Diego Rinno: expressões regulares não servem para validar datas ou números de CPF. Esse pattern que você deu como exemplo valida "30/2/2012", e nós sabemos que não é uma data válida, assim como um CPF 123.456.789-12 também não é válido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

#6

 

Entenda que a questão é VALIDAR e não MASCARAR, existe uma diferença enorme entre as duas coisas, como já foi dito acima. Ainda sugiro um mascaramento, uma validação cliente-side e uma validação server-side.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Diego Rinno: expressões regulares não servem para validar datas ou números de CPF. Esse pattern que você deu como exemplo valida "30/2/2012", e nós sabemos que não é uma data válida, assim como um CPF 123.456.789-12 também não é válido...

 

Muita calma nessa hora. O Mestre Aurélio já nos ensinou a validar datas no formato dd/mm/aaaa com Expressões Regulares:

 

 

(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/[12][0-9]{3}

 

:seta: Aurélio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vivendo e aprendendo ^^

 

Vou estudar mais de expressões regulares e fazer uma infalível pra validar "sas paradaê" (se for possível..), rs

 

Liga não, é só vontade de achar a alternativa mais fácil pra tudo. Vida de preguiçoso é difícil, vai vendo :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vivendo e aprendendo ^^

 

Vou estudar mais de expressões regulares e fazer uma infalível pra validar "sas paradaê" (se for possível..), rs

 

Liga não, é só vontade de achar a alternativa mais fácil pra tudo. Vida de preguiçoso é difícil, vai vendo :)

 

Eu diria que você estava com a mente cansada. rsr

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não duvido que se alguém estiver MUITO à toa não consiga criar um validador de CPF com Expressões Regulares valendo-se desse metacaractere.

 

Se bem que é possível que não rode em algumas linguagens que não sejam o Perl :yay:

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Bruno:

 

Não concordo muito com isso não... se é pra colocar código dentro da ER, porque não faz tudo com código logo? O Aurélio tem razão, isso já foi longe demais. Aliás, aprendi ER com o livrinho desse cara. :D

 

Quanto ao seu post anterior (#9), essa expressão também casa "30/02/2012", data inválida. Não é possível casar sempre datas válidas e nunca casar datas inválidas usando apenas ER, pois não dá pra prever coisas como meses com 30 ou 31 dias (isso até que dá, mas a ER ficaria enorme) e o caso de mês de fevereiro, que em anos bissextos tem um dia a mais. Com CPF é pior ainda pois os números seguem um padrão de cálculo. Só com código mesmo... ou com código dentro da ER.... argh!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, essa ER é do Aurélio, pode até ser que ele tenha esquecido de considerar que Fevereiro pára no máximo em 29.

 

Mas tem que ver também que Expressões Regulares não validam dados contra algorítimos e sim contra um padrão regular (duh). Se o cara usar a ER de data só pra checar o formato e validar se não está inserindo um dia 32 ou um mês 13 por exemplo, serve bem.

 

Agora validar esse caso específico dos anos bissextos (que é a maior gambiarra da história) realmente não é possível. Cada ferramenta foi criada para resolver um problema, não adianta querer martelar um prego com uma chave de fenda e esperar que ele fique reto na parede.

 

 

Não concordo muito com isso não... se é pra colocar código dentro da ER, porque não faz tudo com código logo? O Aurélio tem razão, isso já foi longe demais. Aliás, aprendi ER com o livrinho desse cara. :D

 

E quem não :P

 

è o melhor material em português sobre o assunto. Eu até comprei a primeira edição "de bolso" (porque aquele troço não cabe no bolso nem a pau).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Discordo.

 

De que me adianta validar apenas o formato? É inútil! 30/02/2012 e 55/55/5555 para efeitos de validação são a mesma coisa: datas inválidas. Um validador, na minha opinião, precisa atender aos seguintes critérios ou não é um validador:

 

1 - Dá por válidas todas as informações que são válidas

2 - Dá por inválidas todas as informações que são inválidas

 

Como ER não é capaz de prover isso nos casos que estamos discutindo aqui, então não dá pra validar datas (nem CPFs) com ER.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando,

 

Eu criei um plugin para jQuery que valida o CPF/CNPJ, porém ele cria a mascara. Para isso eu tenho utilizado o Masked Input Plugin.

 

Segue o link do plugin para mascaras

http://digitalbush.com/projects/masked-input-plugin/

 

e do plugin que eu fiz para validação

https://github.com/rafamaciel/doc_validator/

 

Olha direitinho se isto resolve o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.