Skip to content

Instantly share code, notes, and snippets.

@GuilhermeHideki
Created March 7, 2018 20:18
Show Gist options
  • Save GuilhermeHideki/82a4fd428194b326235c659b02facffc to your computer and use it in GitHub Desktop.
Save GuilhermeHideki/82a4fd428194b326235c659b02facffc to your computer and use it in GitHub Desktop.
<?php
/**
* @author Rafael Azenha Aquini <rafael@tchesoft.com>
* @author Marco Antonio Righi <marcorighi@tchesoft.com>
* @author Marcelo Belinato <mbelinato@gmail.com>
*
* @license GPL
*/
// +----------------------------------------------------------------------+
// | BoletoPhp - Versão Beta |
// +----------------------------------------------------------------------+
// | Este arquivo está disponível sob a Licença GPL disponível pela Web |
// | em http://pt.wikipedia.org/wiki/GNU_General_Public_License |
// | Você deve ter recebido uma cópia da GNU Public License junto com |
// | esse pacote; se não, escreva para: |
// | |
// | Free Software Foundation, Inc. |
// | 59 Temple Place - Suite 330 |
// | Boston, MA 02111-1307, USA. |
// +----------------------------------------------------------------------+
// +----------------------------------------------------------------------+
// | Originado do Projeto BBBoletoFree que tiveram colaborações de Daniel |
// | William Schultz e Leandro Maniezo que por sua vez foi derivado do |
// | PHPBoleto de João Prado Maia e Pablo Martins F. Costa |
// | |
// | Se vc quer colaborar, nos ajude a desenvolver p/ os demais bancos :-)|
// | Acesse o site do Projeto BoletoPhp: www.boletophp.com.br |
// +----------------------------------------------------------------------+
// +----------------------------------------------------------------------+
// | Equipe Coordenação Projeto BoletoPhp: <boletophp@boletophp.com.br> |
// | Desenv Boleto SICREDI: Rafael Azenha Aquini <rafael@tchesoft.com> |
// | Marco Antonio Righi <marcorighi@tchesoft.com> |
// | Homologação e ajuste de algumas rotinas |
// | Marcelo Belinato <mbelinato@gmail.com> |
// +----------------------------------------------------------------------+
$boletoBuilder = new BoletoSicredi();
// region DADOS DINÂMICOS DO SEU CLIENTE PARA A GERAÇÃO DO BOLETO (FIXO OU VIA GET)
$dias_de_prazo_para_pagamento = 5;
$taxa_boleto = 0;
// Prazo de X dias OU informe data: "13/04/2006";
$data_venc = $_SESSION['boleto']['data_vencimento'];
// Valor - REGRA: Sem pontos na milhar e tanto faz com "." ou "," ou com 1 ou 2 ou sem casa decimal
$valor_cobrado = str_replace(',', '.', $_SESSION['boleto']['valor']);
$valor_boleto = number_format($valor_cobrado + $taxa_boleto, 2, ',', '');
// Ano da geração do título ex: 07 para 2007
$dadosboleto['inicio_nosso_numero'] = date('y');
/** Nosso número: Numero sequencial de controle (máx. 5 digitos) */
$dadosboleto['nosso_numero'] = substr($_SESSION['boleto']['num_boleto'], -5);
$dadosboleto['numero_documento'] = $dadosboleto['nosso_numero'];
// Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA
$dadosboleto['data_vencimento'] = $data_venc;
// Data de emissão do Boleto
$dadosboleto['data_documento'] = !empty($_SESSION['boleto']['data_impressao_boleto']) ?
$funcoes_ap->InverteFormatoData($_SESSION['boleto']['data_impressao_boleto']) :
date('d/m/Y');
// Data de processamento do boleto (opcional)
$dadosboleto['data_processamento'] = !empty($_SESSION['boleto']['data_impressao_boleto']) ?
$funcoes_ap->InverteFormatoData($_SESSION['boleto']['data_impressao_boleto']) :
date('d/m/Y');
// Valor do Boleto - REGRA: Com vírgula e sempre com duas casas depois da virgula
$dadosboleto['valor_boleto'] = $valor_boleto;
// DADOS DO SEU CLIENTE
$dadosboleto['sacado'] = $_SESSION['boleto']['nome_sacado'];
$dadosboleto['endereco1'] = $_SESSION['boleto']['endereco_sacado'];
$dadosboleto['endereco2'] = 'CEP.:'.$_SESSION['boleto']['cep_bairro_cid_uf_sacado'];
// INFORMACOES PARA O CLIENTE
$dadosboleto['demonstrativo1'] = '';
$dadosboleto['demonstrativo2'] = '';
$dadosboleto['demonstrativo3'] = '';
// INSTRUÇÕES PARA O CAIXA
$dadosboleto['instrucoes1'] = $_SESSION['boleto']['instrucoes_boleto'];
$dadosboleto['instrucoes2'] = '';
$dadosboleto['instrucoes3'] = '';
$dadosboleto['instrucoes4'] = '';
// DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE
$dadosboleto['quantidade'] = '';
$dadosboleto['valor_unitario'] = $valor_boleto;
/**
* N - remeter cobrança sem aceite do sacado (cobranças não-registradas)
* S - remeter cobrança apos aceite do sacado (cobranças registradas)
*/
$dadosboleto['aceite'] = $_SESSION['boleto']['aceite_boleto'];
$dadosboleto['especie'] = $_SESSION['boleto']['especie_boleto'];
/** OS - Outros segundo manual para cedentes de cobrança SICREDI */
$dadosboleto['especie_doc'] = $_SESSION['boleto']['esp_doc_boleto'];
// endregion
// ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //
// DADOS DA SUA CONTA - SICREDI
// Num da agencia (4 digitos), sem Digito Verificador
$dadosboleto['agencia'] = formata_numero($_SESSION['DadosContaCorrente']['agencia'], 4, 0);
/**
* Num da conta (5 digitos), sem Digito Verificador
*/
$dadosboleto['conta'] = formata_numero($_SESSION['DadosContaCorrente']['conta'], 5, 0);
// Digito Verificador do Num da conta
$dadosboleto['conta_dv'] = $_SESSION['DadosContaCorrente']['conta_digito'];
/**
* Dados personalizados (Sicredi)
*/
// Código da Carteira: A (Simples)
$dadosboleto['carteira'] = $_SESSION['DadosContaCorrente']['carteira'];
$dadosboleto['uso_banco'] = 7;
$dadosboleto['posto'] = $boletoBuilder->getData(7)->getPosto();
/**
* Byte de identificação do cedente do boleto utilizado para compor o nosso número.
*
* 1 - Idtf emitente: Cooperativa
* 2 a 9 - Idtf emitente: Cedente
*/
if ('1' == $dadosboleto['uso_banco']) {
$dadosboleto['byte_idt'] = 1;
} else if (in_array($dadosboleto['uso_banco'], ['2', '3', '6', '8'], false)) {
$dadosboleto['byte_idt'] = 2;
} else {
$dadosboleto['byte_idt'] = 3;
}
// SEUS DADOS
$dadosboleto['identificacao'] = '';
$dadosboleto['cpf_cnpj'] = '';
$dadosboleto['endereco'] = '';
$dadosboleto['cidade_uf'] = '';
$dadosboleto['cedente'] = '';
$codigobanco = $_SESSION['boleto']['num_banco'];
$codigo_banco_com_dv = geraCodigoBanco($codigobanco);
$dadosboleto['banco'] = $codigobanco;
$dadosboleto['moeda'] = 9;
$dadosboleto['fator_vencimento'] = fator_vencimento($dadosboleto['data_vencimento']);
//valor tem 10 digitos, sem virgula
$valor = formata_numero($dadosboleto['valor_boleto'], 10, 0, 'valor');
//dv da conta
$conta_dv = formata_numero($dadosboleto['conta_dv'], 1, 0);
//carteira é 2 caracteres
$carteira = $dadosboleto['carteira'];
//fillers - zeros Obs: filler1 contera 1 quando houver valor expresso no campo valor
$filler1 = 1;
$filler2 = 0;
// Codigo referente ao tipo de cobrança: "3" - SICREDI
$tipo_cobranca = 1;
// Codigo referente ao tipo de carteira: "1" - Carteira Simples
$tipo_carteira = 1;
//nosso número (sem dv) é 8 digitos
$nnum = $dadosboleto['inicio_nosso_numero'] . $dadosboleto['byte_idt'] . formata_numero($dadosboleto['nosso_numero'], 5, 0);
$dadosboleto['nosso_numero_sem_dv'] = $nnum;
//calculo do DV do nosso número
$dv_nosso_numero = digitoVerificador_nossonumero($dadosboleto);
$nosso_numero_dv = $dadosboleto['nosso_numero_sem_dv'].$dv_nosso_numero;
$dadosboleto['nosso_numero_com_dv'] = $nosso_numero_dv;
//formação do campo livre
$campolivre = implode('', [
$tipo_cobranca,
$tipo_carteira,
$nosso_numero_dv,
$dadosboleto['agencia'],
$dadosboleto['posto'],
$dadosboleto['conta'],
$filler1,
$filler2
]);
$dadosboleto['campo_livre_sem_dv'] = $boletoBuilder->getCampoLivre($dadosboleto);
$dadosboleto['campo_livre_dv'] = $boletoBuilder->getCampoLivreDV($dadosboleto['campo_livre']);
$dadosboleto['campo_livre_com_dv'] = $dadosboleto['campo_livre_sem_dv'].$dadosboleto['campo_livre_dv'];
// 43 numeros para o calculo do digito verificador do codigo de barras
$dadosboleto['barra'] = implode('', [
$dadosboleto['banco'],
$dadosboleto['moeda'],
$dadosboleto['fator_vencimento'],
$valor,
$dadosboleto['campo_livre_dv']
]);
$dadosboleto['dv_barra'] = $boletoBuilder->getBarraDV($dadosboleto['barra']);
// Numero para o codigo de barras com 44 digitos
$linha = implode('', [
$dadosboleto['banco'],
$dadosboleto['moeda'],
$dadosboleto['dv_barra'],
$dadosboleto['fator_vencimento'],
$valor,
$dadosboleto['campo_livre_dv']
]);
// Formata strings para impressao no boleto
$nossonumero = implode('', [
substr($nosso_numero_dv, 0, 2),
'/',
substr($nosso_numero_dv, 2, 6),
'-',
substr($nosso_numero_dv, 8, 1)
]);
$agencia_codigo = implode('.', [
$dadosboleto['agencia'],
$dadosboleto['posto'],
$dadosboleto['conta'],
]);
$dadosboleto['codigo_barras'] = $linha;
$dadosboleto['linha_digitavel'] = monta_linha_digitavel($linha, $dadosboleto);
$dadosboleto['linha_digitav3l'] = '74891.11836 66149.830037 02029.601008 6 74590000039000';
$dadosboleto['correto'] = $dadosboleto['linha_digitavel'] == $dadosboleto['linha_digitav3l'];
// $dadosboleto['linha_digitavel'] = '74891.11836 66149.830037 02029.601008 6 74590000039000' ; //monta_linha_digitavel($linha);
$dadosboleto['agencia_codigo'] = $agencia_codigo;
$dadosboleto['nosso_numero'] = $nossonumero;
$dadosboleto['codigo_banco_com_dv'] = $codigo_banco_com_dv;
die(json_encode([
$dadosboleto,
$_SESSION['boleto']
]));
<?php
// +----------------------------------------------------------------------+
// | BoletoPhp - Versão Beta |
// +----------------------------------------------------------------------+
// | Este arquivo está disponível sob a Licença GPL disponível pela Web |
// | em http://pt.wikipedia.org/wiki/GNU_General_Public_License |
// | Você deve ter recebido uma cópia da GNU Public License junto com |
// | esse pacote; se não, escreva para: |
// | |
// | Free Software Foundation, Inc. |
// | 59 Temple Place - Suite 330 |
// | Boston, MA 02111-1307, USA. |
// +----------------------------------------------------------------------+
// +----------------------------------------------------------------------+
// | Originado do Projeto BBBoletoFree que tiveram colaborações de Daniel |
// | William Schultz e Leandro Maniezo que por sua vez foi derivado do |
// | PHPBoleto de João Prado Maia e Pablo Martins F. Costa |
// | |
// | Se vc quer colaborar, nos ajude a desenvolver p/ os demais bancos :-)|
// | Acesse o site do Projeto BoletoPhp: www.boletophp.com.br |
// +----------------------------------------------------------------------+
// +----------------------------------------------------------------------+
// | Equipe Coordenação Projeto BoletoPhp: <boletophp@boletophp.com.br> |
// | Desenv Boleto SICREDI: Rafael Azenha Aquini <rafael@tchesoft.com> |
// | Marco Antonio Righi <marcorighi@tchesoft.com> |
// | Homologação e ajuste de algumas rotinas. |
// | Marcelo Belinato <mbelinato@gmail.com> |
// +----------------------------------------------------------------------+
class Boleto {
/**
* @param string $data
*
* @return int
*/
static function dac10($data)
{
$digits = '';
foreach(str_split(strrev($data)) as $index => $digit) {
$factor = $index % 2 === 1 ? 1 : 2;
$digits .= $digit * $factor;
}
return array_sum(str_split($digits)) % 10;
}
static function doc11($data)
{
}
}
class BoletoSicrediData
{
/** @var string */
private $codigo;
/** @var string */
private $extra;
/** @var string */
private $posto;
public function __construct($codigo, $posto, $extra) {
$this->codigo = $codigo;
$this->posto = $posto;
$this->extra = $extra;
}
/**
* @return string
*/
public function getCodigo()
{
return $this->codigo;
}
/**
* @param string $codigo
*/
public function setCodigo($codigo)
{
$this->codigo = $codigo;
}
/**
* @return string
*/
public function getExtra()
{
return $this->extra;
}
/**
* @param string $extra
*/
public function setExtra($extra)
{
$this->extra = $extra;
}
/**
* Posto da cooperativa de credito (dois digitos)
*
* @return string
*/
public function getPosto()
{
return $this->posto;
}
/**
* @param string $posto
*/
public function setPosto($posto)
{
$this->posto = $posto;
}
}
/**
* Boleto do Sicredi
*/
class BoletoSicredi extends Boleto
{
const BANCO = 748;
/**
* @var BoletoSicrediData[]
*/
protected $dados;
public function __construct()
{
$this->dados = [
'1' => new BoletoSicrediData('11', '19', '10'),
'2' => new BoletoSicrediData('11', '19', '10'),
'3' => new BoletoSicrediData('11', '72', '10'),
'4' => new BoletoSicrediData('11', '04', '10'),
'5' => new BoletoSicrediData('31', '02', '10'),
'6' => new BoletoSicrediData('11', '06', '10'),
'7' => new BoletoSicrediData('11', '02', '10'),
'8' => new BoletoSicrediData('11', '50', '10'),
'default' => new BoletoSicrediData('31', '50', '00'),
];
}
public function getData($key)
{
if (array_key_exists($key, $this->dados)) {
return $this->dados[$key];
}
return $this->dados['default'];
}
/**
* @param array $params
*
* @return string
*/
public function getCampoLivre($params)
{
$data = $this->getData($params['uso_banco']);
return implode('', [
$data->getCodigo(),
$params['nosso_numero_com_dv'],
$params['agencia'],
$params['posto'],
$params['conta'],
$data->getExtra()
]);
}
/**
* @param string $numero
*
* @return string
*/
public function getCampoLivreDV($numero)
{
return modulo_11($numero);
}
public function getBarraDV($barra)
{
// Add a zero check digit
$s = $barra . '0';
$sum = 0;
// Find the last character
$i = strlen($s);
$odd_length = $i % 2;
// Iterate all digits backwards
while ($i-- > 0) {
// Add the current digit
$sum+=$s[$i];
// If the digit is even, add it again. Adjust for digits 10+ by subtracting 9.
($odd_length == ($i % 2)) ? ($s[$i] > 4) ? ($sum+=($s[$i] - 9)) : ($sum+=$s[$i]) : false;
}
return (10 - ($sum % 10)) % 10;
die($barra);
// return 6;
$resto2 = modulo_10($barra, 9);
// esta rotina sofrer algumas alterações para ajustar no layout do SICREDI
$digito = 11 - $resto2;
return $digito < 1 || $digito >= 10 ? 1 : $digito;
}
}
/**
* @param array $data
*
* @return float|int
*/
function digitoVerificador_nossonumero($data) {
$digito = modulo_11(implode('', [
$data['agencia'],
$data['posto'],
$data['conta'],
$data['nosso_numero_sem_dv']
]));
return $digito > 9 ? 0 : $digito;
}
function digitoVerificador_campolivre($numero) {
$resto2 = modulo_11($numero, 9, 1);
return $resto2 <= 1 ? 0 : 11 - $resto2;
}
// FUNÇÕES
// Algumas foram retiradas do Projeto PhpBoleto e modificadas para atender as particularidades de cada banco
function formata_numero($numero, $loop, $insert, $tipo = 'geral') {
if ($tipo === 'valor' || $tipo === 'geral') {
$numero = str_pad(str_replace(',', '', $numero), $loop, $insert, STR_PAD_LEFT);
}
if ($tipo === 'convenio') {
while(strlen($numero) < $loop){
$numero .= $insert;
}
}
return $numero;
}
function fbarcode($valor) {
$fino = 1 ;
$largo = 3 ;
$altura = 50 ;
$barcodes[0] = '00110';
$barcodes[1] = '10001';
$barcodes[2] = '01001';
$barcodes[3] = '11000';
$barcodes[4] = '00101';
$barcodes[5] = '10100';
$barcodes[6] = '01100';
$barcodes[7] = '00011';
$barcodes[8] = '10010';
$barcodes[9] = '01010';
for ($f1=9; $f1>=0; $f1--) {
for ($f2=9; $f2>=0; $f2--) {
$texto = '';
for ($i=1;$i<6;$i++) {
$texto .= $barcodes[$f1][$i - 1] . $barcodes[$f2][$i - 1];
}
$barcodes[($f1 * 10) + $f2] = $texto;
}
}
// Desenho da barra
// Guarda inicial
?>
<img src=imagens/p.png width=<?= $fino ?> height=<?= $altura ?> border=0>
<img src=imagens/b.png width=<?= $fino ?> height=<?= $altura ?> border=0>
<img src=imagens/p.png width=<?= $fino ?> height=<?= $altura ?> border=0>
<img src=imagens/b.png width=<?= $fino ?> height=<?= $altura ?> border=0>
<img
<?php
$texto = $valor;
if ((strlen($texto) % 2) <> 0) {
$texto = '0' . $texto;
}
// Draw dos dados
while (strlen($texto) > 0) {
$i = round(esquerda($texto,2));
$texto = direita($texto,strlen($texto)-2);
$f = $barcodes[$i];
for($i=1;$i<11;$i+=2) {
if (substr($f,($i-1),1) == "0") {
$f1 = $fino ;
}else{
$f1 = $largo ;
}
?>
src=imagens/p.png width=<?php echo $f1?> height=<?php echo $altura?> border=0><img
<?php
if (substr($f,$i,1) == "0") {
$f2 = $fino ;
}else{
$f2 = $largo ;
}
?>
src=imagens/b.png width=<?php echo $f2?> height=<?php echo $altura?> border=0><img
<?php
}
}
// Draw guarda final
?>
src=imagens/p.png width=<?php echo $largo?> height=<?php echo $altura?> border=0><img
src=imagens/b.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img
src=imagens/p.png width=<?php echo 1?> height=<?php echo $altura?> border=0>
<?php
} //Fim da função
function esquerda($entra,$comp){
return substr($entra,0,$comp);
}
function direita($entra,$comp){
return substr($entra,strlen($entra)-$comp,$comp);
}
function fator_vencimento($data) {
$data = explode("/",$data);
$ano = $data[2];
$mes = $data[1];
$dia = $data[0];
return(abs((_dateToDays("1997","10","07")) - (_dateToDays($ano, $mes, $dia))));
}
function _dateToDays($year,$month,$day) {
$century = substr($year, 0, 2);
$year = substr($year, 2, 2);
if ($month > 2) {
$month -= 3;
} else {
$month += 9;
if ($year) {
$year--;
} else {
$year = 99;
$century --;
}
}
return ( floor(( 146097 * $century) / 4 ) +
floor(( 1461 * $year) / 4 ) +
floor(( 153 * $month + 2) / 5 ) +
$day + 1721119);
}
/**
* @param string $num
*
* @return int
*/
function modulo_10($num) {
$fator = 2;
// Separacao dos numeros
for ($i = strlen($num); $i > 0; $i--) {
// pega cada numero isoladamente
$numeros[$i] = $num[$i - 1];
// Efetua multiplicacao do numero pelo (falor 10)
$temp = $numeros[$i] * $fator;
$temp0 = 0;
foreach (preg_split('//',$temp,-1,PREG_SPLIT_NO_EMPTY) as $k => $v) {
$temp0 += $v;
}
$parcial10[$i] = $temp0;
// monta sequencia para soma dos digitos no (modulo 10)
$numtotal10 += $parcial10[$i];
// intercala fator de multiplicacao (modulo 10)
$fator = $fator == 2 ? 1 : 2;
}
// várias linhas removidas, vide função original
// Calculo do modulo 10
$resto = $numtotal10 % 10;
$digito = 10 - $resto;
if ($resto == 0) {
$digito = 0;
}
return $digito;
}
/**
* Calculo do Modulo 11 para geracao do digito verificador
* de boletos bancarios conforme documentos obtidos
* da Febraban - www.febraban.org.br
*
* Observações:
* - Script desenvolvido sem nenhum reaproveitamento de código pré existente.
* - Assume-se que a verificação do formato das variáveis de entrada é feita antes da execução deste script.
*
* @author Pablo Costa <pablo@users.sourceforge.net>
*
* @param string $num numérica para a qual se deseja calcular o digito verificador
* @param int $base valor maximo de multiplicacao [2-$base]
* @param int $r quando especificado um devolve somente o resto
*
* @return float|int Retorna o Digito verificador.
*/
function modulo_11($num, $base=9, $r=0) {
$soma = 0;
$fator = 2;
/* Separacao dos numeros */
for ($i = strlen($num); $i > 0; $i--) {
// pega cada numero isoladamente
$numeros[$i] = substr($num,$i-1,1);
// Efetua multiplicacao do numero pelo falor
$parcial[$i] = $numeros[$i] * $fator;
// Soma dos digitos
$soma += $parcial[$i];
if ($fator == $base) {
// restaura fator de multiplicacao para 2
$fator = 1;
}
$fator++;
}
/* Calculo do modulo 11 */
if ($r == 0) {
$soma *= 10;
$digito = $soma % 11;
return $digito;
}
if ($r == 1) {
// esta rotina sofrer algumas alterações para ajustar no layout do SICREDI
$r_div = (int)($soma/11);
$digito = ($soma - ($r_div * 11));
return $digito;
}
}
function monta_linha_digitavel($codigo, $data=[]) {
// COMPOSICAO DO CODIGO
// Posição | Larg | Conteúdo
// --------+------+---------------
// 1 a 3 | 03 | Identificação do banco
// 4 | 01 | Código da Moeda - 9 para R$
// 5 | 01 | Digito verificador geral do Código de Barras
// 6 a 9 | 04 | Fator de Vencimento
// 10 a 19 | 10 | Valor (8 inteiros e 2 decimais)
// 20 a 44 | 25 | Campo Livre definido por cada banco (25 caracteres)
$campos = [];
//COMPOSICAO DA LINHA DIGITAVEL
$campoLivre = [
1 => substr($data['campo_livre_com_dv'], 0, 5),
2 => substr($data['campo_livre_com_dv'], 5, 10),
3 => substr($data['campo_livre_com_dv'], 15, 10)
];
// die($campoLivre[3]);
/**
* 1. Campo - composto pelo código do banco, código da moéda,
* as cinco primeiras posições do campo livre e DV (modulo10) deste campo
*/
$codBanco = $data['banco'];
$codMoeda = $data['moeda'];
$campos[1] = implode('', [
$codBanco,
$codMoeda,
substr($campoLivre[1], 0, 1),
'.',
substr($campoLivre[1], 1),
modulo_10($codBanco . $codMoeda . $campoLivre[1])
]);
// die($campoLivre[2]);
/**
* 2. Campo - composto pelas posições 6 a 15 do campo livre e DV (modulo10) deste campo
*/
$campos[2] = implode('', [
substr($campoLivre[2], 0, 5),
'.',
substr($campoLivre[2], 5),
modulo_10($campoLivre[2])
]);
/**
* 3. Campo composto pelas posicoes 16 a 25 do campo livre
* e livre e DV (modulo10) deste campo
*/
$campos[3] = implode('', [
substr($campoLivre[3], 0, 5),
'.',
substr($campoLivre[3], 5),
modulo_10($campoLivre[3])
]);
/**
* 4. Dígito verificador do codigo de barras
*/
$campos[4] = Boleto::dac10($data['barra']);
/**
* 5. Campo composto pelo fator vencimento e valor nominal do documento,
* sem indicacao de zeros a esquerda e sem edicao (sem ponto e virgula).
*
* Quando se tratar de valor zerado, a representacao deve ser 000 (tres zeros).
*/
$fatorVencimento = substr($codigo, 5, 4);
$valorNominal = substr($codigo, 9, 10);
$campos[5] = $fatorVencimento.$valorNominal;
return implode(' ', $campos);
}
function geraCodigoBanco($numero) {
$parte1 = substr($numero, 0, 3);
return $parte1 . '-0';
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment