Você está aqui: PHP ::: Boletos Bancários, Arquivos de Remessa e Retornos do Banco ::: Caixa Econômica Federal - Banco 104

Boleto Bancário PHP - Como montar a linha digitável (representação numérica do código de barras) e seu dígito verificador (Módulo 10) - Boleto Caixa Econômica

Quantidade de visualizações: 3250 vezes
Esta dica fecha nossa série de estudos sobre os boletos bancários da Caixa Econômica (Banco 104). Na dica anterior vimos como montar o código de barras e o seu dígito verificador. E, uma vez montado o código de barras completo, já temos todas as informações para montar sua representação numérica, ou seja, a linha digitável do boleto. Dessa forma, é importante que você entenda bem as funções demonstradas nas dicas anteriores.

Na Especificação do Código de Barras para Bloquetos de Cobrança Sem Registro e Registrada no SIGCB (67.119 v005 micro), a linha digitável, ou representação numérica, para a cobrança contém cinco campos, conforme discriminação a seguir:

1º Campo - Composto por: código do banco (posições 1 a 3 do código de barras), código da moeda (posição 4 do código de barras), as cinco primeiras posições do campo livre (posições 20 a 24 do código de barras) e digito verificador deste campo;

2º Campo - Composto pelas posições 6 a 15 do campo livre (posições 25 a 34 do código de barras) e digito verificador deste campo;

3º Campo - Composto pelas posições 16 a 25 do campo livre (posições 35 a 44 do código de barras) e digito verificador deste campo;

4º Campo - Dígito verificador geral do código de barras (posição 5 do código de barras);

5º Campo - Composto pelo "fator de vencimento" (posições 6 a 9 do código de barras) e pelo valor nominal do documento (posições 10 a 19 do código de barras), com a inclusão de zeros entre eles até compor as 14 posições do campo e sem edição (sem ponto e sem vírgula). Não obstante existam 10 posições, o valor nominal do documento não poderá exceder R$ 9.999.999,99.

O cálculo que mostrarei a seguir está de acordo com as instruções do Manual de Leiaute de Arquivo Eletrônico Padrão CNAB 240 - Cobrança Bancária Caixa - SIGCB - Versão 67.118 v024 micro e Especificação do Código de Barras para Bloquetos de Cobrança Sem Registro e Registrada no SIGCB (67.119 v005 micro). Tenha certeza de verificar sua versão do manual antes de usar o código apresentado.

