/** * 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'; }
/** * Gera o código de barras, baseado nas informações do banco. * * @return string */ protected function gerarCodigoBarras() { $data = $this->setDadosBoleto(); $this->getConvenio()->gerarCampoLivre($data); $tamanhos = $this->convenio->getTamanhos(); foreach ($data as $var => $value) { if (array_key_exists($var, $tamanhos)) { $data[$var] = StringBuilder::normalize($data[$var], $tamanhos[$var]); } } //Chamada do método que ajusta o NossoNumero $this->getConvenio()->ajustarNossoNumero($data); $this->convenio->setNossoNumero($data['NossoNumero']); $cod = $this->aplicarDadosAoLayout($this->convenio->getLayout(), $data); $dv = Number::modulo11($cod, 1, 1); $codigoBarras = $this->inserirDigitoVerificador($cod, $dv, 4); return $codigoBarras; }