Last active
March 2, 2016 19:55
-
-
Save andervilo02/9dd706dd401900ad6ea6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Arquivo forms/validate/Cnpj.php | |
*/ | |
class Validate_Cnpj extends Zend_Validate_Abstract | |
{ | |
const CNPJ_INVALIDO = "cnpj_invalido"; | |
protected $_messageTemplates = array ( | |
self::CNPJ_INVALIDO => "CNPJ Inválido" | |
); | |
public function isValid($cnpj) | |
{ | |
// Garante que o CNPJ é uma string | |
$cnpj = (string) $cnpj; | |
$this->_setValue($cnpj); | |
// Deixa o CNPJ com apenas números | |
$cnpj = preg_replace( '/[^0-9]/', '', $cnpj ); | |
// O valor original | |
$cnpj_original = $cnpj; | |
// Captura os primeiros 12 números do CNPJ | |
$primeiros_numeros_cnpj = substr( $cnpj, 0, 12 ); | |
// verificar por dígitos iguauis | |
$regex = "/^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/"; | |
if (preg_match($regex, $cnpj)) { | |
$this->_error(self::CNPJ_INVALIDO); | |
return false; | |
} | |
/** | |
* Multiplicação do CNPJ | |
* | |
* @param string $cnpj Os digitos do CNPJ | |
* @param int $posicoes A posição que vai iniciar a regressão | |
* @return int O | |
* | |
*/ | |
if ( ! function_exists('multiplica_cnpj') ) | |
{ | |
function multiplica_cnpj( $cnpj, $posicao = 5 ) | |
{ | |
// Variável para o cálculo | |
$calculo = 0; | |
// Laço para percorrer os item do cnpj | |
for ( $i = 0; $i < strlen( $cnpj ); $i++ ) | |
{ | |
// Cálculo mais posição do CNPJ * a posição | |
$calculo = $calculo + ( $cnpj[$i] * $posicao ); | |
// Decrementa a posição a cada volta do laço | |
$posicao--; | |
// Se a posição for menor que 2, ela se torna 9 | |
if ( $posicao < 2 ) { | |
$posicao = 9; | |
} | |
} | |
// Retorna o cálculo | |
return $calculo; | |
} | |
// Faz o primeiro cálculo | |
$primeiro_calculo = multiplica_cnpj( $primeiros_numeros_cnpj ); | |
// Se o resto da divisão entre o primeiro cálculo e 11 for menor que 2, o primeiro | |
// Dígito é zero (0), caso contrário é 11 - o resto da divisão entre o cálculo e 11 | |
$primeiro_digito = ( $primeiro_calculo % 11 ) < 2 ? 0 : 11 - ( $primeiro_calculo % 11 ); | |
// Concatena o primeiro dígito nos 12 primeiros números do CNPJ | |
// Agora temos 13 números aqui | |
$primeiros_numeros_cnpj .= $primeiro_digito; | |
// O segundo cálculo é a mesma coisa do primeiro, porém, começa na posição 6 | |
$segundo_calculo = multiplica_cnpj( $primeiros_numeros_cnpj, 6 ); | |
$segundo_digito = ( $segundo_calculo % 11 ) < 2 ? 0 : 11 - ( $segundo_calculo % 11 ); | |
// Concatena o segundo dígito ao CNPJ | |
$cnpj = $primeiros_numeros_cnpj . $segundo_digito; | |
// Verifica se o CNPJ gerado é idêntico ao enviado | |
if ( $cnpj !== $cnpj_original ) { | |
$this->_error(self::CNPJ_INVALIDO); | |
return false; | |
} | |
return true; | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Arquivo forms/validate/Estado.php | |
*/ | |
class Validate_Estado extends Zend_Validate_Abstract | |
{ | |
const ESTADO = "estado_invalido"; | |
protected $_messageTemplates = array ( | |
self::ESTADO => "Estado Inválido" | |
); | |
public function isValid($value) | |
{ | |
$siglas = ['AC','AL','AP','AM','BA','CE','DF','ES','GO','MA','MT','MS','MG','PA','PB','PR','PE','PI','RJ','RN','RS','RO','RR','SC','SP','SE','TO']; | |
if(!in_array($value, $siglas)){ | |
$this->_error(self::ESTADO); | |
return false; | |
} | |
return true; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class Application_Form_Teste extends Zend_Form | |
{ | |
public function init() | |
{ | |
$this->setName('fornecedor'); | |
$this->setAttrib('class', 'form-horizontal'); | |
$this->addElementPrefixPath( | |
'Validate', APPLICATION_PATH . '/forms/validate/', 'validate' | |
); | |
} | |
$cnpj = new Zend_Form_Element_Text('cnpj'); | |
$cnpj->setLabel('CNPJ') | |
->setRequired(true) | |
->addFilter('StripTags') | |
->addFilter('StringTrim') | |
->addValidator($notEmpty, true) | |
->addValidator('Cnpj') | |
->setAttrib('class', 'form-control cnpj') | |
->setAttrib('placeholder', 'CNPJ'); | |
$uf = new Zend_Form_Element_Text('uf'); | |
$uf->setLabel('Estado') | |
->setRequired(true) | |
->addFilter('StripTags') | |
->addFilter('StringTrim') | |
->addValidator($notEmpty, true) | |
->addValidator('Estado') | |
->setAttrib('class', 'form-control text-uppercase') | |
->setAttrib('v-model', 'fornecedor.uf') | |
// ->setAttrib('v-on:keyup', 'buscaSigla') | |
->setAttrib('placeholder', 'ESTADO') | |
->setAttrib('maxLength', 2); | |
} | |
@andervilo02 | |
Write |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment