Gerador e validador de RG (São Paulo)
Não existe algoritmo nacional de RG. Cada estado emite no seu próprio formato, e a maioria sequer usa dígito verificador — então uma função ValidarRG que valha para o Brasil inteiro não existe. Esta ferramenta gera e valida o padrão da SSP-SP, que é o mais difundido e o único com regra de dígito amplamente conhecida. Tudo no seu navegador, sem enviar nada para servidor nenhum.
Gerador e validador
0 gerado(s)
Por que não existe validação nacional de RG
O RG é emitido por órgão estadual, e cada unidade da federação define o próprio formato. A quantidade de dígitos varia, o uso de dígito verificador varia, e não há um registro central que unifique. Na prática, isso significa três coisas para quem escreve software.
Primeira: não valide RG por algoritmo em cadastro nacional — você vai recusar documento legítimo de outros estados. Segunda: se precisar validar, valide junto com o órgão emissor, que é o campo que diz qual regra se aplica. Terceira: para a maioria dos sistemas, o certo é tratar RG como texto livre, conferindo apenas tamanho e caracteres permitidos.
O cálculo do dígito no padrão SSP-SP
São 8 dígitos de base e um verificador. Multiplique os oito por pesos de 9 a 2, da esquerda para a direita, some e tome o resto da divisão por 11. Esse resto é o dígito. Quando dá 10, o dígito vira a letra X — a mesma convenção do ISBN, porque 10 não cabe numa casa decimal.
// Padrão SSP-SP: 8 dígitos e um verificador, que pode ser a letra X.
static char DigitoRgSp(string baseRg)
{
var soma = 0;
for (var i = 0; i < 8; i++)
{
soma += (baseRg[i] - '0') * (9 - i); // pesos 9,8,7,6,5,4,3,2
}
var resto = soma % 11;
return resto == 10 ? 'X' : (char)('0' + resto);
}Vale registrar a procedência: este cálculo não é publicado oficialmente pela SSP-SP. É convenção reconstruída a partir de documentos reais, e é a que as ferramentas do mercado usam. Conferimos a implementação contra três RGs de exemplo publicados — 29.465.327-2, 45.727.503-0 e 37.606.335-X — e ela reproduz os três.
As duas descrições que circulam são a mesma
Você vai encontrar duas versões do algoritmo na internet, e elas parecem discordar. Uma manda usar pesos de 9 a 2 e tomar o resto da divisão por 11; a outra manda usar pesos de 2 a 9 e subtrair o resto de 11. Aplicadas ao mesmo RG, dão o mesmo dígito.
O motivo é aritmético: os pesos das duas somam exatamente 11 em cada posição — 9 com 2, 8 com 3, 7 com 4, e assim por diante. Como o peso total é múltiplo de 11, as duas somas são congruentes de sinal trocado no módulo 11, e portanto 11 − (soma₂ mod 11) ≡ soma₁ mod 11. A diferença aparece num único caso: quando o resto dá zero, a segunda forma produz 11 e precisa de um % 11 final que quase nenhuma implementação escreve. Por isso a primeira forma é a mais segura.
Perguntas frequentes
Existe um algoritmo nacional de validação de RG?
Não existe. O RG é emitido por cada unidade da federação, e cada uma define o próprio formato — o número de dígitos varia, e a maioria dos estados sequer usa dígito verificador. Isso significa que não há como escrever uma função ValidarRG que valha para o Brasil inteiro, e que qualquer ferramenta que prometa validar RG está, na prática, validando o formato de um estado só. Esta valida o padrão da SSP-SP, que é o mais difundido e o único com regra de dígito amplamente conhecida.
Como o dígito verificador do RG de São Paulo é calculado?
Multiplique os oito dígitos da base por pesos de 9 a 2, da esquerda para a direita, some tudo e tome o resto da divisão por 11. Esse resto é o próprio dígito verificador; quando ele dá 10, o dígito é representado pela letra X, pela mesma convenção do ISBN. Vale notar que este cálculo não é publicado oficialmente pela SSP-SP: é convenção reconstruída a partir de documentos reais, e é a que as ferramentas do mercado usam.
Por que algumas fontes descrevem o cálculo do RG de outro jeito?
Porque as duas descrições que circulam são equivalentes, e quase ninguém percebe. Uma diz para usar pesos de 9 a 2 e tomar o resto da divisão por 11; a outra diz para usar pesos de 2 a 9 e subtrair o resto de 11. Como os pesos das duas somam exatamente 11 em cada posição, as duas somas são congruentes de sinal trocado no módulo 11 — então os resultados coincidem. A diferença aparece num único caso: quando o resto dá zero, a segunda forma produz 11 e precisa de um ajuste que costuma faltar. Por isso a primeira forma é a implementação mais segura.
Posso usar um RG gerado aqui em algum sistema real?
Não. Ele serve para popular base de teste e exercitar máscara e validação de campo. Um RG gerado passa no cálculo do dígito de São Paulo, mas isso não o torna um documento — e o número pode coincidir com o de uma pessoa real, exatamente como acontece com CPF.
Outras ferramentas
Veja também o gerador de CPF e o gerador de CNPJ, que já cobre o formato alfanumérico. Todas em ferramentas para desenvolvedor.
Receba os próximos artigos
Conteúdo técnico de .NET direto no seu e-mail. Sem spam, e você sai quando quiser.