Boas...
Complicado, muito complicado pois cada estado da união, adota um tipo, diferentemente do CPF que é um único modelo para todas as pessoas físicas da união. Assim como é o CNPJ para pessoas jurídicas.
Você tem Rg´s com 6, 7, 8, 9, 10 chegando a 15 dígitos, o que torna a validação uma verdadeira epopeia em termos de linha e programação.
Deixo aqui para você, um exemplo que veio do Estado do Paraná ( varia como eu disse de Estado para Estado )
- Código:
'Créditos: Wilian Matteo
'Curitiba(PR) 29/07/03
Public Function ValidaRG(RG As String) As Boolean
Dim I As Integer 'Inteiro para For Next
Dim Digito As Byte 'Recebe o dígito digitado do RG
Dim NewRG As String 'Recebe o RG sem caracteres inválidos
Dim OldRG As String 'Recebe o valor original do RG sem caracteres inválidos
Dim SomaRG As Integer 'Recebe a soma dos campos
Dim Contador As Byte 'Varia de 2 a 7 para gerar as dezenas
Dim Resto As Integer 'Recebe o resto da divisão de somarg por 11
Dim Resultado As Byte 'Recebe o dígito real do RG
On Error Resume Next
Contador = 2
'Remove pontos, espaços e caracteres inválidos.
For I = 1 To Len(RG)
If Asc(Mid(RG, I, 1)) >= 48 And Asc(Mid(RG, I, 1)) <= 57 Then
NewRG = NewRG + Mid(RG, I, 1)
End If
Next
Digito = Right(NewRG, 1)
OldRG = NewRG
NewRG = CLng(Mid(NewRG, 1, Len(NewRG) - 1)) 'Converte para longo e exclui o último dígito do RG
For I = Len(NewRG) To 1 Step -1
If Contador = 8 Then Contador = 2 'Se contador chegar a 7 reinicie em 2
SomaRG = SomaRG + Mid(NewRG, I, 1) * Contador
Contador = Contador + 1
Next
Resto = SomaRG Mod 11
Resultado = Right(11 - Resto, 1)
'Verifica
If Resultado = Digito Then
ValidaRG = True
Else
ValidaRG = False
End If
End Function