Um dos artigos mais lidos do Clube da Informática é sobre o algortimo de validação do CPF, temos aqui no escritório essa validação em formato de função, utilizamos muito, temos em Java Script para os sistemas web e em formato de procedimento para Pascal, quando utilizamos o Delphi.
Estamos com um dos nossos clientes do Hermes que necessita fazer um formulário para colher inscrições para seu próximo evento dentro do hotsite do seu cliente, o problema é que estamos falando de uma das maiores empresa de assistência médica do país, que utiliza servidores próprios com programação de área restrita em seu site, busca e inúmeras ferramentas.
Para criar o menor impacto possível e agilizar o processo, nossa proposta foi a seguinte: vamos fazer todo o processo de inscrição (quatro telas) em um só arquivo de PHP, utilizando o banco de dados do nosso servidor e ainda, só utlizando o mais puro PHP, sem java script, sem AJAX, sem framework, sem nada que pudesse rivalizar ou incompatibilizar ferramentas do cliente ou as nossas próprias, ou ainda que necessitasse interação com o servidor para instalação, sendo assim enviaremos o arquivo para a empresa testado e pronto para colocação no hotsite do evento
Uma das rotinas que precisamos é de validação do CPF, que antes usamos em Java Script para poupar tempo e processos pela Internet, uma validação em JS dentro do site, quando acionado o botão de enviar a validação ocorre sem enviar os dados, ou seja, é mais rápido. No caso proposto vamos utilizar só PHP e uma única vez em cada inscrição realizada haverá validação, então deixamos de lado a função e incomporamos de forma bem enxuta a rotina.
Estamos tratando os dados na fonte, mesmo com o aviso de entrar só números, normalmente o usuários não prestam muito atenção nas instruções e já que vamos ter que “enviar” os dados por post e fazer a validação para retornar o resultado, vamos optar por tratar os dados, vamos fazer uma rotina para retirar sinais e espaços em branco da entrada, para evitar erros na validação e obrigar o usuário a verificar e reenviar os dados, o que aumentaria o processo e o número de vezes a interação com o trânsito de dados na internet.
$sinais= array("/"," ",".","-",",");
$cpf=str_replace($sinais,"",$_POST['cpf']);
Após a verificação vamos aplicar de forma matemática e direto a validação do algoritmo do processo do artigo já apresentado aqui no site. Confira o código:
///////////////////////////////////////
//Valida o CPF - Algoritmo do Clube
///////////////////////////////////////
$cpf_validar=substr($cpf,0,9);
$soma=0; $n=11;
for ($i=0;$i<=9;$i++)
{
$n=$n-1;
$soma=$soma+(substr($cpf_validar,$i,1)*$n);
};
$resto= $soma % 11;
if ($resto<2) {$cpf_validar=$cpf_validar."0";} else {$cpf_validar=$cpf_validar.(11-$resto);};
//Segunda parte da validação do CPF
$soma=0; $n=12;
for ($i=0;$i<=10;$i++)
{
$n=$n-1;
$soma=$soma+(substr($cpf_validar,$i,1)*$n);
};
$resto= $soma % 11;
if ($resto<2) {$cpf_validar=$cpf_validar."0";} else {$cpf_validar=$cpf_validar.(11-$resto);}
if ($cpf_validar==$cpf) {$erro=1;} else {$erro=0;$mensagens="CPF Inválido";};
As únicas obserrvações é que criamos um flag para o erro, ou seja, quando recebe "1" está ok, caso contrário recebe "0" e cria uma variável com a mensagem de erro. Espero que a rotina ajude a entender melhor o artigo e vice e versa. Qualquer dúvida escreva!
abraço
Plínio Cruz
3 Comentários
Olá, eu também fiz uma postagem sobre validação de email, só que usei um método muito funcional, que verifica se realmente o host existe.
http://www.gasparimsat.com/index.php/21/08/2009/validacao-do-email-pelo-host-usando-php/
Ex: A pessoa escreve email@bol.com.br, ele verifica se o host “Bol” existe.
Neste blog também tem um algoritmo para validar CPF.
http://casadophp.blogspot.com/2009/11/algoritmo-para-validar-cpf.html
Muito bom o script achei varios mais este foi o mais resumido dai resolvi incluir algunas coisas que tinha no meu outro script neste ai como
1 – Uma função para não repetir alguns comandos
2 – Não validar se o cpf for de 00000000000 a 99999999999
Ai vai
$cpf = 11122233396;
$sinais= array(“/”,” “,”.”,”-“,”,”);
$cpf=str_replace($sinais,””,$cpf);
$cpf_validar=substr($cpf,0,9);
function Validate($position,$loop)
{
global $cpf_validar,$cpf;
$soma=0; $n=$position;
for ($i=0;$i<=$loop;$i++)
{
$n=$n-1;
$soma+=(substr($cpf_validar,$i,1)*$n);
};
$resto= $soma % 11;
if ($resto<2){$cpf_validar=$cpf_validar."0";}else{$cpf_validar=$cpf_validar.(11-$resto);};
for($i=0;$i<=9;$i++){if($cpf == str_pad("",11,$i)){$cpf_validar = 0;}}
return $cpf_validar;
}#fim function
$cpf_validar = Validate(11,9);
$cpf_validar = Validate(12,10);
if ($cpf_validar==$cpf) {$erro=1;$mensagens="CPF Valido";} else {$erro=0;$mensagens="CPF Invalido";};
echo $mensagens;
O endereço do meu Blog http://www.mapsd.com.br/blog