Gera a linha digitável baseado em um código de barras.

@param  string $codigoBarras
@return string
967557
protected function gerarLinhaDigitavel($codigoBarras)
    {
        // Campo1 - Posições de 1-4 e 20-24
        $linhaDigitavel = substr($codigoBarras, 0, 4) . substr($codigoBarras, 19, 5)
            // Campo2 - Posições 25-34
            . substr($codigoBarras, 24, 10)
            // Campo3 - Posições 35-44
            . substr($codigoBarras, 34, 10)
            // Campo4 - Posição 5
            . substr($codigoBarras, 4, 1)
            // Campo5 - Posições 6-19
            . 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);
    }
96653
private function scanEscapedUnicodeSequence(): string
    {
        static $hexChars = "0123456789ABCDEFabcdef";
        static $length = 4;

        $sequence = $this->scanWhile($hexChars, $length);

        if (\strlen($sequence) < $length) {
            throw new ParseException($this->getExceptionMessage());
        }

        return $sequence;
    }
160672
private function createManifest(array $dados)
    {
        //Cria Tamanhos de Ícones
        $this->createFaviconSizes($dados);

        //Create Manifest
        $theme = explode("}", explode(".theme{", file_get_contents(PATH_HOME . "public/assets/theme.min.css"))[1])[0];
        $themeBack = explode("!important", explode("background-color:", $theme)[1])[0];
        $themeColor = explode("!important", explode("color:", $theme)[1])[0];
        $faviconName = pathinfo($dados['favicon'], PATHINFO_FILENAME);
        $faviconExt = pathinfo($dados['favicon'], PATHINFO_EXTENSION);
        $content = str_replace(['{$sitename}', '{$faviconName}', '{$faviconExt}', '{$theme}', '{$themeColor}'], [$dados['sitename'], $faviconName, $faviconExt, $themeBack, $themeColor], file_get_contents(PATH_HOME . VENDOR . "config/public/installTemplates/manifest.txt"));

        $fp = fopen(PATH_HOME . "manifest.json", "w");
        fwrite($fp, $content);
        fclose($fp);
    }
817730
public function gerar()
    {
        if (!$this->isValid($messages)) {
            throw new \Exception('Campos requeridos pelo banco, aparentam estar ausentes ' . $messages);
        }

        $stringRemessa = '';
        if ($this->iRegistros < 1) {
            throw new \Exception('Nenhuma linha detalhe foi adicionada');
        }

        $this->header();
        $stringRemessa .= $this->valida($this->getHeader()) . $this->fimLinha;

        $this->headerLote();
        $stringRemessa .= $this->valida($this->getHeaderLote()) . $this->fimLinha;

        foreach ($this->getDetalhes() as $i => $detalhe) {
            $stringRemessa .= $this->valida($detalhe) . $this->fimLinha;
        }

        $this->trailerLote();
        $stringRemessa .= $this->valida($this->getTrailerLote()) . $this->fimLinha;

        $this->trailer();
        $stringRemessa .= $this->valida($this->getTrailer()) . $this->fimArquivo;

        return Encoding::toUTF8($stringRemessa);
    }
805997
public static function IPTE2CodigoBarras($ipte)
    {
        $ipte = self::onlyNumbers($ipte);

        $barras = substr($ipte, 0, 4);
        $barras .= substr($ipte, 32, 1) ;
        $barras .= substr($ipte, 33, 14) ;
        $barras .= substr($ipte, 4,1) ;
        $barras .= substr($ipte, 5, 4) ;
        $barras .= substr($ipte, 10, 10) ;
        $barras .= substr($ipte, 21, 8) ;
        $barras .= substr($ipte, 29, 2);

        return $barras;
    }
928217
public function ajustarNossoNumero(ArrayObject $data)
    {
        $carteira = $this->carteira;

        switch (strlen($this->convenio)) {
            case 6:
                if (!$carteira instanceof Carteira21) {
                    $data['NossoNumero'] = $this->convenio . $data['NossoNumero'];
                }
                break;
            case 4:
            case 7:
                $data['NossoNumero'] = $this->convenio . $data['NossoNumero'];
                break;
            default:
                throw new \LogicException('O codigo do convenio precisa ter 4, 6 ou 7 digitos!');
        }

        return $data;
    }
