Walidator NIP
Sprawdza sumę kontrolną numeru NIP. Liczy w przeglądarce, niczego nie wysyła. Poniżej pokazuje, skąd wziął się wynik.
Jak to liczyć
NIP ma 10 cyfr. Pierwsze dziewięć mnożysz kolejno przez wagi 6, 5, 7, 2, 3, 4, 5, 6, 7, iloczyny sumujesz i bierzesz resztę z dzielenia przez 11. Reszta musi być równa dziesiątej cyfrze. Jeśli wychodzi 10, taki NIP jest nieprawidłowy, bo nie da się go zapisać jedną cyfrą.
Suma kontrolna to pierwszy krok, a nie cały. Integracja, która dociąga dane firmy, zwykle idzie dalej: GUS mówi, z jakim podmiotem masz do czynienia, KRS lub CEIDG dają szczegóły, a Biała lista status VAT. Opisałem to w przewodniku po API REGON, a tu widać, jak to wygląda w HubSpot.
Gotowy kod
JavaScript / TypeScript
function isValidNip(input) {
const nip = String(input).replace(/^PL/i, '').replace(/[\s-]/g, '');
if (!/^\d{10}$/.test(nip)) return false;
const w = [6, 5, 7, 2, 3, 4, 5, 6, 7];
const sum = w.reduce((s, x, i) => s + x * Number(nip[i]), 0);
const check = sum % 11;
return check !== 10 && check === Number(nip[9]);
}PHP (np. WooCommerce)
function isValidNip(string $input): bool {
$nip = preg_replace('/[\s-]/', '', preg_replace('/^PL/i', '', $input));
if (!preg_match('/^\d{10}$/', $nip)) return false;
$w = [6, 5, 7, 2, 3, 4, 5, 6, 7];
$sum = 0;
foreach ($w as $i => $x) $sum += $x * (int) $nip[$i];
$check = $sum % 11;
return $check !== 10 && $check === (int) $nip[9];
}Pytania
Czy poprawna suma kontrolna oznacza, że firma istnieje?
Nie. Suma kontrolna wyłapuje literówki i zamienione cyfry, ale nie mówi, czy taki NIP został komukolwiek nadany. Czy firma istnieje, jak się nazywa i jaki ma status VAT, sprawdzisz w rejestrach, na przykład w naszej wyszukiwarce, która łączy Białą listę VAT i KRS.
Czy ten walidator gdzieś wysyła wpisany NIP?
Nie. Całe liczenie odbywa się w Twojej przeglądarce, strona nie wysyła numeru na żaden serwer.
Po co walidować NIP w sklepie albo w CRM?
Żeby literówka nie trafiła na fakturę ani do zapytania do GUS. Przy KSeF faktura dla firmy z błędnym NIP-em zostanie odrzucona albo trafi do niewłaściwego nabywcy, a w integracji z GUS każde zapytanie z błędnym numerem zużywa limit i zwraca pusty wynik. Kilka linijek kodu w formularzu załatwia sprawę, zanim dane pójdą dalej.
Co z prefiksem PL?
NIP to 10 cyfr bez odstępów. Prefiks PL należy do numeru VAT UE, a nie do samego NIP-u, więc walidator go pomija, tak samo jak spacje wklejone razem z numerem: PL1234563218 i 1234563218 to ten sam NIP.