public function particularidade($object) { //pr($object->Data); $digAgConta = $object->Data['Agencia'] . $object->Data['Conta']; $digAgContaCartNNum = $object->Data['Agencia'] . $object->Data['Conta'] . $object->Data['Carteira'] . $object->Data['NossoNumero']; $object->Data['DigitoAgContaCarteiraNNum'] = Math::Mod10($digAgContaCartNNum); $object->Data['DigitoAgConta'] = Math::Mod10($digAgConta); $object->Boleto->NossoNumero = Math::Mod11($object->Boleto->NossoNumero, 0, 0, true); }
/** * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis * para a geração correta do código de barras * Especificamente para o Hsbc, temos duas particularidas: Data no formato juliano, e * um dígito verificador triplo para o nosso número. * * * @version 0.1 28/05/2011 Initial */ public function particularidade($object) { switch ($object->Vendedor->Carteira) { case '18-6': $object->Boleto->NossoNumero = $object->Data['CodigoCedente'] . Math::Mod11($object->Data['NossoNumero'], 0, 0, true); break; case '18-6-17': $this->layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor:CodigoCedente:NossoNumero21'; break; case '18-7': $this->layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor000000:CodigoCedente:NossoNumero:Carteira'; $object->Boleto->NossoNumero = $object->Data['CodigoCedente'] . $object->Data['NossoNumero']; break; case '18-8': $this->layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor000000:CodigoCedente:NossoNumero:Carteira'; $object->Boleto->NossoNumero = $object->Data['CodigoCedente'] . Math::Mod11($object->Data['NossoNumero'], 0, 0, true); break; } $object->Vendedor->Carteira = '18'; }
public static function DuploDigito($num) { #DV1 $dv1 = Math::Mod10($num); #DV2 - $num concatenado com $dv1, calculado com Mod11 com #multiplicador máximo 7 $dv2 = Math::Mod11($num . $dv1, 10, 0, false, 7); #Se $dv2 = 10, adiciona 1 a $dv1 e recalcula $dv2 #concatenando agora o novo $dv1 if ($dv2 == 10) { $dv1++; $dv2 = Math::Mod11($num . $dv1, 10, 0, false, 7); #Se o novo valor de $dv1 for maior que 9, então #$dv1 passará a ser 0 if ($dv1 > 9) { $dv1 = 0; } } return $dv1 . $dv2; }
/** * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis * para a geração correta do código de barras * Especificamente para o Hsbc, temos duas particularidas: Data no formato juliano, e * um dígito verificador triplo para o nosso número. * * * @version 0.1 28/05/2011 Initial */ public function particularidade($object) { $object->Boleto->NossoNumero = Math::Mod11($object->Boleto->NossoNumero, 0, 0, true); }
</div> </div> <!--Linha1--> <div class="linha"> <!-- Cedente --> <div class="cedente item"> <label>Cedente</label> <?php echo $OB->Vendedor->RazaoSocial; ?> </div> <!-- Agência/Código do Cedente --> <div class="agencia item"> <label>Ag./Código do Cedente</label> <?php echo Math::Mod11($OB->Vendedor->Agencia, 0, 0, true) . ' / ' . Math::Mod11($OB->Vendedor->Conta, 0, 0, true); ?> </div> <!-- Espécie Moeda --> <div class="moeda item"> <label>Moeda</label> R$ </div> <!-- Quantidade --> <div class="qtd item"> <label>Qtd.</label> <?php echo $OB->Boleto->Quantidade; ?> </div> <!-- Nosso Número -->
/** * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis * para a geração correta do código de barras * * * * @version 0.1 28/05/2011 Initial */ public function particularidade($object) { $object->Boleto->NossoNumero = Math::Mod11($object->Boleto->NossoNumero, 0, 0, true); $object->Data['DigitoConta'] = Math::Mod10($object->Data['Conta']); $object->Data['DigitoNossoNumero'] = Math::Mod10($object->Data['NossoNumero']); }
/** * Formata o campo Agência/Codigo do Cliente no boleto, de acordo com as especificações de cada banco * Esse método é opcional na classe, e quando não é declarado, o boleto bancário exibe * a agência com dígito e a conta com dígito, no formato: 123-4/ 23346-3 * * @version 0.1 18/01/2013 Initial * * @param array $data Array com todos os dados constantes na classe * @return string String formatada no padrão do Nosso Número do banco */ public function agenciaCodigoCedente() { $data = $this->parent->Data; $string = OB::zeros(Math::Mod11($data['Agencia'], 0, 0, true), 5) . ' / ' . OB::zeros(Math::Mod11($data['Conta'], 0, 0, true), 7); return $string; }
function dvNossoNumero($data) { $dv = Math::Mod11($data['Carteira'] . $data['NossoNumero'], 0, 0, false, 7); return $data['NossoNumero'] . '-' . $dv; }
<div class="moeda item"> <label>Moeda</label> R$ </div> <!-- Quantidade --> <div class="qtd item"> <label>Qtd.</label> <?php echo $OB->Boleto->Quantidade; ?> </div> <!-- Nosso Número --> <div class="nosso_numero item"> <label>Nosso Número</label> <?php echo Math::Mod11($OB->Boleto->NossoNumero, 0, 0, true); ?> </div> </div> <!--Linha 2--> <div class="linha"> <!-- Número do Documento --> <div class="num_doc item"> <label>Número do Documento</label> <?php echo $OB->Boleto->NumDocumento; ?> </div> <!-- CPF/CNPJ --> <div class="cpf_cnpj item">
/** * HSBC usa um dígito verificador triplo no NossoNumero. * * @version 0.1 28/05/2011 Inicial */ public function geraCodigoDocumento($dados) { #dv1 é o Mod11 do NossoNumero $dv1 = Math::Mod11($dados['NossoNumero']); #Concatena o NossoNumero a dv1 $codigo = (int) $dados['NossoNumero'] . $dv1; #Calcula a data de vencimento no formato dmy, em barras e com o ano com 2 digitos $data = OB::fatorVencimentoParaData($dados['FatorVencimento'], 'dmy'); #Se o identificador for "4", dv3 é o Mod11 da soma do NossoNumero #concatenado a dv1 e dv2, a data sem barras e o código do cedente. #Se o identificador for "5", dv3 é o modulo 11 da soma donosso #numero concatenado e do codigo do cedente if ($dados['Carteira'] == 'CNR') { $codigo .= 4; $dv3 = Math::Mod11($codigo + $data + $dados['CodigoCedente']); } else { $codigo .= 5; $dv3 = Math::Mod11($codigo + $dados['CodigoCedente']); } #Retorno com 13 caracteres return OB::zeros($codigo . $dv3, $this->tamanhos['NossoNumero']); }
<div id="ficha_compensacao"> <!-- cabecalho --> <div class="cabecalho"> <div class="banco_logo "><img src="<?php echo OB::url('/public/images/' . $OB->Banco->Image); ?> " /></div> <div class="banco_codigo "><?php echo Math::Mod11($OB->Banco->Codigo, 0, 0, true); ?> </div> <div class="linha_digitavel last"><?php echo $OB->linhaDigitavel(); ?> </div> </div> <div id="colunaprincipal" class=""> <!-- linha1 --> <!--local de pagamento--> <div class="local_pagamento item"> <label>Local de Pagamento</label> <?php echo $OB->Configuracao->LocalPagamento; ?> </div> <!-- linha2 --> <!--Cedente--> <div class="cedente item">
/** * Cálculo do Dígito Verificador 2 * * Módulo 10 das 24 posições anteriores da chave ASBACE, incluindo o DV1 * * @version 0.1 18/10/2013 * * @param array $data Array com todos os dados constantes na classe * @return int Inteiro contendo o dígito procurado */ public function dv2($data) { $string = String::insert('000:Agencia:Conta:Carteira:NossoNumero:Banco:DV1', $data); //pr($string); return Math::Mod11($string, 0, 0, false, 7); }
<!--Coluna direita--> <div id="colunadireita" class=""> <div class=""> <label>Vencimento</label> <?php if ($OB->Boleto->VencimentoContraApresentacao == false) { echo $OB->Boleto->Vencimento; } else { echo 'Contra-Apresentacao'; } ?> </div> <div class=""> <label>Agência / Código cedente </label> <?php echo $OB->Vendedor->Agencia . '-' . Math::Mod11($OB->Vendedor->Agencia) . ' / ' . $OB->Vendedor->Conta . '-' . Math::Mod11($OB->Vendedor->Conta); ?> </div> <div class=""> <label>Nosso número</label> <?php echo $OB->Boleto->NossoNumero; ?> </div> <div class=""> <label>(=) Valor do documento</label> <?php echo !empty($OB->Boleto->Valor) ? number_format($OB->Boleto->Valor / 100, 2, ',', '.') : ''; ?> </div> <div class="">
echo $OB->Boleto->Vencimento; } else { echo 'Contra-Apresentacao'; } ?> </div> <div class=""> <label>Agência / Código cedente </label> <?php echo $OB->Vendedor->Agencia . '-' . Math::Mod11($OB->Vendedor->Agencia) . ' / ' . $OB->Vendedor->Conta . '-' . Math::Mod11($OB->Vendedor->Conta); ?> </div> <div class=""> <label>Nosso número</label> <?php echo $OB->Boleto->NossoNumero . '-' . Math::Mod11($OB->Boleto->NossoNumero); ?> </div> <div class=""> <label>(=) Valor do documento</label> <?php echo !empty($OB->Boleto->Valor) ? number_format($OB->Boleto->Valor / 100, 2, ',', '.') : ''; ?> </div> <div class=""> <label>(-) Desconto/Abatimento</label> <?php echo $OB->Boleto->Desconto ? number_format($OB->Boleto->Desconto, 2, ',', '.') : ''; ?> </div> <div class="">
/** * Normaliza os dados da propriedade, unificando a esse trabalho * * @version 0.1 18/05/2011 Initial * 0.2 20/05/2011 Agora verifica se a propriedade já está * preenchida, salva os dados em uma propriedade de * classe * 0.3 25/05/2011 Acrescentados DigitoNossoNumero e DigitoConta * para atender a necessidade de alguns bancos * 0.4 27/05/2011 normalize() verifica se a chave existe no * array antes de tentar normalizar seu valor. * 0.5 27/05/2011 Acrescentado DigitoAgencia */ public function normalizeData() { if (empty($this->Data)) { $this->Data = array('Banco' => $this->Banco->Codigo, 'Moeda' => $this->Vendedor->Moeda, 'Valor' => $this->Boleto->Valor, 'Agencia' => $this->Vendedor->Agencia, 'Carteira' => $this->Vendedor->Carteira, 'Conta' => $this->Vendedor->Conta, 'NossoNumero' => $this->Boleto->NossoNumero, 'FatorVencimento' => $this->Boleto->FatorVencimento, 'CodigoCedente' => $this->Vendedor->CodigoCedente); $this->Banco->getTamanhos(); foreach ($this->Data as $var => $value) { if (array_key_exists($var, $this->Banco->tamanhos)) { $this->Data[$var] = self::normalize($this->Data[$var], $this->Banco->tamanhos[$var]); } } $this->Data['Vencimento'] = $this->Boleto->Vencimento; $this->Data['DigitoAgencia'] = Math::Mod11($this->Data['Agencia']); $this->Data['DigitoConta'] = Math::Mod11($this->Data['Conta']); $this->Data['DigitoNossoNumero'] = Math::Mod11($this->Data['NossoNumero']); return $this->Data; } else { return $this->Data; } }
/** * Gera o código numérico que será a base para o código de barras * * @version 0.1 18/05/2011 Initial * 0.2 20/05/2011 - Modificações gerais; * - Uso das variáveis de layout externas; * - Separação dos tratamentos de dados em outro * método; * - Criação da propriedade Boleto->CodigoBarras * - Verificação se a propriedade já existe * para evitar mais processamento * 0.3 28/05/2011 - Chama Banco::particularidade() para * os bancos que as tiverem */ public function geraCodigo() { #Se nenhum código foi gerado. if (empty($this->Boleto->CodigoBarras)) { #Padroniza os dados necessários de acordo com Layout do banco $this->normalizeData(); #Verifica alguma particularidade do banco na geração do código $this->Banco->particularidade($this); #Verifica os campos obrigatórios $this->Banco->verificaObrigatorios($this->Data); #Insere os valores de $this->data no layout do codigo de barras $cod = String::insert($this->Banco->layoutCodigoBarras, $this->Data); #Cálculo do dígito verificador geral do código de barras $dv = Math::Mod11($cod, '1', '1'); #Inserindo o dígito verificador exatamente na posição 4, iniciando em 0. $this->Boleto->CodigoBarras = String::putAt($cod, $dv, 4); } return $this->Boleto->CodigoBarras; }
/** * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis * para a geração correta do código de barras * Particularmente para o Banrisul, ele acrescenta ao array OB::$Data, que * guarda as variáveis que geram o código de barras, uma nova variável * $DuploDigito, específica desse banco * * @version 0.1 28/05/2011 Initial */ public function particularidade($object) { $object->Data['NumParcela'] = OB::zeros($object->Boleto->NumParcela, 3); $object->Data['AnoEmissao'] = date('y'); $object->Boleto->NossoNumero = Math::Mod11($object->Boleto->NossoNumero, 0, 0, true); }