Categorias

Função PHP Para Validar CPF

Esta função em PHP testa se um CPF é válido ou não, retorna “true” caso seja válido ou “false” caso não seja.

Esta função considera apenas os números e ignora outros caracteres no CPF, isso permite que ela aceite CPFs em diferentes formatos como “864.554.364-82”, “864 554 364 82”, “86455436482”, entre outros.

Exemplo de uso:

include (‘isCpfValid.php’);
$cpf=864.554.364-82;
$isCpfValid=isCpfValid($cpf);

Sugestões de melhoria são bem vindas 🙂

	 * @version	1.0 Debugada em 26/09/2011 no PHP 5.3.8
	 * @param	string		$cpf			Guarda o cpf como ele foi digitado pelo cliente
	 * @param	array		$num			Guarda apenas os números do cpf
	 * @param	boolean		$isCpfValid		Guarda o retorno da função
	 * @param	int			$multiplica 	Auxilia no Calculo dos Dígitos verificadores
	 * @param	int			$soma			Auxilia no Calculo dos Dígitos verificadores
	 * @param	int			$resto			Auxilia no Calculo dos Dígitos verificadores
	 * @param	int			$dg				Dígito verificador
	 * @return	boolean						"true" se o cpf é válido ou "false" caso o contrário
	 *
	 */
	 
	 function isCpfValid($cpf)
	 	{
			//Etapa 1: Cria um array com apenas os digitos numéricos, isso permite receber o cpf em diferentes formatos como "000.000.000-00", "00000000000", "000 000 000 00" etc...
			$j=0;
			for($i=0; $i<(strlen($cpf)); $i++)
				{
					if(is_numeric($cpf[$i]))
						{
							$num[$j]=$cpf[$i];
							$j++;
						}
				}
			//Etapa 2: Conta os dígitos, um cpf válido possui 11 dígitos numéricos.
			if(count($num)!=11)
				{
					$isCpfValid=false;
				}
			//Etapa 3: Combinações como 00000000000 e 22222222222 embora não sejam cpfs reais resultariam em cpfs válidos após o calculo dos dígitos verificares e por isso precisam ser filtradas nesta parte.
			else
				{
					for($i=0; $i<10; $i++)
						{
							if ($num[0]==$i && $num[1]==$i && $num[2]==$i && $num[3]==$i && $num[4]==$i && $num[5]==$i && $num[6]==$i && $num[7]==$i && $num[8]==$i)
								{
									$isCpfValid=false;
									break;
								}
						}
				}
			//Etapa 4: Calcula e compara o primeiro dígito verificador.
			if(!isset($isCpfValid))
				{
					$j=10;
					for($i=0; $i<9; $i++)
						{
							$multiplica[$i]=$num[$i]*$j;
							$j--;
						}
					$soma = array_sum($multiplica);	
					$resto = $soma%11;			
					if($resto<2)
						{
							$dg=0;
						}
					else
						{
							$dg=11-$resto;
						}
					if($dg!=$num[9])
						{
							$isCpfValid=false;
						}
				}
			//Etapa 5: Calcula e compara o segundo dígito verificador.
			if(!isset($isCpfValid))
				{
					$j=11;
					for($i=0; $i<10; $i++)
						{
							$multiplica[$i]=$num[$i]*$j;
							$j--;
						}
					$soma = array_sum($multiplica);
					$resto = $soma%11;
					if($resto<2)
						{
							$dg=0;
						}
					else
						{
							$dg=11-$resto;
						}
					if($dg!=$num[10])
						{
							$isCpfValid=false;
						}
					else
						{
							$isCpfValid=true;
						}
				}
			//Trecho usado para depurar erros.
			/*
			if($isCpfValid==true)
				{
					echo "Cpf é Válido";
				}
			if($isCpfValid==false)
				{
					echo "Cpf Inválido";
				}
			*/
			//Etapa 6: Retorna o Resultado em um valor booleano.
			return $isCpfValid;					
		}
?>

Arquivos para Download:

isCpfValid.php.txt