Poprawny nr konta bankowego

Na stronie http://phpedia.pl/wiki/Walidacja_numeru_NRB można zobaczyć przykład walidacji w PHP nr konta bankowego. Na tej podstawie zrobiłem dziś walidator w modelu Yii2:

class ZlecenieOsoba extends ActiveRecord {

...

public function rules() {
return [
...
[['nr_konta_bankowego'], 'sprawdzNumerNRB'],
];
}
...

public function sprawdzNumerNRB($attribute, $params, $validator) {
// Usuniecie spacji
$iNRB = str_replace(' ', '', $this->$attribute);
// Sprawdzenie czy przekazany numer zawiera 26 znaków
if (strlen($iNRB) != 26) {
$this->addError($attribute, 'Nr konta musi mieć 26 cyfr' . ' wpisano: ' . strlen($iNRB) . ' cyfr');
return false;
}


// Zdefiniowanie tablicy z wagami poszczególnych cyfr
$aWagiCyfr = array(1, 10, 3, 30, 9, 90, 27, 76, 81, 34, 49, 5, 50, 15, 53, 45, 62, 38, 89, 17, 73, 51, 25, 56, 75, 71, 31, 19, 93, 57);


// Dodanie kodu kraju (w tym przypadku dodajemy kod PL)
$iNRB = $iNRB . '2521';
$iNRB = substr($iNRB, 2) . substr($iNRB, 0, 2);


// Wyzerowanie zmiennej
$iSumaCyfr = 0;


// Pętla obliczająca sumć cyfr w numerze konta
for ($i = 0; $i < 30; $i++) {
$iSumaCyfr += $iNRB[29 - $i] * $aWagiCyfr[$i];
}
// Sprawdzenie czy modulo z sumy wag poszczegolnych cyfr jest rowne 1
if ($iSumaCyfr % 97 !== 1) {
$this->addError($attribute, 'Nieprawidłowy nr konta bankowego. (tylko polskie banki)');
}
}