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.