Skip to content

Instantly share code, notes, and snippets.

@andervilo02
Last active March 2, 2016 19:55
Show Gist options
  • Select an option

  • Save andervilo02/9dd706dd401900ad6ea6 to your computer and use it in GitHub Desktop.

Select an option

Save andervilo02/9dd706dd401900ad6ea6 to your computer and use it in GitHub Desktop.

Revisions

  1. andervilo02 revised this gist Mar 2, 2016. 1 changed file with 42 additions and 0 deletions.
    42 changes: 42 additions & 0 deletions Teste.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,42 @@
    <?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
  2. andervilo02 created this gist Mar 2, 2016.
    95 changes: 95 additions & 0 deletions Cnpj.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,95 @@
    <?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;
    }
    }
    }
    23 changes: 23 additions & 0 deletions Estado.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,23 @@
    <?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;
    }
    }