Algoritmos – Validação de RG

Introdução

Continuando os algoritmos de validação e cálculo de dígitos verificadores, vamos ver agora o dígito verificador do RG – Documento de Identidade ou Registro Geral Brasileiro.

Cálculo

De forma similar aos demais, trata-se do complemento do módulo 11 com fator crescente iniciado em 2 no primeiro dígito (lado esquerdo) aplicado aos 8 dígitos do RG. O diferencial é que, caso o cálculo retorne 10 (dez), o dígito verificador é o caractere “x” (xis). Segue abaixo fonte de testes e implementação.

#include 'protheus.ch'

User Function TSTRG()
Local cRG := '24678131'
conout(cRG)                      
conout(DV_RG(cRG))
Return

// Validação RG ( 8 digitos + 1 verificador ) 
// Recebe string com 8 numeros do RG, sem pontuação
// Retorna o digito verificador como string
// O dígito pode ser de 0 a 9 ou "X" 
          
STATIC Function DV_RG(cRG)
Local nM := 2
Local nDV := 0 
Local nI,nVal

// Calcula o digito verificador baseado na soma
// dos digitos multiplicados pelo fator de acordo 
// com a posical do digito 
For nI := 1 to 8 
	nVal := val(substr(cRG,nI,1))
	nDV += ( nVal * nM )
	nM++	
Next

// Módulo 11 e complemento 
nDV := nDV % 11
nDV := 11 - nDV

// Regra final 
IF nDV = 10 
	Return 'X'
ElseIf nDV == 11
	nDV := 0
Endif

Return chr(48+nDV)

Conclusão

Depois de analisar algumas validações, vemos que todas são muito parecidas, algumas até idênticas, mas cada uma pode ter a sua particularidade ou comportamento diferenciado.

Espero que tenham gostado, e desejo a todos TERABYTES DE SUCESSO !!!

Referências

 

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s