Dito isso, veja o código PHP completo para uma função que recebe o código de barras completo e retorna a linha digitável, devidamente espaçada e com os pontos, conforme recomendações do manual:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<?php
  // função que recebe o código de barras completo
  // e monta a linha digitável do boleto
  function montarLinhaDigitavel($codigoBarras){
    // vamos nos concentrar no primeiro campo
    $campo1 = substr($codigoBarras, 0, 3) .
      substr($codigoBarras, 3, 1) . substr($codigoBarras, 19, 5);
	  
    // agora o segundo campo
    $campo2 = substr($codigoBarras, 24, 10);   
	
    // agora o terceiro campo
    $campo3 = substr($codigoBarras, 34, 10);
	
    // agora o quarto campo
    $campo4 = substr($codigoBarras, 4, 1);
	
    // finalmente o quinto campo
    $campo5 = substr($codigoBarras, 5, 4) .
      substr($codigoBarras, 9, 10);
	
    $linhaDigitavel = substr($campo1, 0, 5) . "." . substr($campo1, 5, 5) . 
     dvLinhaDigitavel($campo1) . " " . substr($campo2, 0, 5) . "." 
     . substr($campo2, 5, 5) . dvLinhaDigitavel($campo2) . 
     " " . substr($campo3, 0, 5) . "."  . substr($campo3, 5, 5) . 
     dvLinhaDigitavel($campo3) . " " . $campo4 . " " . $campo5;
	
    return $linhaDigitavel;  
  }
  
  // atenção a esta função. Aqui nós usamos o Módulo 10
  function dvLinhaDigitavel($valor){
    // vamos inverter o valor
    $valor = strrev($valor);
    // vamos definir os índices de múltiplicação
    $indices = "2121212121";
    // e aqui a soma da multiplicação coluna por coluna
    $soma = 0;
	
    // fazemos a multiplicação coluna por coluna agora
    for($i = 0; $i < strlen($valor); $i++){
      $res = ((int)($valor[$i])) * 
       ((int)($indices[$i]));
	   
      // Quando o resultado da multiplicação for um número 
      // com 2 dígitos, somar os 2 algarismos.
      // Ex: (10: 1+0 = 1). 
      if($res > 9){
	// vamos converter o valor númerico em string
	$res = strval($res);
	$res = ((int)($res[0]) + (int)($res[1]));   
      }
	   
      $soma = $soma + $res;   
    }
	
    // obtemos o resto da divisão da soma por 10
    $resto = $soma % 10;
    
    //  Se o resto da divisão for 0 (zero), o DV 
    // será 0 (zero).
    if($resto == 0){
      $digito = 0;	
    }
    // Se o Total da Soma for inferior a 10, o DV corresponde
    // à diferença entre 10 e o Total da Soma
    else if($soma < 10){
      $digito = 10 - $soma;	
    }
    else{ 
      // subtraímos onze pelo resto da divisão
      $digito = 10 - $resto;  	
    }
	
    return $digito;  
  }
    
  // ATENÇÃO: Se você ainda não entende os dados abaixo.
  // revise as dicas anteriores antes de continuar
  
  $banco = "104";
  $moeda = "9";
  $carteira = "1"; //  
  $emissao = "4"; // cedente
  $nossoNumero = "222333777777777";
  $valor = "321.12"; // sempre duas casas decimais
  $vencimento = "23/08/2006";
  $fator = fatorVencimento($vencimento);
  $nossoNumeroCompleto = $carteira . $emissao . $nossoNumero;
  $cedente = "005507";
  $dvCedente = dvCodigoCedente($cedente);
  $campoLivre = montarCampoLivre($cedente, $dvCedente,
    $nossoNumeroCompleto);
  $codigoBarras = montarCodigoBarras($banco, $moeda, $fator,
    $valor, $campoLivre);
  
  // agora que temos o código de barras completo, vamos
  // montar a linha digitável
  $linhaDigitavel = montarLinhaDigitavel($codigoBarras);
  // e mostramos o resultado
  echo "A linha digitável completa é: " . $linhaDigitavel;
?>

Ao executar este código PHP nós teremos o seguinte resultado:

A linha digitável completa é: 10490.05505 77222.133348 77777.777713 4 32420000032112

Para não deixar o código desta dica muito longo, eu omiti algumas funções, que podem ser facilmente encontradas nas dicas anteriores.

Link para compartilhar na Internet ou com seus amigos:

PHP ::: Dicas & Truques ::: Arquivos e Diretórios

Como ler o conteúdo de um arquivo um caractere de cada vez em PHP usando a função fgetc()

Quantidade de visualizações: 7650 vezes
A função fgetc() da linguagem PHP é usada quando queremos ler um caractere de cada vez a partir de um arquivo. Note que esta função é um pouco lenta, e deve ser usada somente com arquivos pequenos. A leitura é interrompida quando a função fgetc() retorna um valor false.

Veja um código PHP completo demonstrando o seu uso:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<?php
  $arquivo = fopen("testes.txt", "r");
  if(!$arquivo){
    echo "Não foi possível abrir o arquivo";
  }
else{
  while(false !== ($char = fgetc($arquivo))){
    echo $char;
  }
}
?>



PHP ::: Fundamentos da Linguagem ::: Variáveis e Constantes

Apostila PHP para iniciantes - Como usar constantes na linguagem PHP

