Fórum Digito verificador modulo 10 csharp #576704
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)