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

Boleto Bancário Java - 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: 2379 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 Java 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)
----------------------------------------------------------------------

package arquivodecodigos;

/*
  ATENÇÃO: As função complementares e já vistas em outras
  dicas dessa seção foram omitidas deste código
*/

public class Estudos{
  public static void main(String[] args){
    // ATENÇÃO: Se você ainda não entende os dados abaixo.
    // revise as dicas anteriores antes de continuar
    String banco = "104";
    String moeda = "9";
    String carteira = "1"; //  
    String emissao = "4"; // cedente
    String nossoNumero = "222333777777777";
    double valor = 321.12; // sempre duas casas decimais
    String vencimento = "23/08/2006";
    int fator = fatorVencimento(vencimento);
    String nossoNumeroCompleto = carteira + emissao +
      nossoNumero;
    String cedente = "005507";
    int dvCedente = dvCodigoCedente(cedente);
    String campoLivre = montarCampoLivre(cedente, dvCedente,
      nossoNumeroCompleto);
    String codigoBarras = montarCodigoBarras(banco, moeda, fator,
      valor, campoLivre);
  
    // agora que temos o código de barras completo, vamos
    // montar a linha digitável
    String linhaDigitavel = montarLinhaDigitavel(codigoBarras);
    // e mostramos o resultado
    System.out.println("A linha digitável completa é: " +
      linhaDigitavel);
  }
 
  // função que recebe o código de barras completo
  // e monta a linha digitável do boleto
  public static String montarLinhaDigitavel(String codigoBarras){
    // vamos nos concentrar no primeiro campo
    String campo1 = codigoBarras.substring(0, 3) +
      codigoBarras.substring(3, 4) + codigoBarras.substring(19, 24);
    
    // agora o segundo campo
    String campo2 = codigoBarras.substring(24, 34);   
    
    // agora o terceiro campo
    String campo3 = codigoBarras.substring(34, 44);
     
    // agora o quarto campo
    String campo4 = codigoBarras.substring(4, 5);
    
    // finalmente o quinto campo
    String campo5 = codigoBarras.substring(5, 9) +
      codigoBarras.substring(9, 19);
    
    System.out.println(campo5);
    
    String linhaDigitavel = campo1.substring(0, 5) + "." +
      campo1.substring(5, 9) +  dvLinhaDigitavel(campo1) + " "
      + campo2.substring(0, 5) + "." + campo2.substring(5, 10) +
      dvLinhaDigitavel(campo2) + " " + campo3.substring(0, 5) +
      "."  + campo3.substring(5, 10) + dvLinhaDigitavel(campo3) +
      " " + campo4 + " " + campo5;

    return linhaDigitavel;  
  }
  
  // atenção a esta função. Aqui nós usamos o Módulo 10
  public static int dvLinhaDigitavel(String valor){
    // vamos inverter o valor
    valor = new StringBuffer(valor).reverse().toString();
    // vamos definir os índices de múltiplicação
    String indices = "2121212121";
    // e aqui a soma da multiplicação coluna por coluna
    int soma = 0, res = 0, digito = -1;
	
    // fazemos a multiplicação coluna por coluna agora
    for (int i = 0; i < valor.length(); i++){
      res = Integer.parseInt(String.valueOf(valor.charAt(i))) *
        Integer.parseInt(String.valueOf(indices.charAt(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 somar os dois algarismos
	String temp = String.valueOf(res);
        res = Integer.parseInt(String.valueOf(temp.charAt(0))) +
          Integer.parseInt(String.valueOf(temp.charAt(1)));  
      }
	   
      soma = soma + res;   
    }
	
    // obtemos o resto da divisão da soma por 10
    int 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;
  }
}

Ao executar este código Java 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:

Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico

Exercícios Resolvidos de Java - Valor da diária, valor médio arrecadado com e sem promoção e o lucro ou prejuízo mensal de uma promoção em um hotel

Quantidade de visualizações: 14473 vezes
Pergunta/Tarefa:

Escreva um programa Java para resolver o seguinte problema:

Um hotel com 42 apartamentos resolveu fazer promoções para os fins de semana fora da alta temporada, isto é, nos meses de abril, maio, junho, agosto, setembro, outubro e novembro. A taxa da promoção é de 22% da diária normal. A ocupação média do hotel sem promoção é de 40%. A expectativa é aumentar a taxa de ocupação para 70%. Supondo que as expectativas se confirmem, escrever um algoritmo que lê a diária normal, que calcule e escreva as seguintes informações:

(a) O valor da diária no período da promoção.
(b) O valor médio arrecadado sem a promoção, durante um mês.
(c) O valor médio arrecadado com a promoção, durante um mês.
(d) O lucro ou prejuízo mensal com a promoção.

Seu código Java deverá apresentar uma saída parecida com:

Informe o valor da diária normal: 120
Diária no período de promoção: 26,40
Média arrecadada sem a promoção durante um mês: 8064,00
Média arrecadada com a promoção durante um mês: 3104,64
Prejuízo mensal com a promoção: 4959,36
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java console (lendo a entrada do usuário por meio do uso da classe Scanner):

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

package estudos;

import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    // vamos criar um objeto da classe Scanner
    Scanner entrada = new Scanner(System.in);

    // valor da diária em período normal  
    double valor_diaria_normal;
    // valor da diária no período de promoção
    double valor_diaria_promocao;

    // vamos obter o valor da diária no período normal
    System.out.print("Informe o valor da diária normal: ");
    valor_diaria_normal = Double.parseDouble(entrada.nextLine());

    // vamos obter o valor da diária no período promocional
    valor_diaria_promocao = valor_diaria_normal * (22.0 / 100.0);

    // vamos calcular o valor médio arrecadado sem a promoção, durante um mês
    // estamos assumindo 4 finais de semana por mês
    double media_arrecado_sem_promocao = (valor_diaria_normal
      * (42 * (40.0 / 100.0)) * 4);

    // vamos calcular o valor médio arrecadado com a promoção, durante um mês
    // estamos assumindo 4 finais de semana por mês
    double media_arrecado_com_promocao = (valor_diaria_promocao
      * (42 * (70.0 / 100.0)) * 4);

    System.out.printf("Diária no período de promoção: %.2f\n",
      valor_diaria_promocao);
    System.out.printf("Média arrecadada sem a promoção durante um mês: %.2f\n",
      media_arrecado_sem_promocao);
    System.out.printf("Média arrecadada com a promoção durante um mês: %.2f\n",
      media_arrecado_com_promocao);

    // houve lucro ou prejuízo?
    if (media_arrecado_sem_promocao < media_arrecado_com_promocao) {
      System.out.printf("Lucro mensal com a promoção: %.2f\n",
        media_arrecado_com_promocao - media_arrecado_sem_promocao);
    } 
    else {
      System.out.printf("Prejuízo mensal com a promoção: %.2f\n",
        media_arrecado_sem_promocao - media_arrecado_com_promocao);
    }
  }
}



Java ::: Dicas & Truques ::: Matemática e Estatística

Como resolver uma equação do segundo grau em Java - Como calcular Bhaskara em Java

Quantidade de visualizações: 2885 vezes
Nesta dica mostrarei como encontrar as raízes de uma equação quadrática, ou seja, uma equação do 2º usando a linguagem Java.

Definimos como equação do 2º grau ou equações quadráticas qualquer equação do tipo ax² + bx + c = 0 em que a, b e c são números reais e a &#8800; 0. Ela recebe esse nome porque, no primeiro membro da igualdade, há um polinômio de grau dois com uma única incógnita.

Note que, dos coeficientes a, b e c, somente o a é diferente de zero, pois, caso ele fosse igual a zero, o termo ax² seria igual a zero, logo a equação se tornaria uma equação do primeiro grau: bx + c = 0.

Independentemente da ordem da equação, o coeficiente a sempre acompanha o termo x², o coeficiente b sempre acompanha o termo x, e o coeficiente c é sempre o termo independente.

Como resolver uma equação do 2º grau

Conhecemos como soluções ou raízes da equação ax² + bx + c = 0 os valores de x que fazem com que essa equação seja verdadeira. Uma equação do 2º grau pode ter no máximo dois números reais que sejam raízes dela. Para resolver equações do 2º grau completas, existem dois métodos mais comuns:

a) Fórmula de Bhaskara;
b) Soma e produto.

O primeiro método é bastante mecânico, o que faz com que muitos o prefiram. Já para utilizar o segundo, é necessário o conhecimento de múltiplos e divisores. Além disso, quando as soluções da equação são números quebrados, soma e produto não é uma alternativa boa.

Como resolver uma equação do 2º grau usando Bhaskara

Como nosso código Java vai resolver a equação quadrática usando a Fórmula de Bhaskara, o primeiro passo é encontrar o determinante. Veja:

\[\Delta =b^2-4ac\]

Nem sempre a equação possui solução real. O valor do determinante é que nos indica isso, existindo três possibilidades:

a) Se determinante > 0, então a equação possui duas soluções reais.
b) Se determinante = 0, então a equação possui uma única solução real.
c) Se determinante < 0, então a equação não possui solução real.

Encontrado o determinante, só precisamos substituir os valores, incluindo o determinante, na Fórmula de Bhaskara:

\[x = \dfrac{- b\pm\sqrt{b^2- 4ac}}{2a}\]

Vamos agora ao código Java. Nossa aplicação vai pedir para o usuário informar os valores dos três coeficientes a, b e c e, em seguida, vai apresentar as raizes da equação:

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

package estudos;

import java.util.Scanner;

public class Estudos{
  public static void main(String[] args){
    // para efetuar a leitura do usuário
    Scanner entrada = new Scanner(System.in);
    
    // os coeficientes
    double a, b, c;
    // as duas raizes, a imaginaria e o discriminante
    double raiz1, raiz2, imaginaria, discriminante;

    // vamos pedir para o usuário informar os valores dos coeficientes
    System.out.print("Valor do coeficiente a: ");
    a = Double.parseDouble(entrada.nextLine());
    System.out.print("Valor do coeficiente b: ");
    b = Double.parseDouble(entrada.nextLine());
    System.out.print("Valor do coeficiente c: ");
    c = Double.parseDouble(entrada.nextLine());
    
    // vamos calcular o discriminante
    discriminante = (b * b) - (4 * a * c);
    
    // a equação possui duas soluções reais?
    if(discriminante > 0){
      raiz1 = (-b + Math.sqrt(discriminante)) / (2 * a);
      raiz2 = (-b - Math.sqrt(discriminante)) / (2 * a);
      System.out.println("Existem duas raizes: x1 = " + raiz1 
        + " e x2 = " + raiz2);
    }
    // a equação possui uma única solução real?
    else if(discriminante == 0){
      raiz1 = raiz2 = -b / (2 * a);
      System.out.println("Existem duas raizes iguais: x1 = " 
         + raiz1 + " e x2 = " + raiz2);  	
    }
    // a equação não possui solução real?
    else if(discriminante < 0){
      raiz1 = raiz2 = -b / (2 * a);
      imaginaria = Math.sqrt(-discriminante) / (2 * a);
      System.out.println("Existem duas raízes complexas: x1 = " + 
	raiz1 + " + " + imaginaria + " e x2 = " + raiz2 
           + " - " + imaginaria);
    }
  }
}

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

Valor do coeficiente a: 1
Valor do coeficiente b: 2
Valor do coeficiente c: -3
Existem duas raizes: x1 = 1.0 e x2 = -3.0


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes)

Exercícios Resolvidos de Java - Como corrigir o erro ArrayIndexOutOfBoundsException ao usar um laço for para percorrer os elementos de um array

Quantidade de visualizações: 12303 vezes
Pergunta/Tarefa:

Observe o seguinte trecho de código:

public static void main(String[] args){
  // um vetor de inteiros contendo cinco elementos
  int valores[] = {5, 32, 9, 10, 6};
    
  // vamos usar um laço for para exibir os valores dos elementos
  // do vetorz
  for(int i = 0; i <= 5; i++){
    System.out.println("O valor do " + (i + 1) + "º elemento é " + valores[i]);
  }
}
Quando tentamos executar este código temos um erro do tipo ArrayIndexOutOfBoundsException. Veja a saída produzida:

O valor do 1º elemento é 5
O valor do 2º elemento é 32
O valor do 3º elemento é 9
O valor do 4º elemento é 10
O valor do 5º elemento é 6
Exception in thread "main" 
   java.lang.ArrayIndexOutOfBoundsException: 5
   at javaapplication1.Main.main(Main.java:14)
Java Result: 1
Você é capaz de descobrir a causa do lançamento desta exceção? O erro no código é de sintáxe ou de lógica?

Resposta/Solução:

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

O erro no código é de lógica. Como temos cinco elementos no vetor
e o índice do último elemento é 4 (o índice do primeiro elemento é 0),
o valor da variável de controle do laço for não pode ultrapassar 4. No
código acima o valor da variável i vai até 5, o que provoca um erro 
ao tentar acessar um elemento do vetor que não existe.

Para corrigir o erro, basta alterar a linha:

for(int i = 0; i <= 5; i++){

para:

for(int i = 0; i < 5; i++){



Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

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: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



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