Ir ao conteúdo
  • Cadastre-se

cpdmg

Membro Júnior
  • Posts

    11
  • Cadastrado em

  • Última visita

Reputação

0
  1. @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
  2. @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?
  3. @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
  4. 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

×
×
  • Criar novo...