예제 #1
0
 /**
  * Gera o campo livre do código de barras.
  * 
  * @param  ArrayObject $data
  * @return $data
  */
 public function gerarCampoLivre(ArrayObject $data)
 {
     $this->alterarTamanho('NossoNumero', 17);
     $this->alterarTamanho('CodigoCedente', 7);
     // 06 digitos + DV
     $this->alterarTamanho('CampoLivre', 18);
     // 17 digitos + DV
     $data['CodigoCedente'] .= Number::modulo11($data['CodigoCedente'], 0, 0, false);
     $nossoNumero = StringBuilder::normalize($data['NossoNumero'], 17);
     $constante1 = '2';
     // 1ª posição do Nosso Numero: Tipo de Cobrança (1-Registrada / 2-Sem Registro)
     $constante2 = '4';
     // 2ª posição do Nosso Número: Identificador da Emissão do Boleto (4-Beneficiário)
     $sequencia1 = (string) substr($nossoNumero, 2, 3);
     $sequencia2 = (string) substr($nossoNumero, 5, 3);
     $sequencia3 = (string) substr($nossoNumero, 8, 9);
     if ($data['Carteira'] == 'RG') {
         $constante1 = '1';
         // 1ª posição do Nosso Numero: Tipo de Cobrança (1-Registrada / 2-Sem Registro)
     }
     $data['CampoLivre'] = $sequencia1 . $constante1 . $sequencia2 . $constante2 . $sequencia3;
     // Calculando o DV do campo livre
     $campoLivre = $data['CodigoCedente'] . $data['CampoLivre'];
     $data['CampoLivre'] .= Number::modulo11($campoLivre, 0, 0, false);
     $this->layout = ':Banco:Moeda:FatorVencimento:Valor:CodigoCedente:CampoLivre';
 }
예제 #2
0
 /**
  * Insere os dados do boleto no layout do convênio
  *
  * @param $layout
  * @param $dados
  * @return string
  */
 protected function aplicarDadosAoLayout($layout, $dados)
 {
     $chaveAsbace = $dados['Agencia'] . $dados['Conta'] . $dados['NossoNumero'] . $dados['Banco'];
     $primeiroDvAsbace = Number::primeiroDvAsbace($chaveAsbace);
     $segundoDvAsbace = Number::segundoDvAsbace($chaveAsbace, $primeiroDvAsbace);
     $codigoBarras = StringBuilder::insert($layout, $dados);
     $codigoBarras = $this->inserirDigitoVerificador($codigoBarras, $primeiroDvAsbace, 41);
     $codigoBarras = $this->inserirDigitoVerificador($codigoBarras, $segundoDvAsbace, 42);
     return $codigoBarras;
 }
예제 #3
0
 /**
  * Gera a linha digitável baseado em um código de barras.
  *
  * @param  string $codigoBarras
  * @return string
  */
 protected function gerarLinhaDigitavel($codigoBarras)
 {
     // Campo1 - Posições de 1-4 e 20-24
     $linhaDigitavel = substr($codigoBarras, 0, 4) . substr($codigoBarras, 19, 5) . substr($codigoBarras, 24, 10) . substr($codigoBarras, 34, 10) . substr($codigoBarras, 4, 1) . substr($codigoBarras, 5, 14);
     $dv1 = Number::modulo10(substr($linhaDigitavel, 0, 9));
     $dv2 = Number::modulo10(substr($linhaDigitavel, 9, 10));
     $dv3 = Number::modulo10(substr($linhaDigitavel, 19, 10));
     $linhaDigitavel = StringBuilder::putAt($linhaDigitavel, $dv3, 29);
     $linhaDigitavel = StringBuilder::putAt($linhaDigitavel, $dv2, 19);
     $linhaDigitavel = StringBuilder::putAt($linhaDigitavel, $dv1, 9);
     return StringBuilder::applyMask($linhaDigitavel, $this->mascara);
 }