Digito verificador modulo 10 csharp

09/03/2017

0

C#

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;
}
Marcos Santos

Marcos Santos

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:

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar