'Funkcje testujące poprawnośc wprowadzanych danych
'(c) 2004 J. Byszewski
Option Compare Database
Option Explicit
'Kontrola poprawności NIP
Public Function IsNIP(ByVal NrNIP As String) As Boolean
Dim LK, SK As Long
Dim NIP, Tmp As String
Dim i As Integer
Dim l(9), W(9) As Byte
Dim B As Byte
'Tablica wag
IsNIP = False
On Error GoTo Err_
W(1) = 6: W(2) = 5: W(3) = 7: W(4) = 2: W(5) = 3
W(6) = 4: W(7) = 5: W(8) = 6: W(9) = 7
'Konwersja
Tmp = CStr(NrNIP)
For i = 1 To Len(Tmp)
    B = Asc(Mid(Tmp, i, 1))
    If B > 47 And B < 57 Then NIP = NIP + Chr(B)
Next i
'Długość NIPu
If Len(NIP) <> 10 Then Exit Function
'Kontrola poprawności
LK = CByte(Val(Right(NIP, 1)))
SK = 0
For i = 1 To 9
    l(i) = CByte(Val(Mid(NIP, i, 1)))
    SK = SK + l(i) * W(i)
Next
SK = SK Mod 11
If SK = LK Then IsNIP = True
Err_:
End Function
'Kontrola poprawności PESEL
Public Function IsPESEL(ByVal NrPESEL As String) As Boolean
Dim LK, SK As Long
Dim PESEL, Tmp As String
Dim i As Integer
Dim l(10), W(10) As Byte
Dim B As Byte
'Tablica wag
IsPESEL = False
On Error GoTo Err_
W(1) = 1: W(2) = 3: W(3) = 7: W(4) = 9: W(5) = 1
W(6) = 3: W(7) = 7: W(8) = 9: W(9) = 1: W(10) = 3
'Konwersja
Tmp = CStr(NrPESEL)
For i = 1 To Len(Tmp)
    B = Asc(Mid(Tmp, i, 1))
    If B > 47 And B < 57 Then PESEL = PESEL + Chr(B)
Next i
'Długość PESELu
If Len(PESEL) <> 11 Then Exit Function
'Kontrola poprawności
LK = CByte(Val(Right(PESEL, 1)))
SK = 0
For i = 1 To 10
    l(i) = CByte(Val(Mid(PESEL, i, 1)))
    SK = SK + l(i) * W(i)
Next
SK = (10 - (SK Mod 10)) Mod 10
If SK = LK Then IsPESEL = True
Err_:
End Function
'Kontrola poprawności REGON
Public Function IsREGON(ByVal NrREGON As Variant) As Boolean
Dim LK, SK As Long
Dim REGON, Tmp As String
Dim i As Integer
Dim l(8), W(8) As Byte
Dim B As Byte
'Tablica wag
IsREGON = False
On Error GoTo Err_
W(1) = 8: W(2) = 9: W(3) = 2: W(4) = 3
W(5) = 4: W(6) = 5: W(7) = 6: W(8) = 7
'Konwersja
Tmp = CStr(NrREGON)
For i = 1 To Len(Tmp)
    B = Asc(Mid(Tmp, i, 1))
    If B > 47 And B < 57 Then REGON = REGON + Chr(B)
Next i
'Długość PESELu
If Len(REGON) <> 9 Then Exit Function
'Kontrola poprawności
LK = CByte(Val(Right(REGON, 1)))
SK = 0
For i = 1 To 8
    l(i) = CByte(Val(Mid(REGON, i, 1)))
    SK = SK + l(i) * W(i)
Next
SK = (SK Mod 11) Mod 10
If SK = LK Then IsREGON = True
Err_:
End Function
	Na koniec zamieszczam uwagę, którą przysłał zbiniek@go2.pl:
Witam!