Digito verificador modulo 10 csharp
09/03/2017
0
Bom dia
estou com um problema que não consigo fazer o modulo 10 calcular direito, você poderia me dar uma luz, desde já agradeço, a linguagem é c#
public static int DigitoM10(long intNumero)
{
int[] intPesos = { 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1 };
string strText = intNumero.ToString();
if (strText.Length > 16)
throw new Exception("Número não suportado pela função!");
int intSoma = 0;
int intIdx = 0;
for (int intPos = strText.Length - 1; intPos >= 0; intPos--)
{
intSoma += Convert.ToInt32(strText[intPos].ToString()) * intPesos[intIdx];
intIdx++;
}
intSoma = intSoma % 10;
intSoma = 10 - intSoma;
if (intSoma == 10)
{
intSoma = 0;
}
return intSoma;
}
estou com um problema que não consigo fazer o modulo 10 calcular direito, você poderia me dar uma luz, desde já agradeço, a linguagem é c#
public static int DigitoM10(long intNumero)
{
int[] intPesos = { 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1 };
string strText = intNumero.ToString();
if (strText.Length > 16)
throw new Exception("Número não suportado pela função!");
int intSoma = 0;
int intIdx = 0;
for (int intPos = strText.Length - 1; intPos >= 0; intPos--)
{
intSoma += Convert.ToInt32(strText[intPos].ToString()) * intPesos[intIdx];
intIdx++;
}
intSoma = intSoma % 10;
intSoma = 10 - intSoma;
if (intSoma == 10)
{
intSoma = 0;
}
return intSoma;
}
Marcos Santos
Curtir tópico
+ 0
Responder
Posts
10/03/2017
Victor Machado
Olá Marcos, beleza?
Eu percebi que na sua formula, você esqueceu de somar o valor dos números de cada casas decimal após multiplicar pelo "peso", além de que a ordem que deve ser multiplicado é: 1, 2, 1, 2, 1 2, ...
Você acabou invertendo.
Fiz um código que calcula isso também, se você quiser consultar:
Eu percebi que na sua formula, você esqueceu de somar o valor dos números de cada casas decimal após multiplicar pelo "peso", além de que a ordem que deve ser multiplicado é: 1, 2, 1, 2, 1 2, ...
Você acabou invertendo.
Fiz um código que calcula isso também, se você quiser consultar:
public static int DigitoM10(string numero) { if (numero.Length > 16) throw new Exception("Número não suportado pela função!"); //Iniciando a variável da soma int soma = 0; //Loop para verficar cada numero do valor //x inicia com zero e o loop continua enquanto o x é menor que tamanho de caracteres for (int x = 0; x < numero.Length; x++) { //Iniciando a variável peso com o valor 1 var peso = 1; //Se x +1 for um numero par, peso = 2 if ((x + 1) % 2 == 0) { peso = 2; } //Convertendo a string do numero para int e multiplica pelo peso int valor = Convert.ToInt32(numero[x].ToString()) * peso; //Convertendo novamente o valor para string string strValor = valor.ToString(); //Caso a quantidade de casas do numero seja maior que 1 if(strValor.Length > 1){ //Soma o valor de cada casa e adiciona a variavel soma soma += Convert.ToInt32(strValor[0].ToString()) + Convert.ToInt32(strValor[1].ToString()); }else{ //Adicionar o valor a variavel soma soma += valor; } } //Resto é o resultado da divisão da soma por 10 int resto = soma % 10; //Se o resto for igual a 0, retorna 0. Se não retorna a o resultado de 10 - resto if (resto == 0) { return 0; } else { return 10 - resto; } }
Responder
Clique aqui para fazer login e interagir na Comunidade :)