Utilizando Módulo 10 para calcular dígito verificador 10


Dígito verificador ou algarismo de controle é um mecanismo de autenticação utilizado para verificar a validade e a autenticidade de um valor numérico, evitando dessa forma fraudes ou erros de transmissão ou digitação.

É usado normalmente em representações numéricas que exijam integridade, como por exemplo CPF, CNPJ, RG.

O método de cálculo desses dígitos varia conforme o caso, porém muitos deles se baseiam em duas rotinas tradicionais: Módulo 11 e Módulo 10.

O cálculo do Módulo 10 é feito da seguinte maneira:

Cada dígito do número, começando da direita para a esquerda (menos significativo para o mais significativo) é multiplicado, na ordem, por 2, depois 1, depois 2, depois 1 e assim sucessivamente.

Número exemplo: 261533-4

  +---+---+---+---+---+---+   +---+
  | 2 | 6 | 1 | 5 | 3 | 3 | - | 4 |
  +---+---+---+---+---+---+   +---+
    |   |   |   |   |   |
   x1  x2  x1  x2  x1  x2
    |   |   |   |   |   |
   =2 =12  =1 =10  =3  =6
    +---+---+---+---+---+-> = (16 / 10) = 1, resto 6 => DV = (10 - 6) = 4

A função abaixo traduz este esquema na linguagem CSharp e poderá ser utilizada em seus projetos .net.

private string modulo10(string str)
{
    int digito=0;
    int flag=2;
    str=str.Substring(0,str.Length - 1);
    for (int i = str.Length-1; i >= 0; i--)
    {
        int valor = Convert.ToInt32(str[i].ToString()) * flag;
        int soma = 0;
        if (valor.ToString().Length > 1)
        {
            string svalor = valor.ToString();
            for (int j = 0; j < svalor.Length; j++)
            {
                soma += Convert.ToInt32(svalor[j].ToString());
            }
        }
        else
        {
            soma = valor;
        }
        digito += soma;
        flag = (flag == 2) ? 1 : 2;
    }
    digito = digito % 10;
    digito = 10 - digito;
    if (digito == 10)
    {
        digito = 0;
    }
    return digito.ToString();
}

Obs.: Todo o texto didático deste post foi extraído da Wikipédia obedecendo a licença GNU da mesma.

Related Posts Plugin for WordPress, Blogger...