1287270
public static function getBancoClass($banco) {

        $aBancos = [
            BoletoContract::COD_BANCO_BB => 'Banco\\Bb',
            BoletoContract::COD_BANCO_SANTANDER => 'Banco\\Santander',
            BoletoContract::COD_BANCO_CEF => 'Banco\\Caixa',
            BoletoContract::COD_BANCO_BRADESCO => 'Banco\\Bradesco',
            BoletoContract::COD_BANCO_ITAU => 'Banco\\Itau',
            BoletoContract::COD_BANCO_HSBC => 'Banco\\Hsbc',
            BoletoContract::COD_BANCO_SICREDI => 'Banco\\Sicredi',
            BoletoContract::COD_BANCO_BANRISUL => 'Banco\\Banrisul',
            BoletoContract::COD_BANCO_BANCOOB => 'Banco\\Bancoob',
            BoletoContract::COD_BANCO_BNB => 'Banco\\Bnb',
        ];

        if (array_key_exists($banco, $aBancos)) {
            return $aBancos[$banco];
        }

        throw new \Exception("Banco: $banco, inválido");
    }
1041996
public function getEnderecoCompleto()
    {
        $dados = array_filter(array($this->getEndereco(), $this->getBairro(), $this->getCidade(), $this->getUf(), $this->getCep()));
        return implode(' - ', $dados);
    }
1358544
private function doMul(string $a, string $b) : string
    {
        $x = \strlen($a);
        $y = \strlen($b);

        $maxDigits = \intdiv($this->maxDigits, 2);
        $complement = 10 ** $maxDigits;

        $result = '0';

        for ($i = $x - $maxDigits;; $i -= $maxDigits) {
            $blockALength = $maxDigits;

            if ($i < 0) {
                $blockALength += $i;
                $i = 0;
            }

            $blockA = (int) \substr($a, $i, $blockALength);

            $line = '';
            $carry = 0;

            for ($j = $y - $maxDigits;; $j -= $maxDigits) {
                $blockBLength = $maxDigits;

                if ($j < 0) {
                    $blockBLength += $j;
                    $j = 0;
                }

                $blockB = (int) \substr($b, $j, $blockBLength);

                $mul = $blockA * $blockB + $carry;
                $value = $mul % $complement;
                $carry = ($mul - $value) / $complement;

                $value = (string) $value;
                $value = \str_pad($value, $maxDigits, '0', STR_PAD_LEFT);

                $line = $value . $line;

                if ($j === 0) {
                    break;
                }
            }

            if ($carry !== 0) {
                $line = $carry . $line;
            }

            $line = \ltrim($line, '0');

            if ($line !== '') {
                $line .= \str_repeat('0', $x - $blockALength - $i);
                $result = $this->add($result, $line);
            }

            if ($i === 0) {
                break;
            }
        }

        return $result;
    }
169446
public function getCheckDigits()
    {
        $checkDigits = '';
        $iban = $this->getIban();
        if (!empty($iban)) {
            $checkDigits = substr($iban, 2, 2);
        }
        return $checkDigits;
    }
422136
public function addBoleto(BoletoContract $boleto)
    {
        $this->boletos[] = $boleto;
        $this->iniciaDetalhe();

        $this->add(1, 1, 1);
        $this->add(2, 3, strlen(Util::onlyNumbers($this->getBeneficiario()->getDocumento())) == 14 ? '02' : '01');
        $this->add(4, 17, Util::formatCnab('9L', $this->getBeneficiario()->getDocumento(), 14));
        $this->add(18, 21, Util::formatCnab('9', $this->getAgencia(), 4));
        $this->add(22, 22, CalculoDv::bancoobAgencia($this->getAgencia()));
        $this->add(23, 30, Util::formatCnab('9', $this->getConta(), 8));
        $this->add(31, 31, Util::formatCnab('9', $this->getContaDv() ?: CalculoDV::bancoobContaCorrente($this->getConta()), 1));
        $this->add(32, 37, '000000');
        $this->add(38, 62, Util::formatCnab('X', $boleto->getNumeroControle(), 25)); // numero de controle
        $this->add(63, 74, Util::formatCnab('9', $boleto->getNossoNumero(), 12));
        $this->add(75, 76, '01'); //Numero da parcela - Não implementado
        $this->add(77, 78, '00'); //Grupo de valor
        $this->add(82, 82, '');
        $this->add(83, 85, '');
        $this->add(86, 88, '000');
        $this->add(89, 89, '0');
        $this->add(90, 94, '00000'); //Número do Contrato Garantia: Para Carteira 1 preencher "00000"
        $this->add(95, 95, '0'); //DV do contrato: Para Carteira 1 preencher "0"
        $this->add(96, 101, '000000');
        $this->add(102, 105, '');
        $this->add(106, 106, '2'); //Tipo de Emissão: 1 - Cooperativa 2 - Cliente
        $this->add(107, 108, Util::formatCnab('9', $this->getCarteira(), 2));
        $this->add(109, 110, self::OCORRENCIA_REMESSA); // REGISTRO
        if ($boleto->getStatus() == $boleto::STATUS_BAIXA) {
            $this->add(109, 110, self::OCORRENCIA_PEDIDO_BAIXA); // BAIXA
        }
        if ($boleto->getStatus() == $boleto::STATUS_ALTERACAO) {
            $this->add(109, 110, self::OCORRENCIA_ALT_OUTROS_DADOS); // ALTERAR VENCIMENTO
        }
        if ($boleto->getStatus() == $boleto::STATUS_ALTERACAO_DATA) {
            $this->add(109, 110, self::OCORRENCIA_ALT_VENCIMENTO);
        }
        if ($boleto->getStatus() == $boleto::STATUS_CUSTOM) {
            $this->add(109, 110, sprintf('%2.02s', $boleto->getComando()));
        }
        $this->add(111, 120, Util::formatCnab('X', $boleto->getNumeroDocumento(), 10));
        $this->add(121, 126, $boleto->getDataVencimento()->format('dmy'));
        $this->add(127, 139, Util::formatCnab('9', $boleto->getValor(), 13, 2));
        $this->add(140, 142, $this->getCodigoBanco());
        $this->add(143, 146, Util::formatCnab('9', $this->getAgencia(), 4));
        $this->add(147, 147, CalculoDv::bancoobAgencia($this->getAgencia()));
        $this->add(148, 149, isset($this->especie400[$boleto->getEspecieDocCodigo()]) ? $this->especie400[$boleto->getEspecieDocCodigo()] : '99');

        $this->add(150, 150, ($boleto->getAceite() == 'N' ? '0' : '1'));
        $this->add(151, 156, $boleto->getDataDocumento()->format('dmy'));
        $this->add(157, 158, $boleto->getStatus() == $boleto::STATUS_BAIXA ? self::OCORRENCIA_BAIXAR : self::INSTRUCAO_SEM);
        $this->add(159, 160, self::INSTRUCAO_SEM);
        $diasProtesto = '00';
        if (($boleto->getStatus() != $boleto::STATUS_BAIXA) && ($boleto->getDiasProtesto() > 0)) {
            $const = sprintf('self::INSTRUCAO_PROTESTAR_VENC_%02s', $boleto->getDiasProtesto());

            if (defined($const)) {
                $this->add(157, 158, constant($const));
            } else {
                throw new \Exception("A instrução para protesto em ".$boleto->getDiasProtesto()." dias não existe no banco.");
            }
        }
        $this->add(161, 166, Util::formatCnab('9', $boleto->getJuros(), 6, 4));
        $this->add(167, 172, Util::formatCnab('9', $boleto->getMulta(), 6, 4));
        $this->add(173, 173, '2'); //Tipo de distribuição: 1 - Cooperativa 2 - Cliente
        $this->add(174, 179, $boleto->getDesconto() > 0 ? $boleto->getDataDesconto()->format('dmy') : '000000');
        $this->add(180, 192, Util::formatCnab('9', $boleto->getDesconto(), 13, 2));
        $this->add(193, 193, '9');
        $this->add(194, 205, Util::formatCnab('9', 0, 12, 2));
        $this->add(206, 218, Util::formatCnab('9', 0, 13, 2));
        $this->add(219, 220, strlen(Util::onlyNumbers($boleto->getPagador()->getDocumento())) == 14 ? '02' : '01');
        $this->add(221, 234, Util::formatCnab('9L', $boleto->getPagador()->getDocumento(), 14));
        $this->add(235, 271, Util::formatCnab('X', $boleto->getPagador()->getNome(), 37));
        $this->add(272, 274, '');
        $this->add(275, 314, Util::formatCnab('X', $boleto->getPagador()->getEndereco(), 40));
        $this->add(315, 326, Util::formatCnab('X', $boleto->getPagador()->getBairro(), 12));
        $this->add(327, 334, Util::formatCnab('9L', $boleto->getPagador()->getCep(), 8));
        $this->add(335, 349, Util::formatCnab('X', $boleto->getPagador()->getCidade(), 15));
        $this->add(350, 351, Util::formatCnab('X', $boleto->getPagador()->getUf(), 2));
        $this->add(352, 391, Util::formatCnab('X', $boleto->getSacadorAvalista() ? $boleto->getSacadorAvalista()->getNome() : '', 40));
        $this->add(392, 393, $diasProtesto);
        $this->add(394, 394, '');
        $this->add(395, 400, Util::formatCnab('9', $this->iRegistros + 1, 6));
    }
