/** * 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'; }
/** * 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; }
/** * 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); }