Algoritmo para validação de RG SSP/SP (dígitos verificadores) em Python
Validação de RG SSP/SP (dígitos verificadores) em Python
Neste tutorial mostro como realizar o cálculo do dígito verificador para validação de RG emitido no estado de SP, usando um script criado em Python – e que você pode adaptar para a linguagem de programação que desejar.
Formato do RG
O formato de um RG (Registro Geral) de São Paulo é composto por 9 dígitos no no formato XX.XXX.XXX-Y, onde os “X” representam os dígitos numéricos e o “Y” representa o dígito verificador (DV).
Esse dígito verificador é o módulo 11 dos 8 dígitos anteriores, calculado usando um algoritmo específico – que vamos criar em Python.
No caso do RG, o DV corresponde ao resto da divisão por 11 do somatório da multiplicação de cada um dos outros oito algarismos respectivamente por 9, 8, 7, 6, 5, 4, 3, 2, a partir do dígito mais à esquerda. O resto 10 é considerado como valor X.
Observação importante: Em outros estados o formato do RG pode ser levemente diferente, e o algoritmo que mostrarei aqui pode não funcionar corretamente para realizar a validação, sendo necessário criar um algoritmo diferente.
Como calcular o dígito verificador do RG: Exemplo
Vejamos como realizar o cálculo do dígito verificador do RG por meio de um exemplo. Suponhamos o RG de número 29.465.327-2. Como verificar se ele é válido?
Para isso temos de efetuar a validação do dígito verificador – que no caso é o valor 2. Vamos ao processo:
Passo 1
Multiplicar os oito primeiros dígitos do RG pela sequência numérica de 9 a 2 e realizar sua soma:
2 | 9 | 4 | 6 | 5 | 3 | 2 | 7 | x |
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | = |
18 | 72 | 28 | 36 | 25 | 12 | 6 | 14 |
Somatório dos valores obtidos:
18 + 72 + 28 + 36 + 25 + 12 + 6 + 14 = 211
Passo 2
Calcular o módulo 11 do somatório – ou seja, o resto da divisão por 11 do somatório obtido no passo 1.
O valor resultante desse cálculo é o dígito verificador do RG:
211 % 11 = 2
Dígito verificador calculado: 2 → RG validado
Obs.: O símbolo % representa a operação de módulo.
Note que existe um caso especial a ser tratado aqui:
- Caso o resto calculado seja igual a 10, o dígito verificador será considerado como a letra X (que representa 10 em algarismos romanos).
Programa em Python para validação de RG SSP/SP
# Função de validação do dígito verificador de RG SSP/SP em Python def validaRG(rg): cont = 9 soma = 0 # Somatório das multiplicações dos 8 primeiros dígitos do rg for digito in rg[0:8]: soma += int(digito) * cont cont -= 1 # Calcula dv fazendo somatório mód 11 dv = soma % 11 # Verifica se dv calculado coincide com dv fornecido no RG (último dígito) if ((dv == 10) & (rg[-1] == 'X')): return(True) elif (int(rg[-1]) == dv): return(True) else: return(False) if __name__=='__main__': rg = input("Digite seu RG, sem pontos ou traço: ") res = validaRG(rg) if (res == True): print("RG validado com sucesso.") else: print("Documento inválido.")
Funcionamento do algoritmo
O algoritmo começa definindo uma função de nome validaRG(rg) e criando dentro dela as variáveis cont e soma. A variável cont é inicializada com o valor 9 e a variável soma é inicializada com o valor 0.
Em seguida, é iniciado um laço for que percorre os primeiros 8 dígitos do número de RG fornecido. Para cada dígito, o algoritmo multiplica o valor do dígito pela variável cont (que é decrementada em cada iteração) e acumula o resultado na variável soma.
Após o término do laço, o algoritmo calcula o dígito verificador (dv) fazendo o módulo 11 da soma.
Em seguida, o algoritmo verifica se o dígito verificador calculado coincide com o dígito verificador fornecido no RG (último dígito).
Se o dígito verificador calculado for 10 e o último dígito do RG for ‘X’, isso é considerado uma coincidência e retorna True. Caso contrário, se o último dígito do RG for um número e for igual ao dígito verificador calculado, também retorna True.
Caso contrário, retorna False.
No corpo principal do programa if __name__==’__main__’:, o algoritmo solicita que o usuário digite o número do RG, sem pontos ou traços. Em seguida, chama a função definida validaRG() passando o número do RG como argumento e armazena o resultado na variável res.
Por fim, o algoritmo imprime uma mensagem indicando se o RG foi validado com sucesso ou se é inválido, com base no resultado retornado pela função validaRG.
Teste
Teste o algoritmo com seu número de RG, e com outros números, como 45.727.503-0 (contém DV zero no final) e 37.606.335-X (dígito verificador é a letra X), para verificar também os casos especiais.
Tente também melhorar o programa para que aceite a digitação dos documentos com pontos e traços, como exercício.
É isso aí!
Veja também: Como calcular e validar dígitos verificadores em números de CPF
Escreva um comentário