422127
public function getBarCharacter() {
        if (null === $this->barChar) {
            return $this->max ? '=' : $this->emptyBarChar;
        }

        return $this->barChar;
    }
1335987
public function getCodigoBarras()
    {
        if (!empty($this->campoCodigoBarras)) {
            return $this->campoCodigoBarras;
        }

        if (!$this->isValid($messages)) {
            throw new \Exception('Campos requeridos pelo banco, aparentam estar ausentes ' . $messages);
        }

        $codigo = Util::numberFormatGeral($this->getCodigoBanco(), 3)
            . $this->getMoeda()
            . Util::fatorVencimento($this->getDataVencimento())
            . Util::numberFormatGeral($this->getValor(), 10)
            . $this->getCampoLivre();

        $resto = Util::modulo11($codigo, 2, 9, 0);
        $dv = (in_array($resto, [0, 10, 11])) ? 1 : $resto;

        return $this->campoCodigoBarras = substr($codigo, 0, 4) . $dv . substr($codigo, 4);
    }
946628
public function getBarcodeDatamatrix($data)
    {
        $barcode = new Barcode();

        $bobj = $barcode->getBarcodeObj(
            'DATAMATRIX',
            $data,
            256,
            256,
            'black',
            array(0, 0, 0, 0)
        )->setBackgroundColor('white');

        return $bobj->getPngData();
    }
135941
public function getNome($codigo_banco, $codigo_ocorrencia, $format = 'cnab400')
    {
        $format = strtolower($format);
        $codigo_banco = (int) $codigo_banco;
        $codigo_ocorrencia = (int) $codigo_ocorrencia;
        $yamlLoad = new \Cnab\Format\YamlLoad($codigo_banco);
        $array = $yamlLoad->loadFormat($format, 'retorno/codigo_ocorrencia');

        $codigo_banco = str_pad($codigo_banco, 3, '0', STR_PAD_LEFT);

        if (array_key_exists($codigo_banco, $array) && array_key_exists($codigo_ocorrencia, $array[$codigo_banco])) {
            return $array[$codigo_banco][$codigo_ocorrencia];
        }
    }