Quantidade de visualizações: 11958 vezes
Como acontece na maioria das linguagens de programação, o PHP também permite o uso de constantes. Como o próprio nome diz, constantes são inicializadas uma vez e não podem ter seus valores alterados durante a execução do programa.

A definição de constantes em PHP segue as mesmas regras de nomeação de variáveis, com a exceção de que constantes não possuem o símbolo $ e são geralmente escritas em letras maiúsculas.

Diferente de variáveis, constantes, uma vez definidas, são acessadas globalmente. Não há a necessidade de redeclará-las em cada nova função ou arquivo.

A síntaxe de definição de uma constante é:

define("CONSTANT_NAME", value [, case_sensitivity])

onde:

a) CONSTANT_NAME é o nome da constante;

b) value é o valor atribuído à constante. Não é possível atribuir arrays nem objetos à constantes;

c) case_sensitivity permite definir se o nome da constante será tratado igualmente se referenciado usando letras maiúsculas ou minúsculas. O valor padrão é true, o que quer dizer que "VALOR" e "Valor" serão tratados como uma única constante.

REVISÃO: Revisando este código no PHP 8 eu percebi que o terceiro argumento (case_sensitivity) não é mais suportado, e gera um aviso do tipo:

Warning: define(): Argument #3 ($case_insensitive) is ignored since declaration of case-insensitive constants is no longer supported in...

Veja um exemplo de declaração e uso de constantes em PHP:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<?
  // declara uma constante com o nome MODO e valor 2
  define("MODO", 2);
  echo "O valor definido é: " . MODO; 
?>

Veja agora o que acontece quando tentamos modificar o valor de uma variável do tipo constante:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<?
  // declara uma constante com o nome MODO e valor 2
  define("MODO", 2);
  
  // vamos tentar alterar o valor da constante
  MODO = 10;
?>

Este código gera a seguinte mensagem de erro:

Parse error: syntax error, unexpected token "=" in...


PHP ::: Dicas & Truques ::: Variáveis e Constantes

Como testar se uma variável é do tipo float (número de ponto-flutuante) usando as funções is_float() e is_real() do PHP

Quantidade de visualizações: 12577 vezes
Em algumas situações podemos querer saber se o tipo de uma variável é float, ou seja, contém um valor com casas decimais.

Este teste pode ser feito com o auxílio da função is_float() ou is_real(). Esta função retorna um valor true ou false dependendendo do tipo de variável sendo testada.

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<?php
  $valor = 0.6;

  if(is_float($valor)){
    echo 'A variável $valor é do tipo float';
  }
?>

Ao executar este código PHP nós teremos o seguinte resultado:

A variável $valor é do tipo float


Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica

Máquinas de fluxo radial

Máquinas de fluxo radial, com fluxo predominantemente radial na região de trabalho da linha de lâmina móvel, podem ser exemplificadas por um ventilador ou bomba de fluxo radial (ou centrífuga), cujo escoamento se dá com o fluxo de saída ortogonal ao de entrada ao rotor.

Sobre as classificações de fluxo em máquinas hidráulicas, qual afirmativa está correta?

A) O fluxo axial ocorre em máquinas hidráulicas quando o fluido entra pelas pás do rotor em um sentido e sai no mesmo sentido, porém na direção contrária à de entrada.

B) O fluxo misto ocorre em máquinas hidráulicas quando o fluido entra pelas pás do rotor em um sentido e sai no mesmo sentido, porém na direção contrária à de entrada.

C) O fluxo misto em máquinas hidráulicas ocorre quando o fluido entra e sai no mesmo sentido, porém com ângulo próximo a 90° em relação à entrada.

D) Há um grupo que não se enquadra na categoria de fluxo radial. Esse grupo específico tem um escoamento do fluxo que entra em um sentido e sai perpendicularmente.

E) Há um grupo que não se enquadra na categoria de fluxo radial, tampouco na categoria axial. Esta categoria remanescente é conhecida como máquinas de fluxos misto.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Ética e Legislação Profissional

