Funkcja użytkownika: NIP, czy jest prawidłowy

Gotowe szablony, skrypty, makropolecenia i rozszerzenia. Tutaj możesz pochwalić i podzielić się swoją twórczością z innymi użytkownikami

Oceń tę funkcję. (Mogą to zrobić tylko zalogowani użytkownicy)

1. Niepotrzebna.
0
Brak głosów
2. Może się przydać.
0
Brak głosów
3. Dobrze, że została napisana.
0
Brak głosów
 
Liczba głosów: 0

Awatar użytkownika
Jermor
Posty: 2350
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Funkcja użytkownika: NIP, czy jest prawidłowy

Post autor: Jermor »

Co jakiś czas na forum pojawia się pytanie o możliwości wydrukowania faktury. Niezbędnym składnikiem faktury jest numer NIP kontrahenta. Napisałem dodatkową funkcję użytkownika, która sprawdza, czy wprowadzony numer NIP jest numerem NIP. Sprawdzenie polega na skontrolowaniu numeru na zgodność z cyfrą kontrolną. Jeśli numer NIP jest zgodny z cyfrą kontrolną, zwracana jest wartość PRAWDA, jeśli nie – FAŁSZ.
Wartość PRAWDA nie oznacza jeszcze, że numer jest przypisany do rzeczywiście istniejącego podmiotu gospodarczego. To należy sprawdzić samodzielnie, np. na stronie http://www.krs-online.com.pl. Funkcja ma na celu weryfikację numeru podczas wprowadzania go do arkusza.
Funkcję należy wywołać poleceniem =NIP(nip), gdzie nip jest adresem komórki zawierającej numer NIP lub numerem wpisanym bezpośrednio jako argument funkcji. Funkcja analizuje ciąg ignorując wszystkie znaki niebędące cyfrą. Można zatem podać NIP w postaci dowolnego ciągu zawierającego 10 cyfr, czyli w postaci 999-99-99-999, 999-999-99-99 albo 9999999999.
Jeżeli jako argument funkcji podano zakres komórek, pojawia się komunikat informujący o błędzie i formulę należy poprawić. Analogicznie, gdy wywołano funkcję bez podania argumentu.
Funkcję można wkopiować do biblioteki Standard kontenera „Moje makra”, będzie wówczas dostępna we wszystkich arkuszach otwieranych na komputerze użytkownika.

Wywołanie funkcji:
NIP(nip)
nip – jest analizowanym numerem NIP.
Funkcji można uzyć przy formatowaniu warunkowym. Jeśli utworzono styl o nazwie np. „złynip”, który zawiera czerwone tło, to do komórki, do której wpisywany jest NIP, można przypisac formatowanie warunkowe „Formuła jest: NIE(NIP(komórka)) i styl „złynip”.

Przykłady:
=NIP(A1) zwróci PRAWDA, jeśli ciąg znaków w komórce A1 odpowiada numerowi NIP.
=NIP("899-23-67-273") zwróci PRAWDA, gdyż jest to NIP przypisany do sklepu Kaufland.
=NIP(899-23-67-273) zwróci FAŁSZ, gdyż funkcja najpierw obliczy różnicę tych liczb i ona będzie analizowana jako numer NIP.
=NIP(8992367273) zwróci PRAWDA, gdyż numer odpowiada NIP-owi wspomnianego już sklepu Kaufland.
=NIP("899-23-671-273") zwróci FAŁSZ, gdyż numer zawiera więcej niż 10 cyfr.
=NIP("abcd-8xxx99-23sdr67-273xxx") zwróci PRAWDA, gdyż te 10, znajdujących się w tym ciągu, cyfr odpowiada numerowi NIP.

Funkcja:

Kod: Zaznacz cały

Function NIP (optional a) as Boolean
'-----------------------------------------------------------------------
' Funkcja sprawdza czy wpisany numer NIP jest zgodny z cyfrą kontrolną
' i zwraca PRAWDA gdy jest i FAŁSZ gdy nie jest.
' Funkcja ignoruje znaki niebędące cyframi w analizowanym ciągu.
' Wynik PRAWDA nie oznacza, że taki NIP istnieje naprawdę i jest
' przypisany do jakiejś firmy.
' jermor (2020) polskie forum Apache OpenOffice i LibreOffice.
'------------------------------------------------------------------------
DIM n as double
DIM w(1 to 9) as integer, i as integer, j as integer
NIP=false
If isMissing(a) then 
	Print "Brak argumentu"
	exit function
End If
If isArray(a) then
	Print "Argument musi być adresem pojedynczej komórki"
	Exit Function
End If
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
j=0 : n=0
for i=1 to len(a)
	if mid(a,i,1) >="0" and mid(a,i,1)<="9" then
		j=j+1
		if j<10 then
			n=n+w(j)*mid(a,i,1)
		elseif j=10 then
			n=n mod 11
				if n=mid(a,i,1) then NIP=true
		elseif j> 10 then
			NIP=False
		end if
	end If
next i
end function
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
ODPOWIEDZ