Rozwiązanie podał MSB (marcoban@poczta.onet.pl), oto ono:
'-------------------------------------------------------------------------- 'Kontrola poprawności NIPFunction KontrolaNIP(ByVal NrNip As Variant) As Boolean Dim LiczKontr As Long, WylKontr As Long, i As Long Dim L(9) As Long If VarType(NrNip) = 8 Then LiczKontr = Int(Val(Right$(NrNip, 1))) For i = 1 To 9 L(i) = Int(Val(Mid$(NrNip, i, 1))) Next WylKontr = ((L(1) * 6 + L(2) * 5 + L(3) * 7 + L(4) * 2 + L(5) * _ 3 + L(6) * 4 + L(7) * 5 + L(8) * 6 + L(9) * 7) Mod 11) If WylKontr = LiczKontr Then KontrolaNIP = True Else KontrolaNIP = False End If Else KontrolaNIP = False Exit Function End If End Function'-----------------------------------------
Pierwsze 3 cyfry numeru NIP zgodnie ze specyfikacją oznaczają numer US, nadającego numerek.
Numer trzeba podawać jednym ciągiem (10 znaków) po wyeliminowaniu myślników.
Zwracana jest wartość logiczna.
Funkcje popełniłem... parę lat temu i dotąd działa bz.
Pozdrawiam,
MSB