Przejdź do głównej zawartości

IBAN

Polski IBAN to dwuliterowy prefiks PL połączony z 26-cyfrowym numerem NRB, walidowany sumą kontrolną MOD-97. Użyj Numerik::nrb() dla samego numeru bez prefiksu, Numerik::iban() dla pełnej formy międzynarodowej.

use SlashLab\Numerik\Numerik;
// Walidacja logiczna
Numerik::iban()->isValid('PL61102010260000000000000000'); // true
// Format ze spacjami i małe litery w prefiksie są akceptowane
Numerik::iban()->isValid('PL61 1020 1026 0000 0000 0000 0000'); // true
Numerik::iban()->isValid('pl61102010260000000000000000'); // true
// Samo NRB bez prefiksu jest odrzucane — użyj Numerik::nrb()
Numerik::iban()->isValid('61102010260000000000000000'); // false
// Szczegółowy wynik
$result = Numerik::iban()->validate('PL61102010260000000000000000');
$result->isValid; // true
// Parsowanie do obiektu wartości
$iban = Numerik::iban()->parse('PL61102010260000000000000000');
// null zamiast wyjątku w przypadku błędu
$iban = Numerik::iban()->tryParse('błędne-wejście'); // null

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

MetodaTyp zwracanyOpis
getRaw()stringOryginalne wejście bez zmian.
getNormalized()stringPL + 26 cyfr, np. PL61102010260000000000000000.
__toString()stringIdentyczne z getNormalized().
MetodaTyp zwracanyOpis
getFormatted()stringStandardowy format grupowany: PL61 1020 1026 0000 0000 0000 0000.
MetodaTyp zwracanyOpis
getCountryCode()stringZawsze PL.
getNrb()string26-cyfrowy NRB bez prefiksu kraju.
getCheckDigits()stringDwie cyfry kontrolne MOD-97 (pozycje 3–4 numeru IBAN).
getSortCode()string8-cyfrowy numer rozliczeniowy banku.
getBankCode()stringPierwsze 3 cyfry numeru rozliczeniowego — identyfikator banku.
getAccountNumber()stringOstatnie 16 cyfr — numer rachunku klienta.
$iban = Numerik::iban()->parse('PL61102010260000000000000000');
$iban->getRaw(); // 'PL61102010260000000000000000'
$iban->getNormalized(); // 'PL61102010260000000000000000'
$iban->getFormatted(); // 'PL61 1020 1026 0000 0000 0000 0000'
$iban->getCountryCode(); // 'PL'
$iban->getNrb(); // '61102010260000000000000000'
$iban->getCheckDigits(); // '61'
$iban->getSortCode(); // '10201026'
$iban->getBankCode(); // '102'
$iban->getAccountNumber(); // '0000000000000000'
// Formaty ze spacjami i małymi literami normalizują się do tej samej wartości
$a = Numerik::iban()->parse('PL61102010260000000000000000');
$b = Numerik::iban()->parse('PL61 1020 1026 0000 0000 0000 0000');
$c = Numerik::iban()->parse('pl61102010260000000000000000');
$a->getNormalized() === $b->getNormalized(); // true
$b->getNormalized() === $c->getNormalized(); // true
  1. Usuń spacje i myślniki. Odrzuć wejścia dłuższe niż 40 znaków.
  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 26 cyfr — inaczej błąd InvalidLength.
  4. Zastosuj sumę kontrolną NRB MOD-97 — patrz sekcja Algorytmy.
PrzyczynaWartośćKiedy
InvalidLengthinvalid_lengthCzęść NRB nie ma dokładnie 26 cyfr lub surowe wejście przekracza 40 znaków.
InvalidFormatinvalid_formatBrak prefiksu PL.
InvalidCharactersinvalid_charactersCzęść NRB (po usunięciu spacji i myślników) zawiera znaki niebędące cyframi.
InvalidChecksuminvalid_checksumReszta z MOD-97 nie wynosi 1.
If this saved you time → ☕ Buy me a coffee