Segue agora uma função para validar CNPJ em formulários com o Codeigniter.
Essa função deve ser inserida no final do arquivo "Form_validation.php" que geralmente se encontra em: "/* Location: ./system/libraries/Form_validation.php */"
Obs: Nessa função, o formato do CNPJ deve ser: 00.000.000/0000-00
Sem os pontos, barra e traço apresentará erro!!
Função:
/** * Verifica se o CNPJ é valido * @param string * @return bool */ function valid_cnpj($str) { if (strlen($str) <> 18) return FALSE; $soma1 = ($str[0] * 5) + ($str[1] * 4) + ($str[3] * 3) + ($str[4] * 2) + ($str[5] * 9) + ($str[7] * 8) + ($str[8] * 7) + ($str[9] * 6) + ($str[11] * 5) + ($str[12] * 4) + ($str[13] * 3) + ($str[14] * 2); $resto = $soma1 % 11; $digito1 = $resto < 2 ? 0 : 11 - $resto; $soma2 = ($str[0] * 6) + ($str[1] * 5) + ($str[3] * 4) + ($str[4] * 3) + ($str[5] * 2) + ($str[7] * 9) + ($str[8] * 8) + ($str[9] * 7) + ($str[11] * 6) + ($str[12] * 5) + ($str[13] * 4) + ($str[14] * 3) + ($str[16] * 2); $resto = $soma2 % 11; $digito2 = $resto < 2 ? 0 : 11 - $resto; return (($str[16] == $digito1) && ($str[17] == $digito2)); } // --------------------------------------------------------------------
Não se esqueça de adicionar a seguinte linha no arquivo de mensagens de erro de validação de formulários:
$lang['valid_cnpj'] = "O campo %s nao e um CNPJ valido. Use o formato 00.000.000/0000-00";
Para chamar a validação do formulário em um controller, utilize e seguinte linha:
$this->form_validation->set_rules('cnpj', 'CNPJ', 'required|valid_cnpj');
Duvidas?? Deixe um comentário...
O cnpj 00.000.000/0000-00 é cadastrado como valido, como fazemos para não permitir isso????
ResponderExcluirFiz tudo como esta acima e o meu não funcionou, mesmo colocando um cnpj inválido o cadastro passa da mesma forma.
ResponderExcluirGalera alguem pode me ajudar ...
ResponderExcluiro meu CNPJ também não funcionou 11.111.111/1111-11 foi salvo no banco de dados...
Funcionou perfeitamente. Para evitar registros com 0, adicione "is_natural_no_zero" na validação assim:
ResponderExcluir$this->form_validation->set_rules('cnpj', 'CNPJ', 'required|valid_cnpj|is_natural_no_zero');
se você inserir um número de cnpj gerado no derador de testes ele apresenta erro
Excluirmesmo utilizando a configuração citada "is_natural_no_zero"
-- Campo requer somente número maior que zero
Ao acrescentar no codigo uma alteração para não aceitar os campos preenchidos com zero
Excluirif($str == '00.000.000/0000-00') return FALSE;
se você inserir um número de cnpj gerado no derador de testes ele apresenta erro
ResponderExcluirmesmo utilizando a configuração citada "is_natural_no_zero"
-- Campo requer somente número maior que zero
//--------------------------------------------------------------------
ResponderExcluir/**
* Verifica se o CNPJ é valido
* @param string
* @return bool
*/
function valid_cnpj($str)
{
if($str == '00.000.000/0000-00') return FALSE;
if (strlen($str) <> 18) return FALSE;
$soma1 = ($str[0] * 5) +
($str[1] * 4) +
($str[3] * 3) +
($str[4] * 2) +
($str[5] * 9) +
($str[7] * 8) +
($str[8] * 7) +
($str[9] * 6) +
($str[11] * 5) +
($str[12] * 4) +
($str[13] * 3) +
($str[14] * 2);
$resto = $soma1 % 11;
$digito1 = $resto < 2 ? 0 : 11 - $resto;
$soma2 = ($str[0] * 6) +
($str[1] * 5) +
($str[3] * 4) +
($str[4] * 3) +
($str[5] * 2) +
($str[7] * 9) +
($str[8] * 8) +
($str[9] * 7) +
($str[11] * 6) +
($str[12] * 5) +
($str[13] * 4) +
($str[14] * 3) +
($str[16] * 2);
$resto = $soma2 % 11;
$digito2 = $resto < 2 ? 0 : 11 - $resto;
return (($str[16] == $digito1) && ($str[17] == $digito2));
}
// --------------------------------------------------------------------
$lang['valid_cnpj'] = "O campo %s nao e um CNPJ valido. Use o formato 00.000.000/0000-00";
//------------------------------------------------------------------------------------------
$this->form_validation->set_rules('cnpj', 'CNPJ', 'required|valid_cnpj');