O exercício do direito à propriedade

O direito de passagem é um direito de vizinhança reconhecido por lei no caso de terreno encravado e de passagem de cabos, tubulações e dutos na propriedade do vizinho. Assinale a alternativa correta sobre o direito de passagem enquanto direito de vizinhança e a ação de passagem forçada:

A) É possível condenar judicialmente o vizinho a conceder passagem forçada mesmo que haja acesso à via pública, mas que o acesso se dê de forma mais cômoda e facilitada se passar pela propriedade dele.

B) A ação de passagem forçada é possível no caso de terreno encravado sem acesso à via pública e para passagem de cabos, tubulações e dutos para serviços essenciais.

C) Se o proprietário vendeu parte do terreno que lhe pertencia, e ficou sem acesso à via pública, pode, depois, pleitear direito de passagem forçada pelo terreno do vizinho.

D) O vizinho que ganha do outro o direito à passagem forçada não será obrigado a indenizá-lo, pois esse direito decorre de lei.

E) Se ocorrer concessão de direito de passagem de cabos e tubulações na propriedade do vizinho e esses apresentarem risco, fica por conta dele as obras de segurança, pois ele é o proprietário e a quem foi atribuído o dever de passagem.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em

Dimensionamento de pilares de extremidade

É importante detalhar as armaduras longitudinais e transversais de um pilar de extremidade durante a concretagem dessas estruturas, evitando futuras patologias. Para isso, é importante que o projetista atenda aos requisitos normativos desse detalhamento.

Sobre o detalhamento de armaduras de pilares de extremidade, assinale a alternativa correta.

A) O máximo espaçamento permitido entre as barras longitudinais corresponde a 500mm.

B) O espaçamento mínimo permitido entre as barras transversais corresponde a 5mm.

C) O diâmetro da armadura transversal deve ser maior ou igual a 5mm ou 1/4 do diâmetro da barra longitudinal.

D) O diâmetro máximo da barra longitudinal corresponde a 12,5mm e a 1/8 da barra transversal.

E) Para armaduras de aço CA-50, o espaçamento vertical corresponde a 25 vezes o diâmetro da barra transversal.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Hidrologia

(Udesc 2011) Segundo a Agência Nacional de Energia Elétrica (ANEEL), existem no Brasil oito bacias hidrográficas. Assinale a alternativa correta em relação a essas bacias.

A) As bacias do Paraná e do Uruguai formam a Bacia Platina. Essa última drena somente 5% do território nacional e seu potencial hidrelétrico instalado é pequeno e inexpressivo.

B) A Bacia do Rio São Francisco é a segunda maior bacia brasileira e seu rio principal é totalmente navegável.

C) A maior bacia é a do Rio Amazonas, que recebe afluentes dos dois lados e possui o maior volume de água do planeta.

D) A Bacia do Rio Tocantins recebe seus dois principais afluentes: o Araguaia e o Tietê. Possui a segunda maior usina do país, mas seu potencial hidrelétrico é o menor de todas as bacias hidrográficas brasileiras.

E) A Bacia do Atlântico Norte/Nordeste é a terceira maior bacia hidrográfica do Brasil. Seus rios principais são o Madeira e o Juruá.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil

Formas: Confecção e colocação

Em relação aos materiais utilizados para formas, assinale a alternativa correta.

A) A fibra de vidro é muito utilizada para pilares e vigas.

B) Formas em poliestireno expandido são altamente reaproveitadas.

C) Vidro é muito utilizado para concreto aparente.

D) Tubos de papelão são muito usados em pilares de seção circular e em estruturas com caixão perdido.

E) As tábuas são os materiais que proporcionam o maior reaproveitamento.
Verificar Resposta Estudar Cards Todas as Questões

Desafios, Exercícios e Algoritmos Resolvidos de PHP

Veja mais Dicas e truques de PHP

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 14 usuários muito felizes estudando em nosso site.