Como validar um NIF no Excel

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

				
			

Exemplo em funcionamento