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); }
/** * Gera a linha digitável já formatada. O layout só é necessário * para gerar o código de barras. Para gerar a linha digitável, * todos os bancos usam os mesmos posicionamentos em relação ao * código previamente gerado: * Campo1 - Posições de 1-4 e 20-24, Campo2 - Posições 25-34, * Campo3 - Posições 35-44, Campo4 - Posição 5 e * Campo5 - Posições 6-19. * * @version 0.1 18/05/2011 Initial * 1.0 27/05/2011 Mudança total em linha digitavel. */ public function linhaDigitavel() { $codigo = $this->geraCodigo(); // 1 10 20 30 40 44 // | | | | | | // 10497498600001000001870000900000000001234567 //cod-bar // 10491870000900000000001234567749860000100000 //lin-digi virgem // 10491.8700X 00900.00000X 00012.34567X 7 49860000100000 //lin-digi formatada // 10491.87006 00900.000001 00012.345674 7 49860000100000 // 10491.87006 00900.000001 00012.345674 7 49860000100000 // 104918700 0090000000 00012345677 //Campo1 - Posições de 1-4 e 20-24 $linhaDigitavel = substr($codigo, 0, 4) . substr($codigo, 19, 5) . substr($codigo, 24, 10) . substr($codigo, 34, 10) . substr($codigo, 4, 1) . substr($codigo, 5, 14); $dv1 = Math::Mod10(substr($linhaDigitavel, 0, 9)); $dv2 = Math::Mod10(substr($linhaDigitavel, 9, 10)); $dv3 = Math::Mod10(substr($linhaDigitavel, 19, 10)); #Inserindo os DVs em seus lugares $linhaDigitavel = String::putAt($linhaDigitavel, $dv3, 29); $linhaDigitavel = String::putAt($linhaDigitavel, $dv2, 19); $linhaDigitavel = String::putAt($linhaDigitavel, $dv1, 9); #Aplicando A linha digitável gerada à sua máscara $linhaDigitavel = String::applyMask($linhaDigitavel, $this->Banco->mascaraLinhaDigitavel); return $linhaDigitavel; }
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 * * * * @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']); }
/** * agenciaCondigoCedente() * Retorna a agência e a conta/código do cedente formatada de acordo * com o padrão visual do banco. * Caso esse método não seja declarado na classe individual dos bancos, * ele irá herdar esta definição */ public function agenciaCodigoCedente() { $object = $this->parent; return Math::Mod10($object->Data['Agencia'], true) . ' / ' . Math::Mod10($object->Data['Conta'], true); }
/** * Cálculo do Dígito Verificador 1 * * Módulo 10 das 23 posições anteriores da chave ASBACE * * @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 dv1($data) { //pr($data); $string = String::insert('000:Agencia:Conta:Categoria:NossoNumero:Banco', $data); //pr('00017201326131758964070'); //pr($string); //pr(Math::Mod11($string, 0, 0, false, 7)); //pr(Math::Mod10($string)); return Math::Mod10($string); }