Como Funciona a Emissão e Validação de RG no Brasil?
O Registro Geral (RG), formalmente denominado Cédula de Identidade, é historicamente emitido pelas Secretarias de Segurança Pública (SSP) e institutos de identificação de cada um dos estados da federação e do Distrito Federal (como o Instituto de Identificação Félix Pacheco no Rio de Janeiro e o Instituto de Identificação Ricardo Gumbleton Daunt em São Paulo).
Ao contrário do CPF — gerido centralizadamente pela Receita Federal —, o RG brasileiro foi descentralizado por mais de sete décadas. Por essa razão, não existia uma base nacional unificada e cada estado adotava regras de formatação, faixas numéricas e algoritmos de dígitos verificadores próprios.
1. O Algoritmo de Validação do RG (Padrão São Paulo)
O modelo mais comum de validação adotado por sistemas de software no Brasil toma como base o padrão do estado de São Paulo, composto por 8 dígitos numéricos mais 1 dígito verificador no formato XX.XXX.XXX-Y:
- Multiplica-se cada um dos 8 primeiros algarismos por pesos crescentes de 2 até 9:
Soma = (D1 * 2) + (D2 * 3) + (D3 * 4) + (D4 * 5) + (D5 * 6) + (D6 * 7) + (D7 * 8) + (D8 * 9)
- Calcula-se o resto da divisão inteira da soma por 11 (
Resto = Soma % 11). - Aplica-se a regra do dígito:
- Se
Resto === 10, o dígito verificador é a letra X (ou x). - Se
Resto === 0(ou11), o dígito é 0. - Nos demais casos, o dígito verificador é o próprio Resto.
- Se
2. O Fim do RG Tradicional: A Nova Carteira de Identidade Nacional (CIN)
A Lei Federal nº 14.534/2023 determinou uma das maiores modernizações cadastrais da história do Brasil: o CPF passou a ser o número único e suficiente de identificação do cidadão em todos os bancos de dados governamentais e certidões.
Com a implantação progressiva da Carteira de Identidade Nacional (CIN) em todo o país, o número do RG tradicional está sendo gradualmente descontinuado. Os novos documentos emitidos utilizam exclusivamente os 11 dígitos do CPF do cidadão, eliminando a possibilidade de uma mesma pessoa possuir múltiplos registros estaduais distintos.
3. Implementação de Validação de RG em JavaScript
function validarRG_SP(rg) {
if (!rg || typeof rg !== 'string') return false;
const limpo = rg.toUpperCase().replace(/[^0-9X]/g, '');
if (limpo.length !== 9) return false;
let soma = 0;
for (let i = 0; i < 8; i++) {
soma += parseInt(limpo.charAt(i), 10) * (i + 2);
}
const resto = soma % 11;
const digitoEsperado = resto === 10 ? 'X' : String(resto);
return limpo.charAt(8) === digitoEsperado;
}