DEV Community

Henrique Marques Fernandes
Henrique Marques Fernandes

Posted on • Originally published at marquesfernandes.com on

Como saber e validar o dígito verificador do RG (Registro Geral)

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;
Enter fullscreen mode Exit fullscreen mode

}

console.log(descobrirDigito("39406714"));

Enter fullscreen mode Exit fullscreen mode




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.

O post Como saber e validar o dígito verificador do RG (Registro Geral) apareceu primeiro em Henrique Marques Fernandes.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay