Walidator NIP

Sprawdza sumę kontrolną numeru NIP. Liczy w przeglądarce, niczego nie wysyła. Poniżej pokazuje, skąd wziął się wynik.

−30%Program startowy dla 4 pierwszych firm

30% taniej w każdym wariancie. W zamian pokazuję wdrożenie jako przykład na stronie (bez poufnych danych), a Ty wystawiasz opinię w Google.

Porozmawiajmy o Twojej integracji

30 minut w Google Meet. Pokazujesz, jak to działa dziś, a ja mówię, co da się zautomatyzować, jak i za ile.

Umów 30 minut rozmowy →

Termin wybierasz sam w kalendarzu. Bezpłatnie i bez zobowiązań.

Rostyslav HavryliukRozmawiasz bezpośrednio ze mną. Odpowiadam w ciągu jednego dnia roboczego.
01

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.

02

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];
}
03

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.