Boa tarde, Manuel, e bem-vindo ao fórum
Funções que encontrei não sei onde e não sei se funcionam:
Public Function ValidoNIB(ByVal NIB As String) As Integer
Dim s As Long
Dim I, I2, checkDigit As Integer
Dim nib_auxiliar As String
Dim Tabela_pesos(31) As Byte
Dim Tabela_bancos(40) As Integer
Dim dblDivisao As Double
'1 = NIB INVÁLIDO" 'check digit inválido
'2 = comprimento do NIB INVÁLIDO"
'3 = banco do NIB INVÁLIDO"
ValidoNIB = 1
Tabela_pesos(1) = 85
Tabela_pesos(2) = 57
Tabela_pesos(3) = 93
Tabela_pesos(4) = 19
Tabela_pesos(5) = 31
Tabela_pesos(6) = 71
Tabela_pesos(7) = 75
Tabela_pesos(
= 56
Tabela_pesos(9) = 25
Tabela_pesos(10) = 51
Tabela_pesos(11) = 73
Tabela_pesos(12) = 17
Tabela_pesos(13) = 89
Tabela_pesos(14) = 38
Tabela_pesos(15) = 62
Tabela_pesos(16) = 45
Tabela_pesos(17) = 53
Tabela_pesos(18) = 15
Tabela_pesos(19) = 50
Tabela_pesos(20) = 5
Tabela_pesos(21) = 49
Tabela_pesos(22) = 34
Tabela_pesos(23) = 81
Tabela_pesos(24) = 76
Tabela_pesos(25) = 27
Tabela_pesos(26) = 90
Tabela_pesos(27) = 9
Tabela_pesos(28) = 30
Tabela_pesos(29) = 3
Tabela_pesos(30) = 10
Tabela_pesos(31) = 1
Tabela_bancos(1) = 7 ' deve acrescentar os códigos de banco que conheça para validar o banco.
Tabela_bancos(2) = 10
Tabela_bancos(3) = 12
Tabela_bancos(4) = 18
Tabela_bancos(5) = 32
Tabela_bancos(6) = 33
Tabela_bancos(7) = 35
Tabela_bancos(
= 36
Tabela_bancos(9) = 43
nib_auxiliar = 0
nib_auxiliar = NIB
I = 1
checkDigit = 0
If nib_auxiliar < 1E+17 Or nib_auxiliar > 1E+21 Then
ValidoNIB = 2
Exit Function
End If
s = 0
For I2 = 1 To 9
If Mid(nib_auxiliar, 1, (4)) = Tabela_bancos(I2) Then
s = 1
End If
Next
If s = 0 Then
ValidoNIB = 3
Exit Function
End If
For I = I To 19
checkDigit = checkDigit + (Mid(nib_auxiliar, I, (1)) * Tabela_pesos(I + 10))
Next
dblDivisao = checkDigit / 97
s = Int(dblDivisao) * 97
checkDigit = checkDigit - s
checkDigit = 98 - checkDigit
If (checkDigit = Mid(nib_auxiliar, 20, (2))) Then
ValidoNIB = 0
End If
End Function
Public Function ValidoContribuinte(ByVal contrib As String) As Boolean
'validação do NIF
Dim s As Long
Dim I, checkDigit As Integer
Dim dblDivisao As Double
ValidoContribuinte = False
checkDigit = 0
If contrib < 10000000 Or contrib > 999999999 Then
Exit Function
End If
If (Mid(contrib, 1, (1)) = 1 Or Mid(contrib, 1, (1)) = 2 Or Mid(contrib, 1, (1)) = 5 Or Mid(contrib, 1, (1)) = 6 Or Mid(contrib, 1, (1)) = 8 Or Mid(contrib, 1, (1)) = 9) Then
Else
Exit Function
End If
For I = 1 To 8
checkDigit = checkDigit + (Mid(contrib, I, (1)) * (10 - I))
Next
dblDivisao = checkDigit / 11
s = Int(dblDivisao) * 11
checkDigit = checkDigit - s
If (checkDigit = 0 Or checkDigit = 1) Then
checkDigit = 0
Else
checkDigit = 11 - checkDigit
End If
If (checkDigit = Mid(contrib, 9, (1))) Then
ValidoContribuinte = True
End If
End Function