Bóson Treinamentos em Ciência e Tecnologia

Algoritmo para validação de RG SSP/SP (dígitos verificadores) em Python

Como calcular dígito verificador de RG de São Paulo - Validação de RG

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:

  1. 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

Sair da versão mobile