Validar um NIF no Excel é uma tarefa que pode ser feita através de formulas ou mais simples ainda, através de uma função em VBA.
Para validar um nif o algoritmo é bastante simples, como sabem o NIF é composto por 9 dígitos, sendo o último um digito de controlo, é este digito que iremos calcular para verificar se o nif está correcto.
Antes de procedermos ao cálculo do digito de controlo, temos de apurar algumas condições, uma bastante importante tem a ver com o 1º digito, este terá que ser válido, o primeiro dígito do NIF tem a ver com o tipo de entidade que o possui, que pode ser uma das seguintes:
- NIF e Número de Contribuinte – Número de Identificação Fiscal
- 1 – pessoa singular
- 2 – pessoa singular
- NIPC – Número de Identificação de Pessoa Colectiva
- 5 (pessoa colectiva),
- 6 (pessoa colectiva pública),
- 8 (empresário em nome individual),
- 9 (pessoa colectiva irregular ou número provisório).
Passado com sucesso esta condição, podemos começar a calcular o digito de controle.
Para calcular o digito de controlo iremos multiplicar individualmente e por ordem os restantes 8 algarismos, fazendo-o da seguinte forma:
O 1.º digito multiplicamos por 9, o 2.º dígito por 8, 3.º dígito por 7, 4.º dígito por 6, 5.º dígito por 5, 6.º dígito por 4, 7.º dígito por 3 e o 8.º dígito por 2.
Iremos somar todos os resultados da operação anterior.
Com o resultado da soma anterior iremos dividir por 11 e aproveitar o resto dessa divisão. Se o resto for 0 ou 1, o dígito de controle será 0, caso seja outro algarismo, o dígito de controle será o resultado de 11 – resto.
Simples não?
Com validar um NIF no Excel
Irei colocar aqui duas funções de validação de NIF em que a primeira devolve uma mensagem conforme o resultado e a segunda simplesmente retorna verdadeiro ou falso conforme o NIF estiver correcto ou não.
Já sabe que estas funções terão que ser colocadas num modulo através do Editor do VBA (ALT+F11) no Workbook onde pretende utilizá-las.
'
' Função que valida NIF e retorna uma mensagem do resultado.
'
Function VerificaNIFmsg(NIF As String) As String
Dim i As Integer, CheckDigit As Integer
'Resultado predefinido
VerificaNIFmsg = ""
If Len(NIF) = 0 Then Exit Function
'Só passa com um comprimento de 9 carateres e se for numerico
If Len(NIF) <> 9 Then
VerificaNIFmsg = "Erro na introdução do NIF - Tamanho"
Exit Function
End If
If IsNumeric(NIF) = False Then
VerificaNIFmsg = "Erro na introdução do NIF - Formato"
Exit Function
End If
'verifica se o 1º digito é válido dentro dos possiveis inicios de numeros de contribuinte
If InStr("125689", Mid(NIF, 1, 1)) = 0 Then Exit Function
'Inicio do Calculo do CheckDigit
CheckDigit = 0
' Multiplicação e soma do respectivo resultado
For i = 1 To 8
CheckDigit = CheckDigit + (Mid(NIF, i, 1) * (10 - i))
Next i
'Achar o resto da divisão entre a soma anterior e 11
CheckDigit = CheckDigit Mod 11
'Fase final da verificação do CheckDigit
Select Case CheckDigit
Case 0, 1
CheckDigit = 0
Case Else
CheckDigit = 11 - CheckDigit
End Select
'Confrontar o resultado do checkdigit com o último numero do NIF dado
If (CheckDigit = Right(NIF, 1)) Then
VerificaNIFmsg = "NIF OK"
Else
VerificaNIFmsg = "NIF Errado"
End If
End Function
'--------------------------------------------------
' Função que valida NIF e retorna verdadeiro se o
' NIF estiver correcto, ou falso para incorrecto.
'
Function VerificaNIF(NIF As String) As Boolean
Dim i As Integer, CheckDigit As Integer
'Resultado predefinido
VerificaNIF = False
'Sem NIF não há nada para calcular
If Len(NIF) = 0 Then Exit Function
'Só passa com um comprimento de 9 carateres e se for numerico
If Len(NIF) <> 9 Or IsNumeric(NIF) = False Then Exit Function
'Verifica se o 1º digito é válido dentro dos possiveis inicios de numeros de contribuinte
If InStr("125689", Mid(NIF, 1, 1)) = 0 Then Exit Function
'Inicio do Calculo do CheckDigit
CheckDigit = 0
' Multiplicação e soma do respectivo resultado
For i = 1 To 8
CheckDigit = CheckDigit + (Mid(NIF, i, 1) * (10 - i))
Next i
'Achar o resto da divisão entre a soma anterior e 11
CheckDigit = CheckDigit Mod 11
'Fase final da verificação do CheckDigit
Select Case CheckDigit
'caso seja 0 ou 1
Case 0, 1
CheckDigit = 0
Case Else
CheckDigit = 11 - CheckDigit
End Select
'Confrontar o resultado do checkdigit com o último numero do NIF dado
If (CheckDigit = Right(NIF, 1)) Then VerificaNIF = True
End Function