Przejdź do głównej zawartości

VAT-EU

VAT-EU (Numer VAT UE) to numer identyfikacji podatkowej stosowany w transakcjach wewnątrzunijnych. W przypadku polskich podatników składa się z dwuliterowego prefiksu kraju PL oraz standardowego 10-cyfrowego numeru NIP. Walidacja polega na usunięciu prefiksu i zastosowaniu algorytmu NIP (suma kontrolna MOD-11).

use SlashLab\Numerik\Numerik;
// Walidacja logiczna
Numerik::vatEu()->isValid('PL5260250274'); // true
// Separatory i małe litery w prefiksie są usuwane podczas normalizacji
Numerik::vatEu()->isValid('PL526-025-02-74'); // true
Numerik::vatEu()->isValid('pl5260250274'); // true
// Szczegółowy wynik
$result = Numerik::vatEu()->validate('PL5260250274');
$result->isValid; // true
// Parsowanie do obiektu wartości
$vatEu = Numerik::vatEu()->parse('PL5260250274');
// null zamiast wyjątku w przypadku błędu
$vatEu = Numerik::vatEu()->tryParse('błędne-wejście'); // null

parse() i tryParse() zwracają instancję SlashLab\Numerik\ValueObjects\VatEu.

MetodaTyp zwracanyOpis
getRaw()stringOryginalne wejście bez zmian.
getNormalized()stringPL + 10 cyfr, np. PL5260250274.
__toString()stringIdentyczne z getNormalized().
MetodaTyp zwracanyOpis
getCountryCode()stringZawsze PL.
getNip()string10-cyfrowy NIP bez prefiksu kraju.
getFormatted()stringPL + standardowy format NIP, np. PL526-025-02-74.
$vatEu = Numerik::vatEu()->parse('PL5260250274');
$vatEu->getRaw(); // 'PL5260250274'
$vatEu->getNormalized(); // 'PL5260250274'
$vatEu->getCountryCode(); // 'PL'
$vatEu->getNip(); // '5260250274'
$vatEu->getFormatted(); // 'PL526-025-02-74'
// Separatory są usuwane, prefiks PL jest pisany wielkimi literami
$vatEu = Numerik::vatEu()->parse('pl526-025-02-74');
$vatEu->getRaw(); // 'pl526-025-02-74'
$vatEu->getNormalized(); // 'PL5260250274'
  1. Usuń spacje i myślniki. Odrzuć wejścia dłuższe niż 32 znaki.
  2. Wymagaj, aby pierwsze dwa znaki były PL (bez rozróżniania wielkości liter) — inaczej błąd InvalidFormat.
  3. Usuń prefiks. Wymagaj dokładnie 10 cyfr — inaczej błąd InvalidLength.
  4. Zastosuj sumę kontrolną NIP MOD-11 — patrz sekcja Algorytmy.
PrzyczynaWartośćKiedy
InvalidLengthinvalid_lengthCzęść NIP nie ma dokładnie 10 cyfr lub surowe wejście przekracza 32 znaki.
InvalidFormatinvalid_formatBrak prefiksu PL lub część NIP zaczyna się od 000.
InvalidCharactersinvalid_charactersCzęść NIP zawiera znaki niebędące cyframi.
InvalidChecksuminvalid_checksumCyfra kontrolna MOD-11 nie zgadza się.
AllSameDigitall_same_digitNIP składa się z jednej powtarzającej się cyfry — tylko w trybie ścisłym.
If this saved you time → ☕ Buy me a coffee