cpdmg
-
Posts
11 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por cpdmg
-
-
@bngomes minha maior confusão era essa então, eu estava achando que o resultado da divisão era o resto
quando tenho substring(i, (i + 1)) não significa que ele pegará duas posições no substring??? onde a primeira posição é i e a segunda posição é i+1?
-
@bngomes , muito obrigado pelos esclarecimentos, trabalho com SQL e as estruturas são um pouco diferente
estou tentando simular esse algorítimo para compreender como é calculado o digito verificador, fiz duas simulações usando o raciocínio que entendi, gostaria que me corrijam se estiver errado.
Onde:
Resto = Soma / 11
dv = 11-resto
-
public class DvVerificador { public static void main(String[] args) { System.out.println(geraEtiquetaComDigitoVerificador("15653850")); } // Exemplo e-ticket 15653829 (dv=7) public static String geraEtiquetaComDigitoVerificador(String numeroEtiqueta) { Integer[] multiplicadores = {8, 6, 4, 2, 3, 5, 9, 7}; Integer soma = 0; String dv; if (numeroEtiqueta.length() != 8) { numeroEtiqueta = "Error"; } else { for (int i = 0; i < 8; i++) { soma += new Integer(numeroEtiqueta.substring(i, (i + 1))) * multiplicadores[i]; } Integer resto = soma % 11; if (resto == 0) { dv = "5"; } else if (resto == 1) { dv = "0"; } else { dv = new Integer(11 - resto).toString(); } numeroEtiqueta += dv; } return numeroEtiqueta; } }
Duvida 01: Quando eu tenho o seguinte comando
Integer[] multiplicadores = {8, 6, 4, 2, 3, 5, 9, 7};
ele está criando uma matriz, e respeitando a ordem:
primeiro numero = 8
segundo numero = 6 e assim sucessivamente???Duvida 02: Quando eu tenho o seguinte comando
for (int i = 0; i < 8; i++)
seria um loop, onde i começa com 0, não pode ser maior ou igual a 8, e i++ significa que ele auto incrementa?
Duvida 03: Quando eu tenho o seguinte comando
for (int i = 0; i < 8; i++) { soma += new Integer(numeroEtiqueta.substring(i, (i + 1))) * multiplicadores; }
ele começando o i = 0 no substring não vai dar erro?
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais
Sintaxe Java - Digito Verificador do Código Rastreio dos Correios
em Java/Android SDK
Postado
@bngomes muito obrigado mesmo... consegui montar um script que me atende em sql
declare @soma int, @contador int, @digito int, @valor varchar(8), @resto int set @soma = 0 set @contador = 1 set @valor = 97476052 set @soma = @soma + (substring(@valor,@contador,@contador) * 8) /*n1*/ set @soma = @soma + (substring(@valor,@contador+1,@contador) * 6) /*n2*/ set @soma = @soma + (substring(@valor,@contador+2,@contador) * 4) /*n3*/ set @soma = @soma + (substring(@valor,@contador+3,@contador) * 2) /*n4*/ set @soma = @soma + (substring(@valor,@contador+4,@contador) * 3) /*n5*/ set @soma = @soma + (substring(@valor,@contador+5,@contador) * 5) /*n6*/ set @soma = @soma + (substring(@valor,@contador+6,@contador) * 9) /*n7*/ set @soma = @soma + (substring(@valor,@contador+7,@contador) * 7) /*n8*/ set @resto = @soma%11 set @digito = case when @resto = 0 then 5 when @resto = 1 then 0 else 11 - @resto end select @digito digito