<?
function VALIDACPF($cpf) { 
/* 
  FACICOMP - Faculdade de Ci�ncia da Computa��o de Caratinga 
  Bruno Rodrigues Silva 28/11/2000 
  brunors@spep.com.br 
  Modificado para funcao por:
    Clever Anjos (clever@acip.org.br) 10/02/2002 
      Foi retirado o array auxiliar. 
    Roberth Oliveira Corgosinho (roberthlinux@zipmail.com.br) 14/11/2002
      Foi adicionado um laco de repeticao para remover os caracteres nao numericos
      da string do CPF
*/ 
$nulos = array("12345678909","11111111111","22222222222","33333333333", 
               "44444444444","55555555555","66666666666","77777777777", 
               "88888888888","99999999999","00000000000"); 
/* Retira todos os caracteres que nao sejam 0-9 */
$aux="";
for ($i=1; $i<=strlen($cpf); $i++){
  $ch=substr($cpf,$i-1,1);
  if (ord($ch)>=48 && ord($ch)<=57){
    $aux=$aux.$ch;
  } 
}
$cpf = $aux;
/* Retorna falso se o cpf for nulo */ 
foreach ( $nulos as $nulo ) {
  if($cpf == $nulo){
    return 0;
  }
}    
/*Calcula o pen�ltimo d�gito verificador*/ 
$acum=0; 
for($i=0; $i<9; $i++) {
  $acum+= $cpf[$i]*(10-$i); 
}

$x=$acum % 11; 
$acum = ($x>1) ? (11 - $x) : 0; 
/* Retorna falso se o digito calculado eh diferente do passado na string */ 
if ($acum != $cpf[9]){ 
  return 0; 
}
/*Calcula o �ltimo d�gito verificador*/ 
$acum=0; 
for ($i=0; $i<10; $i++){
  $acum+= $cpf[$i]*(11-$i); 
}  

$x=$acum % 11; 
$acum = ($x > 1) ? (11-$x) : 0; 
/* Retorna falso se o digito calculado eh diferente do passado na string */ 
if ( $acum != $cpf[10]){ 
  return 0; 
}  
/* Retorna verdadeiro se o cpf eh valido */ 
return 1; 
}  
?>