Verificando a consistência de CPF e CNPJ em um formulário com JavaScript

Oki

Esta é a continuação do artigo "Consistindo um formulário em Javascript". Neste vamos ver como consistir campos do tipo CPF e CNPJ.

[ Hits: 36.806 ]

Por: Celso Goya em 28/04/2003


Introdução



No artigo anterior (Consistindo um formulário com JavaScript) vimos o uso das rotinas isEmpty(), isNumber() e isEmail(). Agora vamos explicar como consistir os campos de CPF e CNPJ de seu formulário.

Para realizar esta consistência vamos utilizar 2 scripts que encontram-se na área de script. São eles: Tanto o número de CPF quanto o CNPJ possuem um algorítimo de verificação que chamamos de Módulo 11 e gera os dois últimos algarismos que compõe um CPF e CNPJ. Isto ocorre apenas por uma medida de segurança, pois desta forma é possível verificar se um número realmente corresponde a um CPF ou um CNPJ.

Nossa rotina isCPFCNPJ verifica os dois tipos de documentos, ou seja se o usuário digitar um CPF ou um CNPJ no campo a rotina é capaz de selecionar o tipo de consistência e realizar o cálculo de Módulo 11 automaticamente. Mais uma vez reforço que a consistência em JavaScript não é aconselhada em casos onde a segurança deva ser rígida, recomendo utilizar este tipo de rotina em formulário de envio de e-mail ou então áreas administrativas de sites, onde o usuário já passou por um login e senha seguros ou então intranets.

Adicione a seguinte linha ao seu html:

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript" SRC="isEmpty.js"></script>
<SCRIPT LANGUAGE="JavaScript" SRC="isCPFCNPJ.js"></script>
</HEAD>

Após adicionar estas linhas será possível acessar a função isCPFCNPJ(). Caso esteja usando outras rotinas JavaScript lembre-se de acrescentá-las dentro da TAG HEAD.

Agora vamos adicionar uma verificação de CPF e CNPJ:

<head>
<SCRIPT LANGUAGE="JavaScript">
function checkForm(){

   if(!isCPFCNPJ(document.formTeste.cpfcnpj.value,0)){
      alert("Por favor informe um CPF/CNPJ válido");
      document.formTeste.cpfcnpj.focus();
      return false;
   }

   return true;
}
</script>
</head>

Lembre-se que nossa rotina se chama isCPFCNPJ, ou seja, é CPF ou CNPJ então seu retorno é verdadeiro apenas quando for um número válido e neste caso como queremos verificar se ele é falso, então devemos acrescentar o operador !, que significa NOT e realiza a negação da expressão que vem após.

Caso você tenha um campo que deve receber apenas CPF ou CNPJ então sugiro que limite o número de caracteres na entrada de dados, ou seja, utilize o atributo MAXLENGTH no campo.

Para CPF:
<INPUT TYPE=TEXT SIZE=14 MAXLENGTH=14>

Para CNPJ:
<INPUT TYPE=TEXT SIZE=18 MAXLENGTH=18>

E utilize a função passando parâmetro 1 para CPF e 2 para CNPJ:

<head>
<SCRIPT LANGUAGE="JavaScript">
function checkForm(){

   if(!isCPFCNPJ(document.formTeste.cpfcnpj.value,1)){
      alert("Por favor informe um CPF válido");
      document.formTeste.cpfcnpj.focus();
      return false;
   }

   return true;
}
</script>
</head>

Fontes para consulta sobre JavaScript: Se você estiver utilizando o Mozilla ou Netscape lembre-se de instalar o JavaScript Debugger, pois ele facilitará muito na hora de buscar erros dentro do Script.

[]s
Celso Goya
moinho.net

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Morphix Gamer: 600MB de diversão!

T.E.G. :: WAR do tabuleiro para o Linux

CoyoteLinux :: Compartilhando internet com um disquete

Netpanzer :: batalha de tanques multiplayer

Adonthell 0.3.3 :: Roleplaying game

Leitura recomendada

Formulários HTML: Problemas com campos desabilitados?

Dicas simples para dar mais usabilidades aos formulários

Select dinâmico com PHP, Javascript e MySQL

Verificando a consistência de um formulário com JavaScript

Criando JPG animado com o JpegAnim

  
Comentários
[1] Comentário enviado por Jorel em 03/05/2003 - 21:20h

Gostei Muito!!!!!

[2] Comentário enviado por XiS em 28/04/2004 - 13:37h

Sou novo no site, e estou simplismente deslumbrado com a quantidade de artigos de nivel que o mesmo possui. Sem querer abusar, mas ja abusando, vc não teria rotinas para checagem de checkbox e radio button? ;)

[3] Comentário enviado por zach em 30/05/2004 - 01:55h

Segue a mesma idéia

<script language="JavaScript1.2">
function CheckAll() {
with(document.form)
{
for(i=0;i<elements.length;i++)
{
if( document.form[i].type == "checkbox" )
{
thiselm = elements[i];
thiselm.checked = !thiselm.checked;
}
}
if (mark.checked == false)
mark.checked = true;
else
mark.checked = false;
}
}</script>

Essa rotina marca todos os campos checkbox da tela.
por exemplo o mark é o campo do tipo checkbox que chama a função CheckAll(); com o evento onclick.



[4] Comentário enviado por LoboRaivoso em 28/07/2004 - 16:38h

Um código muito bom, que serviu inclusive para a realização de um projeto de curso. Valeu.

[5] Comentário enviado por Hernando em 03/05/2005 - 11:42h

Valeu tavo precisando tinha isso em php mas nem todos websites que crio ultilizo a linguagem... e como html suporta javascript me caiu muito bem.

[6] Comentário enviado por comfaa em 28/10/2008 - 11:57h

muito bom !!


[7] Comentário enviado por admtempos em 30/01/2009 - 17:20h

para quem quizer usar uma verificação em php aqui esta uma função que faz isso

<?php

function cpf_errado($cpf) {
$erro = false;
$aux_cpf = "";
for($j=0;$j<strlen($cpf);$j++)
if(substr($cpf,$j,1)>="0" AND substr($cpf,$j,1)<="9")
$aux_cpf .= substr($cpf,$j,1);
if(strlen($aux_cpf)!=11)
$erro = true;
else {
$cpf1 = $aux_cpf;
$cpf2 = substr($cpf,-2);
$controle = "";
$start = 2;
$end = 10;
for($i=1;$i<=2;$i++) {
$soma = 0;
for($j=$start;$j<=$end;$j++)
$soma += substr($cpf1,($j-$i-1),1)*($end+1+$i-$j);
if($i==2)
$soma += $digito * 2;
$digito = ($soma * 10) % 11;
if($digito==10)
$digito = 0;
$controle .= $digito;
$start = 3;
$end = 11;
}
if($controle!=$cpf2)
$erro = true;
}

return $erro;
}



// $cpf = "11111111111";

if (cpf_errado($cpf))
{
echo "O CPF digitado é inválido";
exit;
}

?>

[8] Comentário enviado por matheusfn em 23/03/2009 - 10:15h

Mesmo com esses digitos verificadores corretos não significa que o CPF é real. valido sim...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts