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ômicaQuantidade de visualizações: 2378 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. |
![]() |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Laços |
Exercícios Resolvidos de Java - Como testar se um número é perfeito usando JavaQuantidade de visualizações: 720 vezes |
Pergunta/Tarefa: Escreva um programa Java que pede para o usuário informar um número inteiro e informa se este número é um número perfeito. Um número perfeito é aquele cuja soma dos seus divisores, exceto ele próprio, é igual ao número. Por exemplo, o número 6 é perfeito, pois 1 + 2 + 3 = 6. Sua saída deverá ser parecida com: Informe um número inteiro: 6 O número informado é um número perfeito. Veja a resolução completa para o exercício em Java, comentada linha a linha: ---------------------------------------------------------------------- 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){ int numero; // número informado pelo usuário int soma = 0; // vai guardar a soma dos dígitos // para efetuar a leitura da entrada do usuário Scanner entrada = new Scanner(System.in); // vamos pedir para o usuário informar o valor inteiro System.out.print("Informe um número inteiro: "); // lê o número informado numero = Integer.parseInt(entrada.nextLine()); // um laço que começa em 1 e até o número informado - 1 for(int i = 1; i < numero; i++){ // o número é divisível pelo valor de i? if(numero % i == 0){ soma = soma + i; // aumenta a soma } } // a soma é igual ao número informado? if(soma == numero){ System.out.println("O número informado é um número perfeito."); } else{ System.out.println("O número informado não é um número perfeito."); } } } |
Java ::: Dicas & Truques ::: Strings e Caracteres |
Como retornar a quantidade de palavras em uma string Java usando um objeto da classe StringTokenizerQuantidade de visualizações: 186 vezes |
Nesta dica mostrarei como podemos usar um objeto da classe StringTokenizer, do pacote java.util para contar as palavras em um texto ou frase, ou seja, em uma string. O método que usaremos da classe StringTokenizer é countTokens() que retorna a quantidade de pedaçõs na string, separados por espaço. Veja o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // Este exemplo mostra como contar as palavras // de uma string import java.util.*; public class Estudos{ public static void main(String[] args){ String frase = "Programar em Java é bom demais"; StringTokenizer parser = new StringTokenizer(frase); int cont = parser.countTokens(); System.out.println("A frase contém " + cont + " palavras"); System.exit(0); } } Ao executar este código Java nós teremos o seguinte resultado: A frase contem 6 palavras. |
Java ::: Pacote java.util ::: Iterator |
Como usar objetos da interface Iterator do Java em suas aplicaçõesQuantidade de visualizações: 2857 vezes |
Um objeto da interface Iterator<E>, no pacote java.util, é usado para percorrer os elementos de uma coleção. Um Iterator é usado com frequencia em substituição a um Enumeration. Há duas diferenças principais entre os dois: a) Um Iterator permite a remoção de elementos na coleção sendo percorrida no momento. b) Os métodos do Iterator são mais curtos e apresentam melhoria em relação aos métodos do Enumeration. As subinterfaces conhecidas de Iterator<E> são ListIterator<E> e XMLEventReader. As classes conhecidas que implementam esta interface são BeanContextSupport.BCSIterator, EventReaderDelegate e Scanner. Veja um trecho de código no qual usamos um Iterator para percorrer e exibir os valores dos elementos de uma ArrayList: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.util.ArrayList; import java.util.Iterator; public class Estudos{ public static void main(String[] args){ // vamos criar uma ArrayList ArrayList<String> pessoas = new ArrayList(); pessoas.add("Osmar"); pessoas.add("Carlos"); pessoas.add("Fernanda"); // vamos obter um Iterator para a lista e percorrer todos os elementos for(Iterator<String> pessoa = pessoas.iterator(); pessoa.hasNext();){ System.out.println(pessoa.next()); } } } Ao executar este exemplo nós teremos o seguinte resultado: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- Osmar Carlos Fernanda |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Códigos Fonte |
![]() 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 |
![]() 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 |