Categorias

Aprenda a validar CNPJ com PHP

Esta função em PHP testa se um CNPJ é 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 CNPJ, isso permite que ela aceite CNPJs em diferentes formatos como:

  • 58.623.488/0001-93
  • 58 623 488 0001 93
  • 86455436482, entre outros.

Exemplo de uso:

include ('isCnpjValid.php');
$cnpj=58.623.488/0001-93;
$isCnpjValid=isCnpjValid($cnpj);

Sugestões de melhoria são bem vindas 🙂


	 * @version	1.0 Debugada em 27/09/2011 no PHP 5.3.8
	 * @param	string		$cnpj			Guarda o Cnpj como ele foi digitado pelo cliente
	 * @param	array		$num			Guarda apenas os números do Cnpj
	 * @param	boolean		$isCnpjValid	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 Cnpj é válido ou "false" caso o contrário
	 *
	 */
	 
	 function isCnpjValid($cnpj)
	 	{
			//Etapa 1: Cria um array com apenas os digitos numéricos, isso permite receber o cnpj em diferentes formatos como "00.000.000/0000-00", "00000000000000", "00 000 000 0000 00" etc...
			$j=0;
			for($i=0; $i<(strlen($cnpj)); $i++)
				{
					if(is_numeric($cnpj[$i]))
						{
							$num[$j]=$cnpj[$i];
							$j++;
						}
				}
			//Etapa 2: Conta os dígitos, um Cnpj válido possui 14 dígitos numéricos.
			if(count($num)!=14)
				{
					$isCnpjValid=false;
				}
			//Etapa 3: O número 00000000000 embora não seja um cnpj real resultaria um cnpj válido após o calculo dos dígitos verificares e por isso precisa ser filtradas nesta etapa.
			if ($num[0]==0 && $num[1]==0 && $num[2]==0 && $num[3]==0 && $num[4]==0 && $num[5]==0 && $num[6]==0 && $num[7]==0 && $num[8]==0 && $num[9]==0 && $num[10]==0 && $num[11]==0)
				{
					$isCnpjValid=false;
				}
			//Etapa 4: Calcula e compara o primeiro dígito verificador.
			else
				{
					$j=5;
					for($i=0; $i<4; $i++)
						{
							$multiplica[$i]=$num[$i]*$j;
							$j--;
						}
					$soma = array_sum($multiplica);
					$j=9;
					for($i=4; $i<12; $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[12])
						{
							$isCnpjValid=false;
						} 
				}
			//Etapa 5: Calcula e compara o segundo dígito verificador.
			if(!isset($isCnpjValid))
				{
					$j=6;
					for($i=0; $i<5; $i++)
						{
							$multiplica[$i]=$num[$i]*$j;
							$j--;
						}
					$soma = array_sum($multiplica);
					$j=9;
					for($i=5; $i<13; $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[13])
						{
							$isCnpjValid=false;
						}
					else
						{
							$isCnpjValid=true;
						}
				}
			//Trecho usado para depurar erros.
			/*
			if($isCnpjValid==true)
				{
					echo "

Cnpj é Válido

"; } if($isCnpjValid==false) { echo "

Cnpj Inválido

"; } */ //Etapa 6: Retorna o Resultado em um valor booleano. return $isCnpjValid; } ?>

Arquivos para Download:

isCnpjValid.php.txt