472336
public function getCodigoNome()
    {
        $codigo = $this->getCodigo();

        if (\Cnab\Banco::BRADESCO == $this->_codigo_banco) {
            if (2 == $codigo) {
                return 'Entrada Confirmada';
            } elseif (3 == $codigo) {
                return 'Entrada Rejeitada';
            } elseif (6 == $codigo) {
                return 'Liquidação normal';
            } elseif (9 == $codigo) {
                return 'Baixado Automat. via Arquivo';
            } elseif (10 == $codigo) {
                return 'Baixado conforme instruções da Agência';
            } elseif (11 == $codigo) {
                return 'Em Ser - Arquivo de Títulos pendentes';
            } elseif (12 == $codigo) {
                return 'Abatimento Concedido';
            } elseif (13 == $codigo) {
                return 'Abatimento Cancelado';
            } elseif (14 == $codigo) {
                return 'Vencimento Alterado';
            } elseif (15 == $codigo) {
                return 'Liquidação em Cartório';
            } elseif (16 == $codigo) {
                return 'Título Pago em Cheque – Vinculado';
            } elseif (17 == $codigo) {
                return 'Liquidação após baixa ou Título não registrado';
            } elseif (18 == $codigo) {
                return 'Acerto de Depositária (sem motivo)';
            } elseif (19 == $codigo) {
                return 'Confirmação Receb. Inst. de Protesto';
            } elseif (20 == $codigo) {
                return 'Confirmação Recebimento Instrução Sustação de Protesto';
            } elseif (21 == $codigo) {
                return 'Acerto do Controle do Participante';
            } elseif (22 == $codigo) {
                return 'Título Com Pagamento Cancelado';
            } elseif (23 == $codigo) {
                return 'Entrada do Título em Cartório';
            } elseif (24 == $codigo) {
                return 'Entrada rejeitada por CEP Irregular';
            } elseif (27 == $codigo) {
                return 'Baixa Rejeitada';
            } elseif (28 == $codigo) {
                return 'Débito de tarifas/custas';
            } elseif (30 == $codigo) {
                return 'Alteração de Outros Dados Rejeitados';
            } elseif (32 == $codigo) {
                return 'Instrução Rejeitada';
            } elseif (33 == $codigo) {
                return 'Confirmação Pedido Alteração Outros Dados';
            } elseif (34 == $codigo) {
                return 'Retirado de Cartório e Manutenção Carteira';
            } elseif (35 == $codigo) {
                return 'Desagendamento do débito automático';
            } elseif (40 == $codigo) {
                return 'Estorno de pagamento';
            } elseif (55 == $codigo) {
                return 'Sustado judicial';
            } elseif (68 == $codigo) {
                return 'Acerto dos dados do rateio de Crédito';
            } elseif (69 == $codigo) {
                return 'Cancelamento dos dados do rateio';
            }
        } elseif (\Cnab\Banco::CEF == $this->_codigo_banco) {
            if (1 == $codigo) {
                return 'Entrada Confirmada';
            } elseif (2 == $codigo) {
                return 'Baixa Confirmada';
            } elseif (3 == $codigo) {
                return 'Abatimento Concedido';
            } elseif (4 == $codigo) {
                return 'Abatimento Cancelado';
            } elseif (5 == $codigo) {
                return 'Vencimento Alterado';
            } elseif (6 == $codigo) {
                return 'Uso da Empresa Alterado';
            } elseif (7 == $codigo) {
                return 'Prazo de Protesto Alterado';
            } elseif (8 == $codigo) {
                return 'Prazo de Devolução Alterado';
            } elseif (9 == $codigo) {
                return 'Alteração Confirmada';
            } elseif (10 == $codigo) {
                return 'Alteração com Reemissão de Bloqueto Confirmada';
            } elseif (11 == $codigo) {
                return 'Alteração da Opção de Protesto para Devolução';
            } elseif (12 == $codigo) {
                return 'Alteração da Opção de Devolução para protesto';
            } elseif (20 == $codigo) {
                return 'Em Ser';
            } elseif (21 == $codigo) {
                return 'Liquidação';
            } elseif (22 == $codigo) {
                return 'Liquidação em Cartório';
            } elseif (23 == $codigo) {
                return 'Baixa por Devolução';
            } elseif (24 == $codigo) {
                return 'Baixa por Franco Pagamento';
            } elseif (25 == $codigo) {
                return 'Baixa por Protesto';
            } elseif (26 == $codigo) {
                return 'Título enviado para Cartório';
            } elseif (27 == $codigo) {
                return 'Sustação de Protesto';
            } elseif (28 == $codigo) {
                return 'Estorno de Protesto';
            } elseif (29 == $codigo) {
                return 'Estorno de Sustação de Protesto';
            } elseif (30 == $codigo) {
                return 'Alteração de Título';
            } elseif (31 == $codigo) {
                return 'Tarifa sobre Título Vencido';
            } elseif (32 == $codigo) {
                return 'Outras Tarifas de Alteração';
            } elseif (33 == $codigo) {
                return 'Estorno de Baixa/Liquidação';
            } elseif (34 == $codigo) {
                return 'Transferência de Carteira/Entrada';
            } elseif (35 == $codigo) {
                return 'Transferência de Carteira/Baixa';
            } elseif (99 == $codigo) {
                return 'Rejeição do Título – Cód. Rejeição informado nas POS 80 a 82';
            }
        } else {
            if ($codigo == 2) {
                return 'ENTRADA CONFIRMADA COM POSSIBILIDADE DE MENSAGEM (NOTA 20 – TABELA 10) ';
            } elseif ($codigo == 3) {
                return 'ENTRADA REJEITADA (NOTA 20 - TABELA 1)';
            } elseif ($codigo == 4) {
                return 'ALTERAÇÃO DE DADOS - NOVA ENTRADA OU ALTERAÇÃO/EXCLUSÃO DE DADOS ACATADA ';
            } elseif ($codigo == 5) {
                return 'ALTERAÇÃO DE DADOS – BAIXA';
            } elseif ($codigo == 6) {
                return 'LIQUIDAÇÃO NORMAL';
            } elseif ($codigo == 7) {
                return 'LIQUIDAÇÃO PARCIAL – COBRANÇA INTELIGENTE (B2B)';
            } elseif ($codigo == 8) {
                return 'LIQUIDAÇÃO EM CARTÓRIO ';
            } elseif ($codigo == 9) {
                return 'BAIXA SIMPLES';
            } elseif ($codigo == 10) {
                return 'BAIXA POR TER SIDO LIQUIDADO ';
            } elseif ($codigo == 11) {
                return 'EM SER (SÓ NO RETORNO MENSAL)';
            } elseif ($codigo == 12) {
                return 'ABATIMENTO CONCEDIDO ';
            } elseif ($codigo == 13) {
                return 'ABATIMENTO CANCELADO';
            } elseif ($codigo == 14) {
                return 'VENCIMENTO ALTERADO ';
            } elseif ($codigo == 15) {
                return 'BAIXAS REJEITADAS (NOTA 20 - TABELA 4)';
            } elseif ($codigo == 16) {
                return 'INSTRUÇÕES REJEITADAS (NOTA 20 - TABELA 3) ';
            } elseif ($codigo == 17) {
                return 'ALTERAÇÃO/EXCLUSÃO DE DADOS REJEITADOS (NOTA 20 - TABELA 2)';
            } elseif ($codigo == 18) {
                return 'COBRANÇA CONTRATUAL - INSTRUÇÕES/ALTERAÇÕES REJEITADAS/PENDENTES (NOTA 20 - TABELA 5) ';
            } elseif ($codigo == 19) {
                return 'CONFIRMA RECEBIMENTO DE INSTRUÇÃO DE PROTESTO';
            } elseif ($codigo == 20) {
                return 'CONFIRMA RECEBIMENTO DE INSTRUÇÃO DE SUSTAÇÃO DE PROTESTO /TARIFA';
            } elseif ($codigo == 21) {
                return 'CONFIRMA RECEBIMENTO DE INSTRUÇÃO DE NÃO PROTESTAR';
            } elseif ($codigo == 23) {
                return 'TÍTULO ENVIADO A CARTÓRIO/TARIFA';
            } elseif ($codigo == 24) {
                return 'INSTRUÇÃO DE PROTESTO REJEITADA / SUSTADA / PENDENTE (NOTA 20 - TABELA 7)';
            } elseif ($codigo == 25) {
                return 'ALEGAÇÕES DO SACADO (NOTA 20 - TABELA 6)';
            } elseif ($codigo == 26) {
                return 'TARIFA DE AVISO DE COBRANÇA';
            } elseif ($codigo == 27) {
                return 'TARIFA DE EXTRATO POSIÇÃO (B40X)';
            } elseif ($codigo == 28) {
                return 'TARIFA DE RELAÇÃO DAS LIQUIDAÇÕES';
            } elseif ($codigo == 29) {
                return 'TARIFA DE MANUTENÇÃO DE TÍTULOS VENCIDOS';
            } elseif ($codigo == 30) {
                return 'DÉBITO MENSAL DE TARIFAS (PARA ENTRADAS E BAIXAS)';
            } elseif ($codigo == 32) {
                return 'BAIXA POR TER SIDO PROTESTADO';
            } elseif ($codigo == 33) {
                return 'CUSTAS DE PROTESTO';
            } elseif ($codigo == 34) {
                return 'CUSTAS DE SUSTAÇÃO';
            } elseif ($codigo == 35) {
                return 'CUSTAS DE CARTÓRIO DISTRIBUIDOR';
            } elseif ($codigo == 36) {
                return 'CUSTAS DE EDITAL';
            } elseif ($codigo == 37) {
                return 'TARIFA DE EMISSÃO DE BOLETO/TARIFA DE ENVIO DE DUPLICATA';
            } elseif ($codigo == 38) {
                return 'TARIFA DE INSTRUÇÃO';
            } elseif ($codigo == 39) {
                return 'TARIFA DE OCORRÊNCIAS';
            } elseif ($codigo == 40) {
                return 'TARIFA MENSAL DE EMISSÃO DE BOLETO/TARIFA MENSAL DE ENVIO DE DUPLICATA';
            } elseif ($codigo == 41) {
                return 'DÉBITO MENSAL DE TARIFAS – EXTRATO DE POSIÇÃO (B4EP/B4OX)';
            } elseif ($codigo == 42) {
                return 'DÉBITO MENSAL DE TARIFAS – OUTRAS INSTRUÇÕES';
            } elseif ($codigo == 43) {
                return 'DÉBITO MENSAL DE TARIFAS – MANUTENÇÃO DE TÍTULOS VENCIDOS';
            } elseif ($codigo == 44) {
                return 'DÉBITO MENSAL DE TARIFAS – OUTRAS OCORRÊNCIAS';
            } elseif ($codigo == 45) {
                return 'DÉBITO MENSAL DE TARIFAS – PROTESTO';
            } elseif ($codigo == 46) {
                return 'DÉBITO MENSAL DE TARIFAS – SUSTAÇÃO DE PROTESTO';
            } elseif ($codigo == 47) {
                return 'BAIXA COM TRANSFERÊNCIA PARA DESCONTO';
            } elseif ($codigo == 48) {
                return 'CUSTAS DE SUSTAÇÃO JUDICIAL';
            } elseif ($codigo == 51) {
                return 'TARIFA MENSAL REF A ENTRADAS BANCOS CORRESPONDENTES NA CARTEIRA';
            } elseif ($codigo == 52) {
                return 'TARIFA MENSAL BAIXAS NA CARTEIRA';
            } elseif ($codigo == 53) {
                return 'TARIFA MENSAL BAIXAS EM BANCOS CORRESPONDENTES NA CARTEIRA';
            } elseif ($codigo == 54) {
                return 'TARIFA MENSAL DE LIQUIDAÇÕES NA CARTEIRA';
            } elseif ($codigo == 55) {
                return 'TARIFA MENSAL DE LIQUIDAÇÕES EM BANCOS CORRESPONDENTES NA CARTEIRA';
            } elseif ($codigo == 56) {
                return 'CUSTAS DE IRREGULARIDADE';
            } elseif ($codigo == 57) {
                return 'INSTRUÇÃO CANCELADA (NOTA 20 – TABELA 8)';
            } elseif ($codigo == 59) {
                return 'BAIXA POR CRÉDITO EM C/C ATRAVÉS DO SISPAG';
            } elseif ($codigo == 60) {
                return 'ENTRADA REJEITADA CARNÊ (NOTA 20 – TABELA 1)';
            } elseif ($codigo == 61) {
                return 'TARIFA EMISSÃO AVISO DE MOVIMENTAÇÃO DE TÍTULOS (2154)';
            } elseif ($codigo == 62) {
                return 'DÉBITO MENSAL DE TARIFA - AVISO DE MOVIMENTAÇÃO DE TÍTULOS (2154)';
            } elseif ($codigo == 63) {
                return 'TÍTULO SUSTADO JUDICIALMENTE';
            } elseif ($codigo == 64) {
                return 'ENTRADA CONFIRMADA COM RATEIO DE CRÉDITO';
            } elseif ($codigo == 69) {
                return 'CHEQUE DEVOLVIDO (NOTA 20 - TABELA 9)';
            } elseif ($codigo == 71) {
                return 'ENTRADA REGISTRADA, AGUARDANDO AVALIAÇÃO';
            } elseif ($codigo == 72) {
                return 'BAIXA POR CRÉDITO EM C/C ATRAVÉS DO SISPAG SEM TÍTULO CORRESPONDENTE';
            } elseif ($codigo == 73) {
                return 'CONFIRMAÇÃO DE ENTRADA NA COBRANÇA SIMPLES – ENTRADA NÃO ACEITA NA COBRANÇA CONTRATUAL';
            } elseif ($codigo == 76) {
                return 'CHEQUE COMPENSADO';
            } else {
                return 'Código Inexistente';
            }
        }
    }
1355191
public function toBinary()
    {
        $binary = hex2bin(str_pad(dechex(ord($this->signature)), 2, 0, STR_PAD_LEFT));
        $binary .= hex2bin($this->dec2hex($this->userPrivilege));
        $binary .= hex2bin($this->callbackPhoneNumber);
        
        return $binary;
    }