O RG (Registro Geral), ou cédula de identidade, carteira de identidade, identidade é o nosso documento nacional de identificação civil no Brasil. Os dados que constam nesse documento variam de acordo com o órgão responsável pela sua emissão bem como a sua regra matemática de autenticidade. Nesse artigo vamos demonstrar a regra e validação baseado em um documento emitido pela SSP-SP.
O dígito verificador, nada mais é que o dígito que vem após o traço (xx.xxx.xxx-d). Ele é um mecanismo de autenticação utilizado para verificar a validade e a autenticidade do um valor numérico, funciona como uma prevenção de fraudes ou possíveis erros de transmissão e geração do documento.
Como calcular o dígito verificador do RG
Para aprender a lógica por trás da geração do dígito verificador utilizaremos neste artigo um RG válido e gerado randomicamente: 39.406.714-?
Primeiro vamos fazer uma tabela com 3 linhas e 8 colunas, teremos na primeira linha os 8 primeiros algarismos do número do RG.
3 | 9 | 4 | 0 | 6 | 7 | 1 | 4 |
Agora precisamos preencher a segunda linha, ela sempre obedecerá uma sequência lógica de números para todos o cálculo de qualquer RG. A sequência é 2,3,4,5,6,7,8 e 9.
3 | 9 | 4 | 0 | 6 | 7 | 1 | 4 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Agora para obter os valores da terceira linha devemos multiplicar os números de cada linha por coluna. Por exemplo, 3×2, 9×3 e assim por diante.
3 | 9 | 4 | 0 | 6 | 7 | 1 | 4 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
6 | 27 | 16 | 0 | 36 | 49 | 8 | 36 |
Agora que temos nossa tabela completa, precisamos somar todos os números obtidos na terceira linha. Em nosso exemplo teremos: 6 + 27 + 16 + 0 + 36 + 49 + 8 + 36 = 178.
Agora precisamos descobrir o resto da divisão desse número por 11, você pode descobrir usando a calculador do seu computador usando o operador mod
: 178 mod 11 = 2.
Agora precisamos subtrair de 11 o resto da nossa divisão e teremos finalmente o nosso dígito verificador: 11 – 2 = 9.
Abaixo você encontra o algoritmo feito em JavaScript ES5 seguindo a lógica explicada acima.
function descobrirDigito(rg) {
var digitos = rg.split("");
var totais = [];
var total = 0;
// Multiplicamos os que seriam da primeira linha com os da segunda
digitos.forEach(function (digito, index) {
totais.push(Number(digito) * (2 + index));
});
// Multiplicamos as colunas
totais.forEach(function(numero) { total += numero });
// Descobrimos o resto da divisão
var resto = total % 11;
return 11 - resto;
}
console.log(descobrirDigito("39406714"));
Casos especiais
Como tudo no Brasil, temos alguns casos especiais que precisamos estar atentos:
O dígito verificador do RG é X
Quando nos deparamos com o dígito verificador X, isso significa que o resultado da última etapa de nossa conta é 10 (11 – 1). Então o dígito verificador 10 foi substituído pelo algarismo romano X.
O dígito verificador é 0
Qundo nos deparamos com o dígito verificador 0, isso significa que o resultado da última etapa de nossa conta é 11 (11 – 0). Então o dígito verificador 11 foi substituído pelo algarismo 0.
64349600
Mas aqui no RG são 10 dígitos, como fazer o cálculo ? E parece que outros estados utilizam outras quantidades de dígitos, como proceder ? OBG
Fala Marcelo! Isso seria apenas para o estado de SP emitido pela SSP/SP, para outros casos precisaria ver se existe uma lógica de validação, acho que nem todos existem dígito verificadores.
E como seria os casos em que o digito verificador possui 2 digitos?
O resto da divisão inteira por 11 só pode ir de 0 a 10. Então, na segunda etapa, quando se faz 11 menos o valor calculado na primeira etapa, o resultado da subtração só pode ir de 1 a 11. Quando resulta em 10, substitui-se por X e, quando resulta em 11, substitui-se por 0. Acaba não existindo outra possibilidade. Então, o RG fica com apenas um dígito verificador.
Outros números, como CPF, CNPJ e os códigos de barras, também possuem seus algoritmos para geração de códigos verificadores. O algoritmo é diferente do RG, mas são similares na lógica.
e como executar esse javascript no windows sem saber programar em java?
penso q deve haver uma maneira simples de fazer isso
obrigado
Fala Soares, tem como sim, você consegue rodar no seu próprio navegador, caso esteja utilizando o chrome só clicar no atalho ctrl + shift + i e ir na aba console ou você pode usar algum site que emule editor online, por exemplo, https://playcode.io/new/
era o q faltava saber
perfeito. salvou : )
thx