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) = 4A 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.