/** * * @param string $cnpj * @return boolean */ public static function checkCnpj($cnpj) { $cnpj = str_replace(array('.', '/', '-'), '', $cnpj); $cnpj = trim($cnpj); if (empty($cnpj) || strlen($cnpj) != 14) { return FALSE; } else { if (ZendT_Lib::checkFake($cnpj, 14)) { return FALSE; } else { $rev_cnpj = strrev(substr($cnpj, 0, 12)); for ($i = 0; $i <= 11; $i++) { $i == 0 ? $multiplier = 2 : $multiplier; $i == 8 ? $multiplier = 2 : $multiplier; $multiply = $rev_cnpj[$i] * $multiplier; $sum = $sum + $multiply; $multiplier++; } $rest = $sum % 11; if ($rest == 0 || $rest == 1) { $dv1 = 0; } else { $dv1 = 11 - $rest; } $sub_cnpj = substr($cnpj, 0, 12); $rev_cnpj = strrev($sub_cnpj . $dv1); unset($sum); for ($i = 0; $i <= 12; $i++) { $i == 0 ? $multiplier = 2 : $multiplier; $i == 8 ? $multiplier = 2 : $multiplier; $multiply = $rev_cnpj[$i] * $multiplier; $sum = $sum + $multiply; $multiplier++; } $rest = $sum % 11; if ($rest == 0 || $rest == 1) { $dv2 = 0; } else { $dv2 = 11 - $rest; } if ($dv1 == $cnpj[12] && $dv2 == $cnpj[13]) { return TRUE; } else { return FALSE; } } } }