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.

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.

39406714

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.

39406714
23456789

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.

39406714
23456789
6271603649836

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.

4.2 5 votos
Nota do Artigo
Author

Um nerd nada tradicional… Desenvolvedor web full-stack, escritor amador e inventor nas horas vagas. Apaixonado por tecnologia e entusiasmado por projetos de código aberto!

Subscribe
Notify of
guest
5 Comentários
newest
oldest most voted
Inline Feedbacks
View all comments
wellington
wellington
2 meses atrás

E como seria os casos em que o digito verificador possui 2 digitos?

rogerio
rogerio
Reply to  wellington
1 mês atrás

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.

Last edited 1 mês atrás by rogerio
Soares Telionato
Soares Telionato
3 meses atrás

e como executar esse javascript no windows sem saber programar em java?
penso q deve haver uma maneira simples de fazer isso
obrigado

Henrique Marques Fernandes
Reply to  Soares Telionato
3 meses atrás

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/

Soares Telionato
Soares Telionato
Reply to  Henrique Marques Fernandes
2 meses atrás

era o q faltava saber
perfeito. salvou : )
thx

5
0
Would love your thoughts, please comment.x
()
x