* @version 1.0 * @param string $cnpj * @return bool */ function valida_cnpj($cnpj) { // Verifica se o formato do CNPJ está correto $pattern = '/^[0-9]{2}\.[0-9]{3}\.[0-9]{3}\/[0-9]{4}-[0-9]{2}/'; if (!preg_match($pattern, $cnpj)) { return false; } // Captura apenas os 11 números do CPF $cnpj = preg_replace('/[^0-9]/', '', $cnpj); // Verifica se não foram informados números sequenciais (exemplo: 00.000.000/0000-00) if (str_repeat($cnpj[0], 14) == $cnpj) { return false; } // Verifica se o primeiro dígito verificador confere $digitoUmMultiplicadores = array(5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2); $digitoUmSoma = 0; for ($i = 0; $i < 12; $i++) { $digitoUmSoma += ( $cnpj[$i] * $digitoUmMultiplicadores[$i]); } $digitoUmResultado = $digitoUmSoma % 11; $digitoUmResultado = ($digitoUmResultado < 2) ? 0 : (11 - $digitoUmResultado); if ($cnpj[12] != $digitoUmResultado) { return false; } // Verifica se o segundo dígito verificador confere $digitoUmMultiplicadores = array(6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2); $digitoDoisSoma = 0; for ($i = 0; $i < 13; $i++) { $digitoDoisSoma += ( $cnpj[$i] * $digitoUmMultiplicadores[$i]); } $digitoDoisResultado = $digitoDoisSoma % 11; $digitoDoisResultado = ($digitoDoisResultado < 2) ? 0 : (11 - $digitoDoisResultado); if ($cnpj[13] != $digitoDoisResultado) { return false; } return true; } // Testando... echo '
', PHP_EOL;

var_dump( valida_cnpj( '00.000.000/0000-00' ) ); // CNPJ inválido
var_dump( valida_cnpj( '99.999.999/9999-99' ) ); // CNPJ inválido
var_dump( valida_cnpj( '06.947.284/0001-04' ) ); // CNPJ válido

echo '
';