| 1 | <?php
|
|---|
| 2 | /* -----------------------------------------------------------------------------------------
|
|---|
| 3 | $Id: banktransfer_validation.php 4434 2013-02-11 09:05:02Z dokuman $
|
|---|
| 4 |
|
|---|
| 5 | modified eCommerce Shopsoftware
|
|---|
| 6 | http://www.modified-shop.org
|
|---|
| 7 |
|
|---|
| 8 | Copyright (c) 2009 - 2013 [www.modified-shop.org]
|
|---|
| 9 | -----------------------------------------------------------------------------------------
|
|---|
| 10 | based on:
|
|---|
| 11 | (c) 2000-2001 The Exchange Project (earlier name of osCommerce)
|
|---|
| 12 | (c) 2002-2003 osCommerce(banktransfer_validation.php,v 1.17 2003/02/18 18:33:15); www.oscommerce.com
|
|---|
| 13 | (c) 2003 nextcommerce (banktransfer_validation.php,v 1.4 2003/08/1); www.nextcommerce.org
|
|---|
| 14 | (c) 2004 - 2006 fmce.de
|
|---|
| 15 | (c) 2004 - 2006 discus24.de
|
|---|
| 16 | (c) 2006 xt:Commerce
|
|---|
| 17 | (c) 2004 - 2010 Frank Maroke
|
|---|
| 18 | (c) 2010-2011 Nico Sommer
|
|---|
| 19 | (c) 2011-2012 Christian Rothe
|
|---|
| 20 |
|
|---|
| 21 | Released under the GNU General Public License
|
|---|
| 22 | -----------------------------------------------------------------------------------------
|
|---|
| 23 | Third Party contributions:
|
|---|
| 24 | OSC German Banktransfer v0.85a Autor: Dominik Guder <osc@guder.org>
|
|---|
| 25 | Extensioncode: Marcel Bossert-Schwab <info@opensourcecommerce.de> (mbs)
|
|---|
| 26 | New methods 2005 - 2010: Frank Maroke (FrankM) <info@fmce.de>
|
|---|
| 27 | New methods and bug fixes 2010 - 2013: Christian Rothe <buero@laufstar.de>
|
|---|
| 28 |
|
|---|
| 29 | BLZ-Downloadseite der Deutschen Bundesbank:
|
|---|
| 30 | http://www.bundesbank.de/Redaktion/DE/Standardartikel/Kerngeschaeftsfelder/Unbarer_Zahlungsverkehr/bankleitzahlen_download.html
|
|---|
| 31 |
|
|---|
| 32 | Aktuelle Beschreibung der Pruefverfahren:
|
|---|
| 33 | http://www.bundesbank.de/Navigation/DE/Kerngeschaeftsfelder/Unbarer_Zahlungsverkehr/Pruefzifferberechnung/pruefzifferberechnung.html
|
|---|
| 34 |
|
|---|
| 35 | Stand dieses Klassen-Moduls: 9. Dezember 2013
|
|---|
| 36 |
|
|---|
| 37 | Released under the GNU General Public License
|
|---|
| 38 | ---------------------------------------------------------------------------------------*/
|
|---|
| 39 |
|
|---|
| 40 |
|
|---|
| 41 | class AccountCheck {
|
|---|
| 42 |
|
|---|
| 43 | /* Folgende Returncodes werden übergeben */
|
|---|
| 44 | /* */
|
|---|
| 45 | /* 0 -> Kontonummer & BLZ OK */
|
|---|
| 46 | /* 1 -> Kontonummer & BLZ passen nicht */
|
|---|
| 47 | /* 2 -> Für diese Kontonummer ist kein Prüfziffernverfahren definiert */
|
|---|
| 48 | /* 3 -> Dieses Prüfziffernverfahren ist noch nicht implementiert */
|
|---|
| 49 | /* 4 -> Diese Kontonummer ist technisch nicht prüfbar */
|
|---|
| 50 | /* 5 -> BLZ nicht gefunden */
|
|---|
| 51 | /* 8 -> Keine BLZ übergeben */
|
|---|
| 52 | /* 9 -> Keine Kontonummer übergeben */
|
|---|
| 53 | /* 10 -> Kein Kontoinhaber übergeben */
|
|---|
| 54 | /* 128 -> interner Fehler, der zeigt, dass eine Methode nicht implementiert ist */
|
|---|
| 55 | /* */
|
|---|
| 56 |
|
|---|
| 57 | function __construct() {
|
|---|
| 58 | $this->banktransfer_number = ''; // Enthält nach der Prüfung die geprüfte Kontonummer
|
|---|
| 59 | $this->banktransfer_blz = ''; // Enthält nach der Prüfung die geprüfte BLZ
|
|---|
| 60 | $this->Bankname = ''; // Enthält nach der Prüfung den Namen der Bank bei der Suche nach BLZ
|
|---|
| 61 | $this->PRZ = ''; //Enthält nach der Prüfung die Prüfziffer
|
|---|
| 62 | $this->checkmode = 'classic'; //
|
|---|
| 63 | }
|
|---|
| 64 |
|
|---|
| 65 | var $Bankname; // Enthält den Namen der Bank bei der Suche nach BLZ
|
|---|
| 66 | var $PRZ; //Enthält die Prüfziffer
|
|---|
| 67 |
|
|---|
| 68 | ////
|
|---|
| 69 | // Diese Funktion gibt die Bankinformationen aus der csv-Datei zurück*/
|
|---|
| 70 | function csv_query($blz) {
|
|---|
| 71 | $cdata = -1;
|
|---|
| 72 | $fp = fopen(DIR_WS_INCLUDES . 'data/blz.csv', 'r');
|
|---|
| 73 | while ($data = fgetcsv($fp, 1024, ";")) {
|
|---|
| 74 | if ($data[0] == $blz){
|
|---|
| 75 | $cdata = array ('blz' => $data[0],
|
|---|
| 76 | 'bankname' => $data[1],
|
|---|
| 77 | 'prz' => $data[2]);
|
|---|
| 78 | }
|
|---|
| 79 | }
|
|---|
| 80 | return $cdata;
|
|---|
| 81 | }
|
|---|
| 82 |
|
|---|
| 83 | ////
|
|---|
| 84 | // Diese Funktion gibt die Bankinformationen aus der Datenbank zurück*/
|
|---|
| 85 | function db_query($blz) {
|
|---|
| 86 | $blz_query = xtc_db_query("SELECT * from ".TABLE_BANKTRANSFER_BLZ." WHERE blz = '" . xtc_db_input($blz) . "'");
|
|---|
| 87 | if (xtc_db_num_rows($blz_query)){
|
|---|
| 88 | $data = xtc_db_fetch_array ($blz_query);
|
|---|
| 89 | }else
|
|---|
| 90 | $data = -1;
|
|---|
| 91 | return $data;
|
|---|
| 92 | }
|
|---|
| 93 |
|
|---|
| 94 | ////
|
|---|
| 95 | // Diese Funktion gibt die Bankinformationen aus der Datenbank zurück*/
|
|---|
| 96 | function query($blz) {
|
|---|
| 97 | if (MODULE_PAYMENT_BANKTRANSFER_DATABASE_BLZ == 'true' && defined(MODULE_PAYMENT_BANKTRANSFER_DATABASE_BLZ))
|
|---|
| 98 | $data = $this->db_query($blz);
|
|---|
| 99 | else
|
|---|
| 100 | $data = $this->csv_query($blz);
|
|---|
| 101 | return $data;
|
|---|
| 102 | }
|
|---|
| 103 |
|
|---|
| 104 | ////
|
|---|
| 105 | // Diese Funktion gibt die Einer einer Zahl zwischen 0 und 99 zurueck.
|
|---|
| 106 | private function OnlyOne($Digit) {
|
|---|
| 107 | return $Digit = $Digit % 10;
|
|---|
| 108 | } /* End of OnlyOne */
|
|---|
| 109 |
|
|---|
| 110 | // Diese Funktion berechnet die Quersumme einer Zahl zwischen 0 und 99.
|
|---|
| 111 | private function CrossSum($Digit) {
|
|---|
| 112 | $CrossSum = $Digit;
|
|---|
| 113 | if ($Digit > 9) {
|
|---|
| 114 | $Help1 = substr($Digit,0,1);
|
|---|
| 115 | $Help2 = substr($Digit,1,1);
|
|---|
| 116 | $CrossSum = (int) $Help1 + (int) $Help2;
|
|---|
| 117 | }
|
|---|
| 118 | return $CrossSum;
|
|---|
| 119 | } /* End of CrossSum */
|
|---|
| 120 |
|
|---|
| 121 | // Auffüllen der Konto-Nr. mit '0' auf 10 Stellen.
|
|---|
| 122 | public function ExpandAccount($AccountNo) {
|
|---|
| 123 | $AccountNo = str_pad($AccountNo, 10, "0", STR_PAD_LEFT);
|
|---|
| 124 |
|
|---|
| 125 | while (strlen($AccountNo) > 10) {
|
|---|
| 126 | $AccountNo = substr($AccountNo, 1);
|
|---|
| 127 | }
|
|---|
| 128 | return $AccountNo;
|
|---|
| 129 | } /* End of ExpandAccount */
|
|---|
| 130 |
|
|---|
| 131 | // Erweiterte ExpandAccount fuer Methode C5:
|
|---|
| 132 | // Entfernt die führenden Nullen einer Kontonummer
|
|---|
| 133 | // und gibt den Integer zusammen mit der Laenge zurueck.
|
|---|
| 134 | private function ExpandAccountExtended($AccountNo) {
|
|---|
| 135 | $AccountNoLong = $this->ExpandAccount($AccountNo);
|
|---|
| 136 | $AccountNoShort = ltrim($AccountNoLong, "0");
|
|---|
| 137 | $AccountNoShortLen = strlen($AccountNoShort);
|
|---|
| 138 | $aAccountNo = array(
|
|---|
| 139 | 'AccountNoLong' => $AccountNoLong,
|
|---|
| 140 | 'AccountNoShort' => $AccountNoShort,
|
|---|
| 141 | 'AccountNoShortLen' => $AccountNoShortLen,
|
|---|
| 142 | );
|
|---|
| 143 | return $aAccountNo;
|
|---|
| 144 | } /* End of ExpandAccountExtended */
|
|---|
| 145 |
|
|---|
| 146 |
|
|---|
| 147 | /* --- Changed FrankM 20061206, 20070822, 20080717, 20100602 --- */
|
|---|
| 148 | /* --- Changed Christian Rothe 20110606 --- */
|
|---|
| 149 | private function Method00($AccountNo, $Significance, $Checkpoint, $Modulator=10, $LeaveCheckpoint=0, $DoNotExpand=0, $ChecksumCalcMethod = '') {
|
|---|
| 150 | $Help = 0;
|
|---|
| 151 | $Method00 = 1;
|
|---|
| 152 |
|
|---|
| 153 | // Methoden der Bundesbank C6 und D1 uebergeben die finale Kontonummer, $DoNotExpand = 1.
|
|---|
| 154 | if ($DoNotExpand == 0) {
|
|---|
| 155 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 156 | }
|
|---|
| 157 |
|
|---|
| 158 | // Pruefziffer ermitteln..
|
|---|
| 159 | $PNumber = substr($AccountNo, $Checkpoint-1, 1);
|
|---|
| 160 |
|
|---|
| 161 | // Sonderfall Methoden der Bundesbank C6 und D1, zur Pruefung letzte Stelle entfernen.
|
|---|
| 162 | if ($Checkpoint == 16) {
|
|---|
| 163 | $AccountNo = substr($AccountNo, 0, -1);
|
|---|
| 164 | }
|
|---|
| 165 |
|
|---|
| 166 | if ($LeaveCheckpoint == 0) {
|
|---|
| 167 | for ($Run = 0; $Run < strlen($Significance); $Run++) {
|
|---|
| 168 | $Help += $this->CrossSum(substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 169 | }
|
|---|
| 170 | // Sonderfall fuer Methode 57
|
|---|
| 171 | }else{
|
|---|
| 172 | $HelpFirst = substr($AccountNo,0,2);
|
|---|
| 173 | $HelpCheckP = substr($AccountNo,($Checkpoint - 1),1);
|
|---|
| 174 | $HelpSecond = substr($AccountNo,3,7);
|
|---|
| 175 | $AccountNo = $HelpFirst . $HelpSecond . $HelpCheckP;
|
|---|
| 176 | for ($Run = 0; $Run < strlen($Significance); $Run++) {
|
|---|
| 177 | $Help += $this->CrossSum(substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 178 | }
|
|---|
| 179 | }
|
|---|
| 180 |
|
|---|
| 181 | // Sonderfall fuer Methode E0
|
|---|
| 182 | if ($ChecksumCalcMethod == 'E0') {
|
|---|
| 183 | $Help += 7;
|
|---|
| 184 | }
|
|---|
| 185 |
|
|---|
| 186 | $Help = $Help % $Modulator;
|
|---|
| 187 |
|
|---|
| 188 | if ($ChecksumCalcMethod == 'D7') {
|
|---|
| 189 | $Checksum = $Help;
|
|---|
| 190 | } else {
|
|---|
| 191 | $Checksum = $Modulator - $Help;
|
|---|
| 192 | }
|
|---|
| 193 |
|
|---|
| 194 | if ($Checksum == $Modulator) {
|
|---|
| 195 | $Checksum = 0;
|
|---|
| 196 | }
|
|---|
| 197 |
|
|---|
| 198 | if ($Checksum == $PNumber) {
|
|---|
| 199 | $Method00 = 0;
|
|---|
| 200 | }
|
|---|
| 201 |
|
|---|
| 202 | return $Method00;
|
|---|
| 203 | } /* End of Method00 */
|
|---|
| 204 |
|
|---|
| 205 |
|
|---|
| 206 | private function Method01($AccountNo, $Significance) {
|
|---|
| 207 | $Help = 0;
|
|---|
| 208 | $Method01 = 1;
|
|---|
| 209 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 210 | for ($Run = 0; $Run < strlen($Significance); $Run++) {
|
|---|
| 211 | $Help += substr($AccountNo,$Run,1) * substr($Significance,$Run,1);
|
|---|
| 212 | }
|
|---|
| 213 | $Help = $this->OnlyOne($Help);
|
|---|
| 214 | $Checksum = 10 - $Help;
|
|---|
| 215 |
|
|---|
| 216 | if ($Checksum == 10) {
|
|---|
| 217 | $Checksum = 0;
|
|---|
| 218 | }
|
|---|
| 219 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 220 | $Method01 = 0;
|
|---|
| 221 | }
|
|---|
| 222 | return $Method01;
|
|---|
| 223 | } /* End of Method01 */
|
|---|
| 224 |
|
|---|
| 225 |
|
|---|
| 226 | private function Method02($AccountNo , $Significance, $Modified) {
|
|---|
| 227 | $Help = 0;
|
|---|
| 228 | $Method02 = 1;
|
|---|
| 229 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 230 | switch ($Modified) {
|
|---|
| 231 | case FALSE :
|
|---|
| 232 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 233 | $Help += substr($AccountNo,$Run,1) * substr($Significance,$Run,1);
|
|---|
| 234 | }
|
|---|
| 235 | break;
|
|---|
| 236 | case TRUE :
|
|---|
| 237 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 238 | $Help += substr($AccountNo,$Run,1) * HexDec(substr($Significance,$Run,1));
|
|---|
| 239 | }
|
|---|
| 240 | break;
|
|---|
| 241 | }
|
|---|
| 242 | $Help = $Help % 11;
|
|---|
| 243 | if ($Help == 0) {
|
|---|
| 244 | $Help = 11;
|
|---|
| 245 | }
|
|---|
| 246 | if ($Help <> 1) {
|
|---|
| 247 | $Checksum = 11 - $Help;
|
|---|
| 248 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 249 | $Method02 = 0;
|
|---|
| 250 | }
|
|---|
| 251 | }
|
|---|
| 252 | return $Method02;
|
|---|
| 253 | } /* End of Method02 */
|
|---|
| 254 |
|
|---|
| 255 | /* --- Hotfix FrankM 20081208 --- */
|
|---|
| 256 | private function Method06($AccountNo, $Significance, $Modified, $Checkpoint, $Modulator) {
|
|---|
| 257 | $Help = 0;
|
|---|
| 258 | $Method06 = 1;
|
|---|
| 259 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 260 | switch ($Modified) {
|
|---|
| 261 | case FALSE :
|
|---|
| 262 | for ($Run = 0; $Run < strlen($Significance);$Run++) {
|
|---|
| 263 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 264 | }
|
|---|
| 265 | break;
|
|---|
| 266 | case TRUE :
|
|---|
| 267 | for ($Run = 0; $Run < strlen($Significance);$Run++) {
|
|---|
| 268 | $Help += (substr($AccountNo,$Run,1) * HexDec(substr($Significance,$Run,1)));
|
|---|
| 269 | }
|
|---|
| 270 | break;
|
|---|
| 271 | }
|
|---|
| 272 | $Help = $Help % $Modulator;
|
|---|
| 273 | $Checksum = $Modulator - $Help;
|
|---|
| 274 | // Bedingung bei Modulator 7
|
|---|
| 275 | /* --- Fix by Christian Rothe 20110327 --- */
|
|---|
| 276 | if ($Help == 0 && $Modulator == 7) {
|
|---|
| 277 | $Checksum = 0;
|
|---|
| 278 | }
|
|---|
| 279 | // Bedingung bei Modulator 11
|
|---|
| 280 | if ($Help < 2 && $Modulator == 11) {
|
|---|
| 281 | $Checksum = 0;
|
|---|
| 282 | }
|
|---|
| 283 | if ($Checksum == substr($AccountNo,$Checkpoint-1,1)) {
|
|---|
| 284 | $Method06 = 0;
|
|---|
| 285 | }
|
|---|
| 286 | return $Method06;
|
|---|
| 287 | } /* End of Method06 */
|
|---|
| 288 |
|
|---|
| 289 | private function Method16($AccountNo , $Significance, $Checkpoint) {
|
|---|
| 290 | $Help = 0;
|
|---|
| 291 | $Method16 = 1;
|
|---|
| 292 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 293 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 294 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 295 | }
|
|---|
| 296 | $Help = $Help % 11;
|
|---|
| 297 | $Checksum = 11 - $Help;
|
|---|
| 298 | if ($Help == 0) {
|
|---|
| 299 | $Checksum = 0;
|
|---|
| 300 | }
|
|---|
| 301 | if ($Checksum == substr($AccountNo,$Checkpoint-1,1)) {
|
|---|
| 302 | $Method16 = 0;
|
|---|
| 303 | }
|
|---|
| 304 | if ($Help == 1) {
|
|---|
| 305 | if ($Checksum == substr($AccountNo,$Checkpoint - 2,1)) {
|
|---|
| 306 | $Method16 = 0;
|
|---|
| 307 | }
|
|---|
| 308 | }
|
|---|
| 309 | return $Method16;
|
|---|
| 310 | } /* End of Method16 */
|
|---|
| 311 |
|
|---|
| 312 | private function Method90($AccountNo , $Significance ,$Checkpoint, $Modulator) {
|
|---|
| 313 | $Help = 0;
|
|---|
| 314 | $Method90 = 1;
|
|---|
| 315 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 316 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 317 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 318 | }
|
|---|
| 319 | $Help = $Help % $Modulator;
|
|---|
| 320 | $Checksum = $Modulator - $Help;
|
|---|
| 321 | if ($Help == 0) {
|
|---|
| 322 | $Checksum = 0;
|
|---|
| 323 | }
|
|---|
| 324 | if ($Checksum == substr($AccountNo,$Checkpoint -1, 1)) {
|
|---|
| 325 | $Method90 = 0;
|
|---|
| 326 | }
|
|---|
| 327 | return $Method90;
|
|---|
| 328 | } /* End of Method90 */
|
|---|
| 329 |
|
|---|
| 330 |
|
|---|
| 331 | /* ----- Endgueltige Funktionen der einzelnen Berechnungsmethoden. ---- */
|
|---|
| 332 |
|
|---|
| 333 | private function Mark00($AccountNo) {
|
|---|
| 334 | $Mark00 = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 335 | return $Mark00;
|
|---|
| 336 | } /* End of Mark00 */
|
|---|
| 337 |
|
|---|
| 338 | private function Mark01($AccountNo) {
|
|---|
| 339 | $Mark01 = $this->Method01($AccountNo, '173173173');
|
|---|
| 340 | return $Mark01;
|
|---|
| 341 | } /* End of Mark01 */
|
|---|
| 342 |
|
|---|
| 343 | private function Mark02($AccountNo) {
|
|---|
| 344 | $Mark02 = $this->Method02($AccountNo, '298765432', FALSE);
|
|---|
| 345 | return $Mark02;
|
|---|
| 346 | } /* End of Mark02 */
|
|---|
| 347 |
|
|---|
| 348 | private function Mark03($AccountNo) {
|
|---|
| 349 | $Mark03 = $this->Method01($AccountNo, '212121212');
|
|---|
| 350 | return $Mark03;
|
|---|
| 351 | } /* End of Mark03 */
|
|---|
| 352 |
|
|---|
| 353 | private function Mark04($AccountNo) {
|
|---|
| 354 | $Mark04 = $this->Method02($AccountNo, '432765432', FALSE);
|
|---|
| 355 | return $Mark04;
|
|---|
| 356 | } /* End of Mark04 */
|
|---|
| 357 |
|
|---|
| 358 | private function Mark05($AccountNo) {
|
|---|
| 359 | $Mark05 = $this->Method01($AccountNo, '137137137');
|
|---|
| 360 | return $Mark05;
|
|---|
| 361 | } /* End of Mark05 */
|
|---|
| 362 |
|
|---|
| 363 | private function Mark06($AccountNo) {
|
|---|
| 364 | $Mark06 = $this->Method06($AccountNo, '432765432', FALSE, 10, 11);
|
|---|
| 365 | return $Mark06;
|
|---|
| 366 | } /* End of Mark06 */
|
|---|
| 367 |
|
|---|
| 368 | private function Mark07($AccountNo) {
|
|---|
| 369 | $Mark07 = $this->Method02($AccountNo, 'A98765432', TRUE);
|
|---|
| 370 | return $Mark07;
|
|---|
| 371 | } /* End of Mark07 */
|
|---|
| 372 |
|
|---|
| 373 | private function Mark08($AccountNo) {
|
|---|
| 374 | $Mark08 = 1;
|
|---|
| 375 | if ($AccountNo > 60000) {
|
|---|
| 376 | $Mark08 = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 377 | }
|
|---|
| 378 | return $Mark08;
|
|---|
| 379 | } /* End of Mark08 */
|
|---|
| 380 |
|
|---|
| 381 | // Kein Pruefziffernverfahren vorhanden.
|
|---|
| 382 | // Kontonummer ist aktuell bei der Implementierung immer als RICHTIG zu beurteilen.
|
|---|
| 383 | private function Mark09($AccountNo) {
|
|---|
| 384 | $Mark09 = 2;
|
|---|
| 385 | return $Mark09;
|
|---|
| 386 | } /* End of Mark09 */
|
|---|
| 387 |
|
|---|
| 388 | private function Mark10($AccountNo) {
|
|---|
| 389 | $Mark10 = $this->Method06($AccountNo, 'A98765432', TRUE, 10, 11);
|
|---|
| 390 | return $Mark10;
|
|---|
| 391 | } /* End of Mark10 */
|
|---|
| 392 |
|
|---|
| 393 | private function Mark11($AccountNo) {
|
|---|
| 394 | $Significance = 'A98765432';
|
|---|
| 395 | $Help = 0;
|
|---|
| 396 | $Mark11 = 1;
|
|---|
| 397 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 398 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 399 | $Help += (substr($AccountNo,$Run,1) * HexDec(substr($Significance,$Run,1)));
|
|---|
| 400 | }
|
|---|
| 401 | $Help = $Help % 11;
|
|---|
| 402 | $Checksum = 11 - $Help;
|
|---|
| 403 | if ($Help == 0) {
|
|---|
| 404 | $Checksum = 0;
|
|---|
| 405 | }
|
|---|
| 406 | if ($Help == 1) {
|
|---|
| 407 | $Checksum = 9;
|
|---|
| 408 | }
|
|---|
| 409 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 410 | $Mark11 = 0;
|
|---|
| 411 | }
|
|---|
| 412 | return $Mark11;
|
|---|
| 413 | } /* End of Mark11 */
|
|---|
| 414 |
|
|---|
| 415 | private function Mark12($AccountNo) {
|
|---|
| 416 | $Mark12 = $this->Method01($AccountNo, '731731731');
|
|---|
| 417 | return $Mark12;
|
|---|
| 418 | } /* End of Mark12 */
|
|---|
| 419 |
|
|---|
| 420 | private function Mark13($AccountNo) {
|
|---|
| 421 | $Help = $this->Method00($AccountNo, '0121212', 8);
|
|---|
| 422 | if ($Help == 1) {
|
|---|
| 423 | if (Substr($AccountNo,-2) <> '00') {
|
|---|
| 424 | $Help = $this->Method00(substr($this->ExpandAccount($AccountNo), 2) . '00', '0121212', 8);
|
|---|
| 425 | }
|
|---|
| 426 | }
|
|---|
| 427 | $Mark13 = $Help;
|
|---|
| 428 | return $Mark13;
|
|---|
| 429 | } /* End of Mark13 */
|
|---|
| 430 |
|
|---|
| 431 | private function Mark14($AccountNo) {
|
|---|
| 432 | $Mark14 = $this->Method02($AccountNo, '000765432', FALSE);
|
|---|
| 433 | return $Mark14;
|
|---|
| 434 | } /* End of Mark14 */
|
|---|
| 435 |
|
|---|
| 436 | private function Mark15($AccountNo) {
|
|---|
| 437 | $Mark15 = $this->Method06($AccountNo, '000005432', FALSE, 10, 11);
|
|---|
| 438 | return $Mark15;
|
|---|
| 439 | } /* End of Mark15 */
|
|---|
| 440 |
|
|---|
| 441 | private function Mark16($AccountNo) {
|
|---|
| 442 | $Mark16 = $this->Method16($AccountNo, '432765432', 10);
|
|---|
| 443 | return $Mark16;
|
|---|
| 444 | } /* End of Mark16 */
|
|---|
| 445 |
|
|---|
| 446 | private function Mark17($AccountNo) {
|
|---|
| 447 | $Significance = '0121212';
|
|---|
| 448 | $Help = 0;
|
|---|
| 449 | $Help2 = 1;
|
|---|
| 450 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 451 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 452 | $Help += ($this->CrossSum(substr($AccountNo,$Run,1) * substr($Significance,$Run,1)));
|
|---|
| 453 | }
|
|---|
| 454 | $Help = $Help -1;
|
|---|
| 455 | $Checksum = $Help % 11;
|
|---|
| 456 | $Checksum = 10 - $Checksum;
|
|---|
| 457 | if ($Checksum == 10) {
|
|---|
| 458 | $Checksum = 0;
|
|---|
| 459 | }
|
|---|
| 460 | if ($Checksum == substr($AccountNo,7,1)) {
|
|---|
| 461 | $Help2 = 0;
|
|---|
| 462 | }
|
|---|
| 463 | $Mark17 = $Help2;
|
|---|
| 464 | return $Mark17;
|
|---|
| 465 | } /* End of Mark17 */
|
|---|
| 466 |
|
|---|
| 467 | private function Mark18($AccountNo) {
|
|---|
| 468 | $Mark18 = $this->Method01($AccountNo, '317931793');
|
|---|
| 469 | return $Mark18;
|
|---|
| 470 | } /* End of Mark18 */
|
|---|
| 471 |
|
|---|
| 472 | private function Mark19($AccountNo) {
|
|---|
| 473 | $Mark19 = $this->Method06($AccountNo, '198765432', FALSE, 10, 11);
|
|---|
| 474 | return $Mark19;
|
|---|
| 475 | } /* End of Mark19 */
|
|---|
| 476 |
|
|---|
| 477 | private function Mark20($AccountNo) {
|
|---|
| 478 | $Mark20 = $this->Method06($AccountNo, '398765432', FALSE, 10, 11);
|
|---|
| 479 |
|
|---|
| 480 | return $Mark20;
|
|---|
| 481 | } /* End of Mark20 */
|
|---|
| 482 |
|
|---|
| 483 | // --- Fix FrankM 20080717 ---
|
|---|
| 484 | private function Mark21($AccountNo) {
|
|---|
| 485 | // Initialisierung
|
|---|
| 486 | $Significance = '212121212';
|
|---|
| 487 | $Help = 0;
|
|---|
| 488 | $Mark21 = 1;
|
|---|
| 489 | // Kontonummer auf zehn Stellen auffuellen.
|
|---|
| 490 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 491 | // Quersumme aus Produkten bilden.
|
|---|
| 492 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 493 | $Help += $this->CrossSum(substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 494 | }
|
|---|
| 495 | // Daraus erneut Quersumme bilden bis diese einstellig ist.
|
|---|
| 496 | while (strlen($Help) > 1){
|
|---|
| 497 | $Help = $this->CrossSum($Help);
|
|---|
| 498 | }
|
|---|
| 499 | // Quersumme von 10 subtrahieren = Pruefziffer
|
|---|
| 500 | $Checksum = 10 - $Help;
|
|---|
| 501 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 502 | $Mark21 = 0;
|
|---|
| 503 | }
|
|---|
| 504 | return $Mark21;
|
|---|
| 505 | } /* End of Mark21 */
|
|---|
| 506 |
|
|---|
| 507 | private function Mark22($AccountNo) {
|
|---|
| 508 | $Significance = '313131313';
|
|---|
| 509 | $Help = 0;
|
|---|
| 510 | $Mark22 = 1;
|
|---|
| 511 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 512 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 513 | $Zwischenwert = (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 514 | $Help += $this->OnlyOne($Zwischenwert);
|
|---|
| 515 | }
|
|---|
| 516 | $Checksum = ceil($Help/10)*10 - $Help;
|
|---|
| 517 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 518 | $Mark22 = 0;
|
|---|
| 519 | }
|
|---|
| 520 | return $Mark22;
|
|---|
| 521 | } /* End of Mark22 */
|
|---|
| 522 |
|
|---|
| 523 | private function Mark23($AccountNo) {
|
|---|
| 524 | $Mark23 = $this->Method16($AccountNo, '765432', 7);
|
|---|
| 525 | return $Mark23;
|
|---|
| 526 | } /* End of Mark23 */
|
|---|
| 527 |
|
|---|
| 528 | private function Mark24($AccountNo) {
|
|---|
| 529 | $Significance = '123123123';
|
|---|
| 530 | $Help = 0;
|
|---|
| 531 | $Mark24 = 1;
|
|---|
| 532 | switch (substr($AccountNo,0,1)) {
|
|---|
| 533 | case 3 :
|
|---|
| 534 | case 4 :
|
|---|
| 535 | case 5 :
|
|---|
| 536 | case 6 :
|
|---|
| 537 | // deaktiviert, da die Postbank diese Definition nicht einhaelt.
|
|---|
| 538 | //$AccountNo = Substr($AccountNo,1);
|
|---|
| 539 | break;
|
|---|
| 540 | case 9 :
|
|---|
| 541 | // $AccountNo = SubStr($AccountNo,3);
|
|---|
| 542 | break;
|
|---|
| 543 | }
|
|---|
| 544 | while (substr($AccountNo,0,1)==0){
|
|---|
| 545 | $AccountNo = substr($AccountNo,1);
|
|---|
| 546 | }
|
|---|
| 547 |
|
|---|
| 548 | for ($Run = 0;$Run < strlen($AccountNo)-1;$Run++ ) {
|
|---|
| 549 | $ZwischenHilf = substr($AccountNo,$Run,1) * substr($Significance,$Run,1) + substr($Significance,$Run,1);
|
|---|
| 550 | $Help += $ZwischenHilf % 11;
|
|---|
| 551 | }
|
|---|
| 552 |
|
|---|
| 553 | $Checksum = $this->OnlyOne($Help);
|
|---|
| 554 |
|
|---|
| 555 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 556 | $Mark24 = 0;
|
|---|
| 557 | }
|
|---|
| 558 | return $Mark24;
|
|---|
| 559 | } /* End of Mark24 */
|
|---|
| 560 |
|
|---|
| 561 | private function Mark25($AccountNo) {
|
|---|
| 562 | $Significance = '098765432';
|
|---|
| 563 | $Falsch = FALSE;
|
|---|
| 564 | $Help = 0;
|
|---|
| 565 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 566 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 567 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 568 | }
|
|---|
| 569 | $Help = $Help % 11;
|
|---|
| 570 | $Checksum = 11 - $Help;
|
|---|
| 571 | if ($Checksum == 11) {
|
|---|
| 572 | $Checksum = 0;
|
|---|
| 573 | }
|
|---|
| 574 | if ($Checksum == 10) {
|
|---|
| 575 | $Checksum = 0;
|
|---|
| 576 | if ((substr($AccountNo,1,1) <> '8') and (substr($AccountNo,1,1) <> '9')) {
|
|---|
| 577 | $Mark25 = 1;
|
|---|
| 578 | $Falsch = TRUE;
|
|---|
| 579 | }
|
|---|
| 580 | }
|
|---|
| 581 | if ($Falsch == FALSE) {
|
|---|
| 582 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 583 | $Mark25 = 0;
|
|---|
| 584 | } else {
|
|---|
| 585 | $Mark25 = 1;
|
|---|
| 586 | }
|
|---|
| 587 | }
|
|---|
| 588 | return $Mark25;
|
|---|
| 589 | } /* End of Mark25 */
|
|---|
| 590 |
|
|---|
| 591 | private function Mark26($AccountNo) {
|
|---|
| 592 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 593 | if (Substr($AccountNo,-2) == '00') {
|
|---|
| 594 | $AccountNo = Substr($AccountNo,2) . '00';
|
|---|
| 595 | }
|
|---|
| 596 | $Mark26 = $this->Method06($AccountNo,'2345672',FALSE,8,11);
|
|---|
| 597 | return $Mark26;
|
|---|
| 598 | } /* End of Mark26 */
|
|---|
| 599 |
|
|---|
| 600 | private function Mark27($AccountNo) {
|
|---|
| 601 | if ((int)$AccountNo <= 999999999.) {
|
|---|
| 602 | $Mark27 = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 603 | } else {
|
|---|
| 604 | $Mark27 = $this->Mark29($AccountNo);
|
|---|
| 605 | }
|
|---|
| 606 | return $Mark27;
|
|---|
| 607 | } /* End of Mark27 */
|
|---|
| 608 |
|
|---|
| 609 | private function Mark28($AccountNo) {
|
|---|
| 610 | $Mark28 = $this->Method06($AccountNo, '8765432', FALSE, 8, 11);
|
|---|
| 611 | return $Mark28;
|
|---|
| 612 | } /* End of Mark28 */
|
|---|
| 613 |
|
|---|
| 614 | /* --- Hotfix FrankM 20081208 --- */
|
|---|
| 615 | /* --- Fix Christian Rothe 20110606 --- */
|
|---|
| 616 | private function Mark29($AccountNo) {
|
|---|
| 617 | $Transform = '143214321';
|
|---|
| 618 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 619 | $Help = 0;
|
|---|
| 620 | for ($Run = 0;$Run < strlen($Transform);$Run++) {
|
|---|
| 621 | $ToAdd = 0;
|
|---|
| 622 | switch (substr($Transform,$Run,1)) {
|
|---|
| 623 | case '1' :
|
|---|
| 624 | switch (substr($AccountNo,$Run,1)) {
|
|---|
| 625 | Case '0' :
|
|---|
| 626 | $ToAdd = 0;
|
|---|
| 627 | break;
|
|---|
| 628 | Case '1' :
|
|---|
| 629 | $ToAdd = 1;
|
|---|
| 630 | break;
|
|---|
| 631 | Case '2' :
|
|---|
| 632 | $ToAdd = 5;
|
|---|
| 633 | break;
|
|---|
| 634 | Case '3' :
|
|---|
| 635 | $ToAdd = 9;
|
|---|
| 636 | break;
|
|---|
| 637 | Case '4' :
|
|---|
| 638 | $ToAdd = 3;
|
|---|
| 639 | break;
|
|---|
| 640 | Case '5' :
|
|---|
| 641 | $ToAdd = 7;
|
|---|
| 642 | break;
|
|---|
| 643 | Case '6' :
|
|---|
| 644 | $ToAdd = 4;
|
|---|
| 645 | break;
|
|---|
| 646 | Case '7' :
|
|---|
| 647 | $ToAdd = 8;
|
|---|
| 648 | break;
|
|---|
| 649 | Case '8' :
|
|---|
| 650 | $ToAdd = 2;
|
|---|
| 651 | break;
|
|---|
| 652 | Case '9' :
|
|---|
| 653 | $ToAdd = 6;
|
|---|
| 654 | break;
|
|---|
| 655 | }
|
|---|
| 656 | break;
|
|---|
| 657 | case '2' :
|
|---|
| 658 | switch (substr($AccountNo,$Run,1)) {
|
|---|
| 659 | Case '0' :
|
|---|
| 660 | $ToAdd = 0;
|
|---|
| 661 | break;
|
|---|
| 662 | Case '1' :
|
|---|
| 663 | $ToAdd = 1;
|
|---|
| 664 | break;
|
|---|
| 665 | Case '2' :
|
|---|
| 666 | $ToAdd = 7;
|
|---|
| 667 | break;
|
|---|
| 668 | Case '3' :
|
|---|
| 669 | $ToAdd = 6;
|
|---|
| 670 | break;
|
|---|
| 671 | Case '4' :
|
|---|
| 672 | $ToAdd = 9;
|
|---|
| 673 | break;
|
|---|
| 674 | Case '5' :
|
|---|
| 675 | $ToAdd = 8;
|
|---|
| 676 | break;
|
|---|
| 677 | Case '6' :
|
|---|
| 678 | $ToAdd = 3;
|
|---|
| 679 | break;
|
|---|
| 680 | Case '7' :
|
|---|
| 681 | $ToAdd = 2;
|
|---|
| 682 | break;
|
|---|
| 683 | Case '8' :
|
|---|
| 684 | $ToAdd = 5;
|
|---|
| 685 | break;
|
|---|
| 686 | Case '9' :
|
|---|
| 687 | $ToAdd = 4;
|
|---|
| 688 | break;
|
|---|
| 689 | }
|
|---|
| 690 | break;
|
|---|
| 691 | case '3' :
|
|---|
| 692 | switch (substr($AccountNo,$Run,1)) {
|
|---|
| 693 | Case '0' :
|
|---|
| 694 | $ToAdd = 0;
|
|---|
| 695 | break;
|
|---|
| 696 | Case '1' :
|
|---|
| 697 | $ToAdd = 1;
|
|---|
| 698 | break;
|
|---|
| 699 | Case '2' :
|
|---|
| 700 | $ToAdd = 8;
|
|---|
| 701 | break;
|
|---|
| 702 | Case '3' :
|
|---|
| 703 | $ToAdd = 4;
|
|---|
| 704 | break;
|
|---|
| 705 | Case '4' :
|
|---|
| 706 | $ToAdd = 6;
|
|---|
| 707 | break;
|
|---|
| 708 | Case '5' :
|
|---|
| 709 | $ToAdd = 2;
|
|---|
| 710 | break;
|
|---|
| 711 | Case '6' :
|
|---|
| 712 | $ToAdd = 9;
|
|---|
| 713 | break;
|
|---|
| 714 | Case '7' :
|
|---|
| 715 | $ToAdd = 5;
|
|---|
| 716 | break;
|
|---|
| 717 | Case '8' :
|
|---|
| 718 | $ToAdd = 7;
|
|---|
| 719 | break;
|
|---|
| 720 | Case '9' :
|
|---|
| 721 | $ToAdd = 3;
|
|---|
| 722 | break;
|
|---|
| 723 | }
|
|---|
| 724 | break;
|
|---|
| 725 | case '4' :
|
|---|
| 726 | switch (substr($AccountNo,$Run,1)) {
|
|---|
| 727 | Case '0' :
|
|---|
| 728 | $ToAdd = 0;
|
|---|
| 729 | break;
|
|---|
| 730 | Case '1' :
|
|---|
| 731 | $ToAdd = 1;
|
|---|
| 732 | break;
|
|---|
| 733 | Case '2' :
|
|---|
| 734 | $ToAdd = 2;
|
|---|
| 735 | break;
|
|---|
| 736 | Case '3' :
|
|---|
| 737 | $ToAdd = 3;
|
|---|
| 738 | break;
|
|---|
| 739 | Case '4' :
|
|---|
| 740 | $ToAdd = 4;
|
|---|
| 741 | break;
|
|---|
| 742 | Case '5' :
|
|---|
| 743 | $ToAdd = 5;
|
|---|
| 744 | break;
|
|---|
| 745 | Case '6' :
|
|---|
| 746 | $ToAdd = 6;
|
|---|
| 747 | break;
|
|---|
| 748 | Case '7' :
|
|---|
| 749 | $ToAdd = 7;
|
|---|
| 750 | break;
|
|---|
| 751 | Case '8' :
|
|---|
| 752 | $ToAdd = 8;
|
|---|
| 753 | break;
|
|---|
| 754 | Case '9' :
|
|---|
| 755 | $ToAdd = 9;
|
|---|
| 756 | break;
|
|---|
| 757 | }
|
|---|
| 758 | break;
|
|---|
| 759 | }
|
|---|
| 760 | $Help += $ToAdd;
|
|---|
| 761 | }
|
|---|
| 762 | $Help = $this->OnlyOne($Help);
|
|---|
| 763 | $Checksum = 10 - $Help;
|
|---|
| 764 | // Fix by Christian Rothe 20110606: Nur 1 Stelle beruecksichtigen
|
|---|
| 765 | // Ist die Pruefsumme = 10, ist die Pruefziffer = 0
|
|---|
| 766 | $Checksum = $this->OnlyOne($Checksum);
|
|---|
| 767 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 768 | $Mark29 = 0;
|
|---|
| 769 | } else {
|
|---|
| 770 | $Mark29 = 1;
|
|---|
| 771 | }
|
|---|
| 772 | return $Mark29;
|
|---|
| 773 | }
|
|---|
| 774 |
|
|---|
| 775 | private function Mark30($AccountNo) {
|
|---|
| 776 | $Significance = '200001212';
|
|---|
| 777 | $Help = 0;
|
|---|
| 778 | $Mark30 = 1;
|
|---|
| 779 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 780 | for ($Run = 0;$Run < strlen($Significance);$Run++){
|
|---|
| 781 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 782 | }
|
|---|
| 783 | $Help = $this->OnlyOne($Help);
|
|---|
| 784 | $Checksum = 10 - $Help;
|
|---|
| 785 | if ($Checksum == 10) {
|
|---|
| 786 | $Checksum = 0;
|
|---|
| 787 | }
|
|---|
| 788 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 789 | $Mark30 = 0;
|
|---|
| 790 | }
|
|---|
| 791 | return $Mark30;
|
|---|
| 792 | } /* End of Mark30 */
|
|---|
| 793 |
|
|---|
| 794 | private function Mark31($AccountNo) {
|
|---|
| 795 | $Significance = '123456789';
|
|---|
| 796 | $Help = 0;
|
|---|
| 797 | $Mark31 = 1;
|
|---|
| 798 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 799 | for ($Run = 0;$Run < strlen($Significance);$Run++){
|
|---|
| 800 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 801 | }
|
|---|
| 802 | $Checksum = $Help % 11;
|
|---|
| 803 | if($Checksum == substr($AccountNo,-1)) {
|
|---|
| 804 | $Mark31 = 0;
|
|---|
| 805 | }
|
|---|
| 806 | return $Mark31;
|
|---|
| 807 | } /* End of Mark31 */
|
|---|
| 808 |
|
|---|
| 809 | private function Mark32($AccountNo) {
|
|---|
| 810 | $Mark32 = $this->Method06($AccountNo, '000765432', FALSE, 10, 11);
|
|---|
| 811 | return $Mark32;
|
|---|
| 812 | } /* End of Mark32 */
|
|---|
| 813 |
|
|---|
| 814 | private function Mark33($AccountNo) {
|
|---|
| 815 | $Mark33 = $this->Method06($AccountNo, '000065432', FALSE, 10, 11);
|
|---|
| 816 | return $Mark33;
|
|---|
| 817 | } /* End of Mark33 */
|
|---|
| 818 |
|
|---|
| 819 | private function Mark34($AccountNo) {
|
|---|
| 820 | $Mark34 = $this->Method06($AccountNo, '79A5842', TRUE, 8, 11);
|
|---|
| 821 | return $Mark34;
|
|---|
| 822 | } /* End of Mark34 */
|
|---|
| 823 |
|
|---|
| 824 | private function Mark35($AccountNo) {
|
|---|
| 825 | $Mark35 = 3;
|
|---|
| 826 | return $Mark35;
|
|---|
| 827 | } /* End of Mark35 */
|
|---|
| 828 |
|
|---|
| 829 | private function Mark36($AccountNo) {
|
|---|
| 830 | $Mark36 = $this->Method06($AccountNo, '000005842', FALSE, 10, 11);
|
|---|
| 831 | return $Mark36;
|
|---|
| 832 | } /* End of Mark36 */
|
|---|
| 833 |
|
|---|
| 834 | private function Mark37($AccountNo) {
|
|---|
| 835 | $Mark37 = $this->Method06($AccountNo, '0000A5842', TRUE, 10, 11);
|
|---|
| 836 | return $Mark37;
|
|---|
| 837 | } /* End of Mark37 */
|
|---|
| 838 |
|
|---|
| 839 | private function Mark38($AccountNo) {
|
|---|
| 840 | $Mark38 = $this->Method06($AccountNo, '0009A5842', TRUE, 10, 11);
|
|---|
| 841 | return $Mark38;
|
|---|
| 842 | } /* End of Mark38 */
|
|---|
| 843 |
|
|---|
| 844 | private function Mark39($AccountNo) {
|
|---|
| 845 | $Mark39 = $this->Method06($AccountNo, '0079A5842', TRUE, 10, 11);
|
|---|
| 846 | return $Mark39;
|
|---|
| 847 | } /* End of Mark39 */
|
|---|
| 848 |
|
|---|
| 849 | private function Mark40($AccountNo) {
|
|---|
| 850 | $Mark40 = $this->Method06($AccountNo, '6379A5842', TRUE, 10, 11);
|
|---|
| 851 | return $Mark40;
|
|---|
| 852 | } /* End of Mark40 */
|
|---|
| 853 |
|
|---|
| 854 | private function Mark41($AccountNo) {
|
|---|
| 855 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 856 | if (substr($AccountNo,3,1) == '9') {
|
|---|
| 857 | $AccountNo = '000'. substr($AccountNo,3);
|
|---|
| 858 | }
|
|---|
| 859 | $Mark41 = $this->Method00($AccountNo,'212121212',10);
|
|---|
| 860 | return $Mark41;
|
|---|
| 861 | } /* End of Mark41 */
|
|---|
| 862 |
|
|---|
| 863 | private function Mark42($AccountNo) {
|
|---|
| 864 | $Mark42 = $this->Method06($AccountNo, '098765432', FALSE, 10, 11);
|
|---|
| 865 | return $Mark42;
|
|---|
| 866 | } /* End of Mark42 */
|
|---|
| 867 |
|
|---|
| 868 | private function Mark43($AccountNo) {
|
|---|
| 869 | $Significance = '987654321';
|
|---|
| 870 | $Help = 0;
|
|---|
| 871 | $Mark43 = 1;
|
|---|
| 872 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 873 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 874 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 875 | }
|
|---|
| 876 | $Help = $Help % 10;
|
|---|
| 877 | $Checksum = 10 - $Help;
|
|---|
| 878 | if ($Checksum == 10) {
|
|---|
| 879 | $Checksum = 0;
|
|---|
| 880 | }
|
|---|
| 881 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 882 | $Mark43 = 0;
|
|---|
| 883 | }
|
|---|
| 884 | return $Mark43;
|
|---|
| 885 | } /* End of Mark43 */
|
|---|
| 886 |
|
|---|
| 887 | private function Mark44($AccountNo) {
|
|---|
| 888 | $Mark44 = $this->Method06($AccountNo, '0000A5842', TRUE, 10, 11);
|
|---|
| 889 | return $Mark44;
|
|---|
| 890 | } /* End of Mark44 */
|
|---|
| 891 |
|
|---|
| 892 | private function Mark45($AccountNo) {
|
|---|
| 893 | if (substr($AccountNo,0,1)=='0' or substr($AccountNo,4,1)=='1'){
|
|---|
| 894 | $Mark45 = 2;
|
|---|
| 895 | } else {
|
|---|
| 896 | $Mark45 = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 897 | }
|
|---|
| 898 | return $Mark45;
|
|---|
| 899 | } /* End of Mark45 */
|
|---|
| 900 |
|
|---|
| 901 | private function Mark46($AccountNo) {
|
|---|
| 902 | $Mark46 = $this->Method06($AccountNo, '0065432', FALSE, 8, 11);
|
|---|
| 903 | return $Mark46;
|
|---|
| 904 | } /* End of Mark46 */
|
|---|
| 905 |
|
|---|
| 906 | private function Mark47($AccountNo) {
|
|---|
| 907 | $Mark47 = $this->Method06($AccountNo, '00065432', FALSE, 9, 11);
|
|---|
| 908 | return $Mark47;
|
|---|
| 909 | } /* End of Mark47 */
|
|---|
| 910 |
|
|---|
| 911 | private function Mark48($AccountNo) {
|
|---|
| 912 | $Mark48 = $this->Method06($AccountNo, '00765432', FALSE, 9, 11);
|
|---|
| 913 | return $Mark48;
|
|---|
| 914 | } /* End of Mark48 */
|
|---|
| 915 |
|
|---|
| 916 | private function Mark49($AccountNo) {
|
|---|
| 917 | $Mark49=$this->Mark00($AccountNo);
|
|---|
| 918 | if ($Mark49 == 0)
|
|---|
| 919 | return $Mark49;
|
|---|
| 920 | $Mark49=$this->Mark01($AccountNo);
|
|---|
| 921 | return $Mark49;
|
|---|
| 922 | } /* End of Mark49 */
|
|---|
| 923 |
|
|---|
| 924 | private function Mark50($AccountNo) {
|
|---|
| 925 | $Help = $this->Method06($AccountNo, '765432', FALSE, 7, 11);
|
|---|
| 926 | if ($Help == 1) {
|
|---|
| 927 | if (strlen($AccountNo) < 7) {
|
|---|
| 928 | $Help = $this->Method06($AccountNo . '000', '765432', FALSE, 7, 11);
|
|---|
| 929 | }
|
|---|
| 930 | }
|
|---|
| 931 | $Mark50 = $Help;
|
|---|
| 932 | return $Mark50;
|
|---|
| 933 | } /* End of Mark50 */
|
|---|
| 934 |
|
|---|
| 935 |
|
|---|
| 936 | /* --- Hotfix FrankM 20081208 --- */
|
|---|
| 937 | /* --- Changed Christian Rothe 20130603 --- */
|
|---|
| 938 | private function Mark51($AccountNo) {
|
|---|
| 939 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 940 | // Normale Berechnung, keine Sachkonten
|
|---|
| 941 | if (substr($AccountNo, 2, 1) != '9') {
|
|---|
| 942 | // Methode A: Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7
|
|---|
| 943 | $Help = $this->Method06($AccountNo, '000765432', FALSE, 10, 11);
|
|---|
| 944 | if ($Help == 1) {
|
|---|
| 945 | // Methode B: Modulus 11, Gewichtung 2, 3, 4, 5, 6 (= Mark33)
|
|---|
| 946 | $Help = $this->Method06($AccountNo, '000065432', FALSE, 10, 11);
|
|---|
| 947 | if ($Help == 1) {
|
|---|
| 948 | // Methode C: Modulus 10, Gewichtung 2, 1, 2, 1, 2, 1
|
|---|
| 949 | $Help = $this->Method00($AccountNo,'000121212',10);
|
|---|
| 950 | if ($Help == 1) {
|
|---|
| 951 | // 10. Stelle 7, 8 oder 9 = ungueltig
|
|---|
| 952 | switch (substr($AccountNo, -1)) {
|
|---|
| 953 | case '7' :
|
|---|
| 954 | case '8' :
|
|---|
| 955 | case '9' :
|
|---|
| 956 | $Help = 1;
|
|---|
| 957 | break;
|
|---|
| 958 | default :
|
|---|
| 959 | // Methode D: Modulus 7, Gewichtung 2, 3, 4, 5, 6
|
|---|
| 960 | $Help = $this->Method06($AccountNo, '000065432', FALSE, 10, 7);
|
|---|
| 961 | break;
|
|---|
| 962 | }
|
|---|
| 963 | }
|
|---|
| 964 | }
|
|---|
| 965 | }
|
|---|
| 966 | } else {
|
|---|
| 967 | // Ausnahme fuer Sachkonten, 3. Stelle der Kontonummer = 9
|
|---|
| 968 | // Variante 1 zur Ausnahme, Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7, 8
|
|---|
| 969 | $Help = $this->Method06($AccountNo, '008765432', FALSE, 10, 11);
|
|---|
| 970 | if ($Help == 1 ){
|
|---|
| 971 | // Variante 2 zur Ausnahme, Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7, 8, 9, 10
|
|---|
| 972 | $Help = $this->Method06($AccountNo, 'A98765432', TRUE, 10, 11);
|
|---|
| 973 | }
|
|---|
| 974 | }
|
|---|
| 975 | return $Help;
|
|---|
| 976 | } /* End of Mark51 */
|
|---|
| 977 |
|
|---|
| 978 | private function Mark52($AccountNo,$BLZ ) {
|
|---|
| 979 | $Significance = '4216379A5842';
|
|---|
| 980 | if ((strlen($AccountNo) == 10) && (substr($AccountNo,0,1) == '9')){
|
|---|
| 981 | $Correct = $this->Mark20($AccountNo);
|
|---|
| 982 |
|
|---|
| 983 | } else {
|
|---|
| 984 | $Help = 0;
|
|---|
| 985 | $Rest = 0;
|
|---|
| 986 | $AltKonto = substr($BLZ,-4).substr($AccountNo,0,2);
|
|---|
| 987 |
|
|---|
| 988 | $AccountNo = Substr($AccountNo,2);
|
|---|
| 989 | while (substr($AccountNo,0,1) == '0') {
|
|---|
| 990 | $AccountNo = Substr($AccountNo,1);
|
|---|
| 991 | }
|
|---|
| 992 | $AltKonto = $AltKonto . $AccountNo;
|
|---|
| 993 |
|
|---|
| 994 | $Checksum = substr($AltKonto,5,1);
|
|---|
| 995 |
|
|---|
| 996 | $AltKonto = substr($AltKonto,0,5).'0'.substr($AltKonto,6);
|
|---|
| 997 |
|
|---|
| 998 | $Laenge = strlen($AltKonto);
|
|---|
| 999 |
|
|---|
| 1000 | $Significance=substr($Significance,(12 - $Laenge));
|
|---|
| 1001 | for ($Run = 0; $Run < $Laenge;$Run++) {
|
|---|
| 1002 | $Help += substr($AltKonto,$Run,1) * HexDec(substr($Significance,$Run,1));
|
|---|
| 1003 | }
|
|---|
| 1004 | $Rest = $Help % 11;
|
|---|
| 1005 | $Gewicht = HexDec(substr($Significance,5,1));
|
|---|
| 1006 |
|
|---|
| 1007 | $PZ = -1;
|
|---|
| 1008 | $Help2 = $Rest + ($PZ * $Gewicht);
|
|---|
| 1009 | while ($Help2 % 11 <>10) { //franky_n
|
|---|
| 1010 | $PZ++;
|
|---|
| 1011 | $Help2 = $Rest + ($PZ * $Gewicht);
|
|---|
| 1012 | if ($PZ == 9) {
|
|---|
| 1013 | break;
|
|---|
| 1014 | }
|
|---|
| 1015 | } //franky_n
|
|---|
| 1016 | if ($Help2 % 11 == 10) {
|
|---|
| 1017 | if ($PZ == $Checksum) {
|
|---|
| 1018 | $Correct = 0;
|
|---|
| 1019 | } else {
|
|---|
| 1020 | $Correct = 1;
|
|---|
| 1021 | }
|
|---|
| 1022 | } else {
|
|---|
| 1023 | $Correct = 1;
|
|---|
| 1024 | }
|
|---|
| 1025 | }
|
|---|
| 1026 | return $Correct;
|
|---|
| 1027 | } /* End of Mark52 */
|
|---|
| 1028 |
|
|---|
| 1029 | private function Mark53($AccountNo,$BLZ ) {
|
|---|
| 1030 | $Significance = '4216379A5842';
|
|---|
| 1031 | if (strlen($AccountNo) == 10) {
|
|---|
| 1032 | if (substr($AccountNo,0,1) == '9') {
|
|---|
| 1033 | $Correct = $this->Mark20($AccountNo);
|
|---|
| 1034 | }
|
|---|
| 1035 | } else {
|
|---|
| 1036 | $Help = 0;
|
|---|
| 1037 | $Rest = 0;
|
|---|
| 1038 |
|
|---|
| 1039 | $AltKonto = substr($BLZ,-4,2) . substr($AccountNo,1,1) . substr($BLZ,-1). substr($AccountNo,0,1) . substr($AccountNo,2,1);
|
|---|
| 1040 |
|
|---|
| 1041 | $AccountNo = Substr($AccountNo,3);
|
|---|
| 1042 |
|
|---|
| 1043 | while (substr($AccountNo,0,1) == '0') {
|
|---|
| 1044 | $AccountNo = Substr($AccountNo,1);
|
|---|
| 1045 | }
|
|---|
| 1046 |
|
|---|
| 1047 | $AltKonto = $AltKonto . $AccountNo;
|
|---|
| 1048 |
|
|---|
| 1049 | while (strlen($AltKonto) < 12){
|
|---|
| 1050 | $AltKonto = "0" . $AltKonto;
|
|---|
| 1051 | }
|
|---|
| 1052 |
|
|---|
| 1053 | $Checksum = substr($AltKonto, 5, 1);
|
|---|
| 1054 | $AltKonto = substr($AltKonto, 0, 5) . '0' . substr($AltKonto, 6);
|
|---|
| 1055 | $Laenge = strlen($AltKonto);
|
|---|
| 1056 |
|
|---|
| 1057 | for ($Run = 0; $Run < $Laenge;$Run++) {
|
|---|
| 1058 | $Help += substr($AltKonto, $Run, 1) * HexDec(substr($Significance, $Run, 1));
|
|---|
| 1059 | }
|
|---|
| 1060 |
|
|---|
| 1061 | $Rest = $Help % 11;
|
|---|
| 1062 |
|
|---|
| 1063 | $Gewicht = HexDec(substr($Significance,5, 1));
|
|---|
| 1064 | $PZ = -1;
|
|---|
| 1065 | $Help2 = $Rest + ($PZ * $Gewicht);
|
|---|
| 1066 | while ($Help2 % 11 <> 10 or $PZ > 9) { //franky_n
|
|---|
| 1067 | $PZ++;
|
|---|
| 1068 | $Help2 = $Rest + ($PZ * $Gewicht);
|
|---|
| 1069 | } //franky_n
|
|---|
| 1070 |
|
|---|
| 1071 | if ($Help2 % 11 == 10) {
|
|---|
| 1072 | if ($PZ == $Checksum) {
|
|---|
| 1073 | $Correct = 0;
|
|---|
| 1074 | } else {
|
|---|
| 1075 | $Correct = 1;
|
|---|
| 1076 | }
|
|---|
| 1077 | } else {
|
|---|
| 1078 | $Correct = 1;
|
|---|
| 1079 | }
|
|---|
| 1080 | }
|
|---|
| 1081 | return $Correct;
|
|---|
| 1082 | } /* End of Mark53 */
|
|---|
| 1083 |
|
|---|
| 1084 | private function Mark54($AccountNo) {
|
|---|
| 1085 | $Mark54 = 3;
|
|---|
| 1086 | return $Mark54;
|
|---|
| 1087 | } /* End of Mark54 */
|
|---|
| 1088 |
|
|---|
| 1089 | private function Mark55($AccountNo) {
|
|---|
| 1090 | $Mark55 = $this->Method06($AccountNo, '878765432', FALSE, 10, 11);
|
|---|
| 1091 | return $Mark55;
|
|---|
| 1092 | } /* End of Mark55 */
|
|---|
| 1093 |
|
|---|
| 1094 | private function Mark56($AccountNo) {
|
|---|
| 1095 | $Significance = '432765432';
|
|---|
| 1096 | $Mark56 = 1;
|
|---|
| 1097 | $Help = 0;
|
|---|
| 1098 | $Correct = 0;
|
|---|
| 1099 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1100 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 1101 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 1102 | }
|
|---|
| 1103 | $Help = $Help % 11;
|
|---|
| 1104 | $Help = 11 - $Help;
|
|---|
| 1105 | $Checksum = $Help;
|
|---|
| 1106 | switch (substr($AccountNo,1,1)) {
|
|---|
| 1107 | case '9' :
|
|---|
| 1108 | if ($Help == 11) {
|
|---|
| 1109 | $Checksum = 8;
|
|---|
| 1110 | }
|
|---|
| 1111 | if ($Help == 10) {
|
|---|
| 1112 | $Checksum = 7;
|
|---|
| 1113 | }
|
|---|
| 1114 | default :
|
|---|
| 1115 | if ($Help == 11) {
|
|---|
| 1116 | $Correct = 1;
|
|---|
| 1117 | }
|
|---|
| 1118 | if ($Help == 10) {
|
|---|
| 1119 | $Correct = 1;
|
|---|
| 1120 | }
|
|---|
| 1121 | }
|
|---|
| 1122 | if ($Correct == 0) {
|
|---|
| 1123 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 1124 | $Mark56 = 0;
|
|---|
| 1125 | }
|
|---|
| 1126 | }
|
|---|
| 1127 | return $Mark56;
|
|---|
| 1128 | } /* End of Mark56 */
|
|---|
| 1129 |
|
|---|
| 1130 | /* Alte Methode 57 - ungueltig.
|
|---|
| 1131 | private function Mark57($AccountNo) {
|
|---|
| 1132 | $Correct = 1;
|
|---|
| 1133 |
|
|---|
| 1134 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1135 |
|
|---|
| 1136 | $help = substr($AccountNo,0,2);
|
|---|
| 1137 |
|
|---|
| 1138 | switch (true){
|
|---|
| 1139 | case ($help <= 50):
|
|---|
| 1140 | case ($help == 91):
|
|---|
| 1141 | case ($help >= 96 && $help <= 99):
|
|---|
| 1142 | return 0;
|
|---|
| 1143 | break;
|
|---|
| 1144 | default:
|
|---|
| 1145 | }
|
|---|
| 1146 |
|
|---|
| 1147 | if (preg_match("/[87]{6}/", $AccountNo)) {
|
|---|
| 1148 | return 0;
|
|---|
| 1149 | }
|
|---|
| 1150 |
|
|---|
| 1151 | $Mark57 = $this->Method00($AccountNo, '121212121', 10);
|
|---|
| 1152 | return $Mark57;
|
|---|
| 1153 |
|
|---|
| 1154 | }
|
|---|
| 1155 | */
|
|---|
| 1156 |
|
|---|
| 1157 | /* --- Neue Methode 57 --- */
|
|---|
| 1158 | /* --- Changed FrankM 20061206, 20070822 --- */
|
|---|
| 1159 | /* --- Changed Christian Rothe 20130909 --- */
|
|---|
| 1160 | private function Mark57($AccountNo) {
|
|---|
| 1161 |
|
|---|
| 1162 | // Auffuellen mit Nullen auf 10 Stellen.
|
|---|
| 1163 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1164 |
|
|---|
| 1165 | // Pruefstellen zum ermitteln der Varianten.
|
|---|
| 1166 | $help01 = substr($AccountNo,0,2);
|
|---|
| 1167 |
|
|---|
| 1168 | // Genutzte Berechnungsvariante ermitteln.
|
|---|
| 1169 | switch (true){
|
|---|
| 1170 | case ($help01 == 51):
|
|---|
| 1171 | case ($help01 == 55):
|
|---|
| 1172 | case ($help01 == 61):
|
|---|
| 1173 | case ($help01 >= 64 && $help01 <= 66):
|
|---|
| 1174 | case ($help01 == 70):
|
|---|
| 1175 | case ($help01 >= 73 && $help01 <= 82):
|
|---|
| 1176 | case ($help01 == 88):
|
|---|
| 1177 | case ($help01 >= 94 && $help01 <= 95):
|
|---|
| 1178 | // Variante 1: Modulus 10, Gewichtung 1,2,1,2,1,2,1,2,1, Pruefziffer Stelle 10.
|
|---|
| 1179 | $PResult = $this->Method00($AccountNo, '121212121', 10);
|
|---|
| 1180 | // Ausnahme: Wenn die ersten 6 Stellen 777777 oder 888888 dann richtig.
|
|---|
| 1181 | $help02 = substr($AccountNo,0,6);
|
|---|
| 1182 | if ($help02 == 777777) {
|
|---|
| 1183 | $PResult = 0;
|
|---|
| 1184 | }
|
|---|
| 1185 | if ($help02 == 888888) {
|
|---|
| 1186 | $PResult = 0;
|
|---|
| 1187 | }
|
|---|
| 1188 | break;
|
|---|
| 1189 | case ($help01 >= 32 && $help01 <= 39):
|
|---|
| 1190 | case ($help01 >= 41 && $help01 <= 49):
|
|---|
| 1191 | case ($help01 >= 52 && $help01 <= 54):
|
|---|
| 1192 | case ($help01 >= 56 && $help01 <= 60):
|
|---|
| 1193 | case ($help01 >= 62 && $help01 <= 63):
|
|---|
| 1194 | case ($help01 >= 67 && $help01 <= 69):
|
|---|
| 1195 | case ($help01 >= 71 && $help01 <= 72):
|
|---|
| 1196 | case ($help01 >= 83 && $help01 <= 87):
|
|---|
| 1197 | case ($help01 >= 89 && $help01 <= 90):
|
|---|
| 1198 | case ($help01 >= 92 && $help01 <= 93):
|
|---|
| 1199 | case ($help01 >= 96 && $help01 <= 98):
|
|---|
| 1200 | // Variante 2: Modulus 10, Gewichtung 1,2,1,2,1,2,1,2,1, Pruefziffer Stelle 3,
|
|---|
| 1201 | // Pruefziffer bei der Berechnung auslassen.
|
|---|
| 1202 | $PResult = $this->Method00($AccountNo, '121212121', 3, 10, -1);
|
|---|
| 1203 | break;
|
|---|
| 1204 | case ($help01 == 40):
|
|---|
| 1205 | case ($help01 == 50):
|
|---|
| 1206 | case ($help01 == 91):
|
|---|
| 1207 | case ($help01 == 99):
|
|---|
| 1208 | // Variante 3: Methode 09 (Keine Berechnung).
|
|---|
| 1209 | $PResult = $this->Mark09($AccountNo);
|
|---|
| 1210 | break;
|
|---|
| 1211 | case ($help01 >= 01 && $help01 <= 31):
|
|---|
| 1212 | // Variante 4: Dritte und vierte Stelle zwischen 01 und 12
|
|---|
| 1213 | // -UND- siebte bis neunte Stelle kleiner 500.
|
|---|
| 1214 | $help03 = substr($AccountNo,2,2);
|
|---|
| 1215 | $help04 = substr($AccountNo,6,3);
|
|---|
| 1216 | $PResult = 1;
|
|---|
| 1217 | if ($help03 >= 01 && $help03 <= 12) {
|
|---|
| 1218 | if ($help04 < 500) {
|
|---|
| 1219 | $PResult = 0;
|
|---|
| 1220 | }
|
|---|
| 1221 | }
|
|---|
| 1222 | // Ausnahme: Diese Kontonummer ist als richtig zu bewerten.
|
|---|
| 1223 | if ((string)$AccountNo == '0185125434') {
|
|---|
| 1224 | $PResult = 0;
|
|---|
| 1225 | }
|
|---|
| 1226 | break;
|
|---|
| 1227 | default:
|
|---|
| 1228 | // Kontonummern die mit 00 beginnen sind falsch.
|
|---|
| 1229 | $PResult = 1;
|
|---|
| 1230 | break;
|
|---|
| 1231 | }
|
|---|
| 1232 |
|
|---|
| 1233 | // Der Ordnung halber...
|
|---|
| 1234 | $Mark57 = $PResult;
|
|---|
| 1235 | return $Mark57;
|
|---|
| 1236 |
|
|---|
| 1237 | } /* End of Mark57 */
|
|---|
| 1238 |
|
|---|
| 1239 | private function Mark58($AccountNo) {
|
|---|
| 1240 | $Mark58 = $this->Method02($AccountNo, '000065432', FALSE);
|
|---|
| 1241 | return $Mark58;
|
|---|
| 1242 | } /* End of Mark58 */
|
|---|
| 1243 |
|
|---|
| 1244 | private function Mark59($AccountNo) {
|
|---|
| 1245 | $Mark59 = 1;
|
|---|
| 1246 | if (strlen($AccountNo) > 8) {
|
|---|
| 1247 | $Mark59 = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 1248 | }
|
|---|
| 1249 | return $Mark59;
|
|---|
| 1250 | } /* End of Mark59 */
|
|---|
| 1251 |
|
|---|
| 1252 | private function Mark60($AccountNo) {
|
|---|
| 1253 | $Mark60 = $this->Method00($AccountNo, '002121212', 10);
|
|---|
| 1254 | return $Mark60;
|
|---|
| 1255 | } /* End of Mark60 */
|
|---|
| 1256 |
|
|---|
| 1257 | private function Mark61($AccountNo) {
|
|---|
| 1258 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1259 | if (substr($AccountNo,8,1) == '8') {
|
|---|
| 1260 | $Mark61 = $this->Method00($AccountNo, '2121212012', 8);
|
|---|
| 1261 | } else {
|
|---|
| 1262 | $Mark61 = $this->Method00($AccountNo, '2121212', 8);
|
|---|
| 1263 | }
|
|---|
| 1264 | return $Mark61;
|
|---|
| 1265 | } /* End of Mark61 */
|
|---|
| 1266 |
|
|---|
| 1267 | private function Mark62($AccountNo) {
|
|---|
| 1268 | $Mark62 = $this->Method00($AccountNo,'0021212',8);
|
|---|
| 1269 | return $Mark62;
|
|---|
| 1270 | } /* End of Mark62 */
|
|---|
| 1271 |
|
|---|
| 1272 | private function Mark63($AccountNo) {
|
|---|
| 1273 | $Help = $this->Method00($AccountNo,'0121212',8);
|
|---|
| 1274 | if ($Help == 1) {
|
|---|
| 1275 | $Help = $this->Method00($AccountNo,'000121212',10);
|
|---|
| 1276 | }
|
|---|
| 1277 | $Mark63 = $Help;
|
|---|
| 1278 | return $Mark63;
|
|---|
| 1279 | } /* End of Mark63 */
|
|---|
| 1280 |
|
|---|
| 1281 | private function Mark64($AccountNo) {
|
|---|
| 1282 | $Mark64 = $this->Method06($AccountNo, '9A5842', TRUE, 7, 11);
|
|---|
| 1283 | return $Mark64;
|
|---|
| 1284 | } /* End of Mark64 */
|
|---|
| 1285 |
|
|---|
| 1286 | private function Mark65($AccountNo) {
|
|---|
| 1287 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1288 | if (substr($AccountNo,8,1) == '9') {
|
|---|
| 1289 | $Mark65 = $this->Method00($AccountNo, '2121212012', 8);
|
|---|
| 1290 | } else {
|
|---|
| 1291 | $Mark65 = $this->Method00($AccountNo, '2121212', 8);
|
|---|
| 1292 | }
|
|---|
| 1293 | return $Mark65;
|
|---|
| 1294 | } /* End of Mark65 */
|
|---|
| 1295 |
|
|---|
| 1296 | /* --- Changed Christian Rothe 20140303 --- */
|
|---|
| 1297 | private function Mark66($AccountNo) {
|
|---|
| 1298 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1299 | if (substr($AccountNo,1,1) == '9') {
|
|---|
| 1300 | $Mark66 = $this->Mark09($AccountNo);
|
|---|
| 1301 | } else {
|
|---|
| 1302 | $Significance = '070065432';
|
|---|
| 1303 | $Help = 0;
|
|---|
| 1304 | $Mark66 = 1;
|
|---|
| 1305 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 1306 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 1307 | }
|
|---|
| 1308 | $Help = $Help % 11;
|
|---|
| 1309 | $Checksum = 11 - $Help;
|
|---|
| 1310 | if ($Help == 0) {
|
|---|
| 1311 | $Checksum = 1;
|
|---|
| 1312 | }
|
|---|
| 1313 | if ($Help == 1) {
|
|---|
| 1314 | $Checksum = 0;
|
|---|
| 1315 | }
|
|---|
| 1316 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 1317 | $Mark66 = 0;
|
|---|
| 1318 | }
|
|---|
| 1319 | }
|
|---|
| 1320 | return $Mark66;
|
|---|
| 1321 | } /* End of Mark66 */
|
|---|
| 1322 |
|
|---|
| 1323 | private function Mark67($AccountNo) {
|
|---|
| 1324 | $Mark67 = $this->Method00($AccountNo, '2121212', 8);
|
|---|
| 1325 | return $Mark67;
|
|---|
| 1326 | } /* End of Mark67 */
|
|---|
| 1327 |
|
|---|
| 1328 | private function Mark68($AccountNo) {
|
|---|
| 1329 | $Correct = 0;
|
|---|
| 1330 | $Significance = '212121212';
|
|---|
| 1331 | if (strlen($AccountNo) == 9) {
|
|---|
| 1332 | if (substr($AccountNo,1,1) == '4') {
|
|---|
| 1333 | $Correct = 4;
|
|---|
| 1334 | }
|
|---|
| 1335 | }
|
|---|
| 1336 | if (strlen($AccountNo) == 10) {
|
|---|
| 1337 | $Significance = '000121212';
|
|---|
| 1338 | }
|
|---|
| 1339 | if ($Correct == 0) {
|
|---|
| 1340 | $Correct = $this->Method00($AccountNo,$Significance,10);
|
|---|
| 1341 | if ($Correct == 1) {
|
|---|
| 1342 | $Correct = $this->Method00($AccountNo,'210021212',10);
|
|---|
| 1343 | }
|
|---|
| 1344 | }
|
|---|
| 1345 | $Mark68 = $Correct;
|
|---|
| 1346 | return $Mark68;
|
|---|
| 1347 | } /* End of Mark68 */
|
|---|
| 1348 |
|
|---|
| 1349 | private function Mark69($AccountNo) {
|
|---|
| 1350 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1351 | $Correct = 0;
|
|---|
| 1352 | if (Substr($AccountNo,0,2) == '93') {
|
|---|
| 1353 | $Correct = 2;
|
|---|
| 1354 | }
|
|---|
| 1355 | if ($Correct == 0) {
|
|---|
| 1356 | $Correct = $this->Mark28($AccountNo);
|
|---|
| 1357 | if ($Correct == 1) {
|
|---|
| 1358 | $Correct = $this->Mark29($AccountNo);
|
|---|
| 1359 | } elseif (Substr($AccountNo,0,2) == '97'){
|
|---|
| 1360 | $Correct = $this->Mark29($AccountNo);
|
|---|
| 1361 | }
|
|---|
| 1362 | }
|
|---|
| 1363 | $Mark69 = $Correct;
|
|---|
| 1364 | return $Mark69;
|
|---|
| 1365 | } /* End of Mark69 */
|
|---|
| 1366 |
|
|---|
| 1367 | private function Mark70($AccountNo) {
|
|---|
| 1368 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1369 | if (substr($AccountNo,3,1) == '5'){
|
|---|
| 1370 | $Mark70 = $this->Method06($AccountNo, '000765432', FALSE, 10, 11);
|
|---|
| 1371 | } elseif (Substr($AccountNo,3,2) == '69') {
|
|---|
| 1372 | $Mark70 = $this->Method06($AccountNo, '000765432', FALSE, 10, 11);
|
|---|
| 1373 | } else {
|
|---|
| 1374 | $Mark70 = $this->Method06($AccountNo, '432765432', FALSE, 10, 11);
|
|---|
| 1375 | }
|
|---|
| 1376 | return $Mark70;
|
|---|
| 1377 | } /* End of Mark70 */
|
|---|
| 1378 |
|
|---|
| 1379 | private function Mark71($AccountNo) {
|
|---|
| 1380 | $Significance='0654321';
|
|---|
| 1381 | $Help = 0;
|
|---|
| 1382 | $Mark71 = 1;
|
|---|
| 1383 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1384 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 1385 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 1386 | }
|
|---|
| 1387 | $Help = $Help % 11;
|
|---|
| 1388 | $Checksum = 11 - $Help;
|
|---|
| 1389 | if ($Help == 0) {
|
|---|
| 1390 | $Checksum = 0;
|
|---|
| 1391 | }
|
|---|
| 1392 | if ($Help == 1) {
|
|---|
| 1393 | $Checksum = 1;
|
|---|
| 1394 | }
|
|---|
| 1395 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 1396 | $Mark71 = 0;
|
|---|
| 1397 | }
|
|---|
| 1398 | return $Mark71;
|
|---|
| 1399 | } /* End of Mark71 */
|
|---|
| 1400 |
|
|---|
| 1401 | private function Mark72($AccountNo) {
|
|---|
| 1402 | $Mark72 = $this->Method00($AccountNo, '000121212', 10);
|
|---|
| 1403 | return $Mark72;
|
|---|
| 1404 | } /* End of Mark72 */
|
|---|
| 1405 |
|
|---|
| 1406 | /*
|
|---|
| 1407 | private function Mark73($AccountNo) {
|
|---|
| 1408 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1409 | if (substr($AccountNo,2,1) == '9') {
|
|---|
| 1410 | $Mark73 = $this->Method06($AccountNo, 'A98765432', TRUE, 10, 11);
|
|---|
| 1411 | } else {
|
|---|
| 1412 | $Mark73 = $this->Method00($AccountNo, '000121212', 10);
|
|---|
| 1413 | }
|
|---|
| 1414 | return $Mark73;
|
|---|
| 1415 | }
|
|---|
| 1416 | */
|
|---|
| 1417 |
|
|---|
| 1418 |
|
|---|
| 1419 | private function Mark73($AccountNo) {
|
|---|
| 1420 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1421 | if (substr($AccountNo,2,1) != '9') {
|
|---|
| 1422 | $Mark73 = $this->Method00($AccountNo, '000121212', 10); //Variante 1
|
|---|
| 1423 | if ($Mark73 != 0) {
|
|---|
| 1424 | $Mark73 = $this->Method00($AccountNo, '000021212', 10); //Variante 2
|
|---|
| 1425 | if ($Mark73 != 0) {
|
|---|
| 1426 | $Mark73 = $this->Method00($AccountNo, '000021212', 10, 7); //Variante 3
|
|---|
| 1427 | }
|
|---|
| 1428 | }
|
|---|
| 1429 | } else {
|
|---|
| 1430 | // $Mark73 = $this->Method06($AccountNo, 'A98765432', TRUE, 10, 11);
|
|---|
| 1431 | $Mark73 = $this->Mark51($AccountNo);
|
|---|
| 1432 | }
|
|---|
| 1433 | return $Mark73;
|
|---|
| 1434 | } /* End of Mark73 */
|
|---|
| 1435 |
|
|---|
| 1436 |
|
|---|
| 1437 | // Letzte Ueberpruefung: 22.06.2007 FrankM
|
|---|
| 1438 | private function Mark74($AccountNo) {
|
|---|
| 1439 | $Help = 0;
|
|---|
| 1440 | $V2 = 0;
|
|---|
| 1441 | // Wenn Kontonummer sechstellig, Variante 2 beachten!
|
|---|
| 1442 | if (strlen($AccountNo) == 6) {
|
|---|
| 1443 | $V2 = 1;
|
|---|
| 1444 | }
|
|---|
| 1445 | $Correct = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 1446 | if ($Correct == 1) {
|
|---|
| 1447 | // Wenn Variante 2...
|
|---|
| 1448 | if ($V2 == 1) {
|
|---|
| 1449 | $Significance = '212121212';
|
|---|
| 1450 | $Correct = 1;
|
|---|
| 1451 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1452 | for ($Run = 0; $Run < strlen($Significance); $Run++) {
|
|---|
| 1453 | $Help += $this->CrossSum(substr($AccountNo, $Run,1) * substr($Significance, $Run,1));
|
|---|
| 1454 | }
|
|---|
| 1455 | $Help = $this->OnlyOne($Help);
|
|---|
| 1456 | $Help = 5 - $Help;
|
|---|
| 1457 | if ($Help < 0) {
|
|---|
| 1458 | $Help = 10 + $Help;
|
|---|
| 1459 | }
|
|---|
| 1460 | //echo "HELP = " . $Help . "<br>";
|
|---|
| 1461 | //echo "PRUE = " . substr($AccountNo,-1) . "<br>";
|
|---|
| 1462 | $Checksum = $Help;
|
|---|
| 1463 | // Wenn Checksumme = Pruefziffer, dann richtig
|
|---|
| 1464 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 1465 | $Correct = 0;
|
|---|
| 1466 | }
|
|---|
| 1467 | } // Ende Variante 2
|
|---|
| 1468 | }
|
|---|
| 1469 | //echo "ERG = " . $Correct . "<br>";
|
|---|
| 1470 | return $Correct;
|
|---|
| 1471 | } /* End of Mark74 */
|
|---|
| 1472 |
|
|---|
| 1473 |
|
|---|
| 1474 | /* --- Fixed FrankM 20070822 --- */
|
|---|
| 1475 | private function Mark75($AccountNo) {
|
|---|
| 1476 | $Help = 1;
|
|---|
| 1477 | switch (strlen($AccountNo)) {
|
|---|
| 1478 | case 6 :
|
|---|
| 1479 | case 7 :
|
|---|
| 1480 | $Help = $this->Method00($AccountNo,'000021212',10);
|
|---|
| 1481 | break;
|
|---|
| 1482 | case 9 :
|
|---|
| 1483 | if (substr($AccountNo,0,1) == '9') {
|
|---|
| 1484 | $Help = $this->Method00($AccountNo,'0021212',8);
|
|---|
| 1485 | } else {
|
|---|
| 1486 | $Help = $this->Method00($AccountNo,'021212',7);
|
|---|
| 1487 | }
|
|---|
| 1488 | break;
|
|---|
| 1489 | case 10 :
|
|---|
| 1490 | $Help = $this->Method00($AccountNo,'021212',7);
|
|---|
| 1491 | break;
|
|---|
| 1492 | }
|
|---|
| 1493 | return $Help;
|
|---|
| 1494 | } /* End of Mark75 */
|
|---|
| 1495 |
|
|---|
| 1496 | private function Mark76($AccountNo) {
|
|---|
| 1497 | $Help = 0;
|
|---|
| 1498 | $Correct = 1;
|
|---|
| 1499 | $Significance = '0765432';
|
|---|
| 1500 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1501 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 1502 | $Help += substr($AccountNo,$Run,1) * substr($Significance,$Run,1);
|
|---|
| 1503 | }
|
|---|
| 1504 | $Help = $Help % 11;
|
|---|
| 1505 | if ($Help == 10) {
|
|---|
| 1506 | $Correct = 4;
|
|---|
| 1507 | } else {
|
|---|
| 1508 | if ($Help == substr($AccountNo,-3,1)) {
|
|---|
| 1509 | $Correct = 0;
|
|---|
| 1510 | } else {
|
|---|
| 1511 | $Help=0;
|
|---|
| 1512 | $Significance = '000765432';
|
|---|
| 1513 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 1514 | $Help += substr($AccountNo,$Run,1) * substr($Significance,$Run,1);
|
|---|
| 1515 | }
|
|---|
| 1516 | $Help = $Help % 11;
|
|---|
| 1517 | if ($Help == 10) {
|
|---|
| 1518 | $Correct = 4;
|
|---|
| 1519 | } else {
|
|---|
| 1520 | if ($Help == substr($AccountNo,-1)) {
|
|---|
| 1521 | $Correct = 0;
|
|---|
| 1522 | } else {
|
|---|
| 1523 | $Correct = 1;
|
|---|
| 1524 | }
|
|---|
| 1525 | }
|
|---|
| 1526 | }
|
|---|
| 1527 | }
|
|---|
| 1528 | return $Correct;
|
|---|
| 1529 | } /* End of Mark76 */
|
|---|
| 1530 |
|
|---|
| 1531 | private function Mark77($AccountNo) {
|
|---|
| 1532 | $Help = 0;
|
|---|
| 1533 | $Mark77 = 1;
|
|---|
| 1534 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1535 | $Significance = '54321';
|
|---|
| 1536 | for ($Run = 4;$Run == 9;$Run++) {
|
|---|
| 1537 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 1538 | }
|
|---|
| 1539 | $Help = $Help % 11;
|
|---|
| 1540 | if ($Help <> 0) {
|
|---|
| 1541 | $Help = 0;
|
|---|
| 1542 | $Significance = '54345';
|
|---|
| 1543 | for ($Run = 4;$Run < 10;$Run++) {
|
|---|
| 1544 | $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 1545 | }
|
|---|
| 1546 | $Help = $Help % 11;
|
|---|
| 1547 | if ($Help = 0) {
|
|---|
| 1548 | $Mark77 = 0;
|
|---|
| 1549 | }
|
|---|
| 1550 | }
|
|---|
| 1551 | return $Mark77;
|
|---|
| 1552 | } /* End of Mark77 */
|
|---|
| 1553 |
|
|---|
| 1554 | private function Mark78($AccountNo) {
|
|---|
| 1555 | if (strlen($AccountNo) == 8) {
|
|---|
| 1556 | $Mark78 = 4;
|
|---|
| 1557 | } else {
|
|---|
| 1558 | $Mark78 = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 1559 | }
|
|---|
| 1560 | return $Mark78;
|
|---|
| 1561 | } /* End of Mark78 */
|
|---|
| 1562 |
|
|---|
| 1563 | private function Mark79($AccountNo) {
|
|---|
| 1564 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1565 | switch (substr($AccountNo,0,1)) {
|
|---|
| 1566 | case '0' :
|
|---|
| 1567 | case '7' :
|
|---|
| 1568 | case '8' :
|
|---|
| 1569 | $Mark79 = 1;
|
|---|
| 1570 | break;
|
|---|
| 1571 | case '1' :
|
|---|
| 1572 | case '2' :
|
|---|
| 1573 | case '9' :
|
|---|
| 1574 | $Mark79 = $this->Method00($AccountNo, '12121212', 9);
|
|---|
| 1575 | break;
|
|---|
| 1576 | case '3' :
|
|---|
| 1577 | case '4' :
|
|---|
| 1578 | case '5' :
|
|---|
| 1579 | case '6' :
|
|---|
| 1580 | $Mark79 = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 1581 | default :
|
|---|
| 1582 | $Mark79 = 1;
|
|---|
| 1583 | }
|
|---|
| 1584 | return $Mark79;
|
|---|
| 1585 | } /* End of Mark79 */
|
|---|
| 1586 |
|
|---|
| 1587 | private function Mark80($AccountNo) {
|
|---|
| 1588 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1589 |
|
|---|
| 1590 | if (substr($AccountNo,2,1) == '9') {
|
|---|
| 1591 | $Mark80 = $this->Mark51($AccountNo);
|
|---|
| 1592 | } else {
|
|---|
| 1593 | $Mark80 = $this->Method00($AccountNo, '000021212', 10);
|
|---|
| 1594 | }
|
|---|
| 1595 | if ($Mark80 != 0){
|
|---|
| 1596 | $Significance='000021212';
|
|---|
| 1597 | $Help = 0;
|
|---|
| 1598 | $Mark80 = 1;
|
|---|
| 1599 |
|
|---|
| 1600 | for ($Run = 0; $Run < strlen($Significance); $Run++) {
|
|---|
| 1601 | $Help += $this->CrossSum(substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
|
|---|
| 1602 | }
|
|---|
| 1603 | $Help = $Help % 7;
|
|---|
| 1604 | $Checksum = 7 - $Help;
|
|---|
| 1605 |
|
|---|
| 1606 | if ($Checksum == 10) {
|
|---|
| 1607 | $Checksum = 0;
|
|---|
| 1608 | }
|
|---|
| 1609 | if ($Checksum == substr($AccountNo,9,1)) {
|
|---|
| 1610 | $Mark80 = 0;
|
|---|
| 1611 | }
|
|---|
| 1612 | }
|
|---|
| 1613 | return $Mark80;
|
|---|
| 1614 | } /* End of Mark80 */
|
|---|
| 1615 |
|
|---|
| 1616 | private function Mark81($AccountNo) {
|
|---|
| 1617 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1618 | if (substr($AccountNo,2,1) == '9') {
|
|---|
| 1619 | $Mark81 = $this->Mark10($AccountNo);
|
|---|
| 1620 | } else {
|
|---|
| 1621 | $Mark81 = $this->Mark51($AccountNo);
|
|---|
| 1622 | }
|
|---|
| 1623 | return $Mark81;
|
|---|
| 1624 | } /* End of Mark81 */
|
|---|
| 1625 |
|
|---|
| 1626 | private function Mark82($AccountNo) {
|
|---|
| 1627 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1628 | if (substr($AccountNo,2, 2) == '99') {
|
|---|
| 1629 | $Mark82 = $this->Mark10($AccountNo);
|
|---|
| 1630 | } else {
|
|---|
| 1631 | $Mark82 = $this->Mark33($AccountNo);
|
|---|
| 1632 | }
|
|---|
| 1633 | return $Mark82;
|
|---|
| 1634 | } /* End of Mark82 */
|
|---|
| 1635 |
|
|---|
| 1636 | // --- Fix FrankM 20081208 ---
|
|---|
| 1637 | private function Mark83($AccountNo) {
|
|---|
| 1638 | // Methode A
|
|---|
| 1639 | $Help = $this->Mark32($AccountNo);
|
|---|
| 1640 | if ($Help == 1) {
|
|---|
| 1641 | // Methode B
|
|---|
| 1642 | $Help = $this->Mark33($AccountNo);
|
|---|
| 1643 | if ($Help == 1) {
|
|---|
| 1644 | // 10. Stelle 7, 8 oder 9 = ungueltig
|
|---|
| 1645 | switch (substr($AccountNo, -1)) {
|
|---|
| 1646 | case '7' :
|
|---|
| 1647 | case '8' :
|
|---|
| 1648 | case '9' :
|
|---|
| 1649 | $Help = 1;
|
|---|
| 1650 | break;
|
|---|
| 1651 | default :
|
|---|
| 1652 | // Methode C: Modulus 7, Gewichtung 2, 3, 4, 5, 6
|
|---|
| 1653 | $Help = $this->Method06($AccountNo, '000065432', FALSE, 10, 7);
|
|---|
| 1654 | break;
|
|---|
| 1655 | }
|
|---|
| 1656 | }
|
|---|
| 1657 | }
|
|---|
| 1658 | $Mark83 = $Help;
|
|---|
| 1659 | return $Mark83;
|
|---|
| 1660 | } /* End of Mark83 */
|
|---|
| 1661 |
|
|---|
| 1662 | /* --- Changed Christian Rothe 20130603 --- */
|
|---|
| 1663 | private function Mark84($AccountNo) {
|
|---|
| 1664 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1665 | if (substr($AccountNo, 2, 1) != '9') {
|
|---|
| 1666 | // Methode A: Modulus 11, Gewichtung 2, 3, 4, 5, 6
|
|---|
| 1667 | $Help = $this->Method06($AccountNo, '000065432', FALSE, 10, 11);
|
|---|
| 1668 | // Methode B: Modulus 7, Gewichtung 2, 3, 4, 5, 6
|
|---|
| 1669 | if ($Help == 1) {
|
|---|
| 1670 | $Help = $this->Method06($AccountNo, '000065432', FALSE, 10, 7);
|
|---|
| 1671 | }
|
|---|
| 1672 | // Methode C: Modulus 10, Gewichtung 2, 1, 2, 1, 2
|
|---|
| 1673 | if ($Help == 1) {
|
|---|
| 1674 | $Help = $this->Method06($AccountNo, '000021212', FALSE, 10, 10);
|
|---|
| 1675 | }
|
|---|
| 1676 | } else {
|
|---|
| 1677 | $Help = $this->Mark51($AccountNo);
|
|---|
| 1678 | }
|
|---|
| 1679 | return $Help;
|
|---|
| 1680 | } /* End of Mark84 */
|
|---|
| 1681 |
|
|---|
| 1682 | // --- Fix FrankM 20080717 ---
|
|---|
| 1683 | private function Mark85($AccountNo) {
|
|---|
| 1684 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1685 | // Zuerst Typ A = Modifizierte Methode 6.
|
|---|
| 1686 | $Help = $this->Method06($AccountNo, '000765432', FALSE, 10, 11);
|
|---|
| 1687 | if ($Help == 0) {
|
|---|
| 1688 | return $Help;
|
|---|
| 1689 | } else {
|
|---|
| 1690 | // Wenn falsch, dann Typ B = Methode 33 (Modifizierte Methode 6).
|
|---|
| 1691 | $Help = $this->Method06($AccountNo, '000065432', FALSE, 10, 11);
|
|---|
| 1692 | }
|
|---|
| 1693 | if ($Help == 0) {
|
|---|
| 1694 | return $Help;
|
|---|
| 1695 | } else {
|
|---|
| 1696 | // Wenn falsch, dann Typ C.
|
|---|
| 1697 | // Wenn zehnte Stelle = 7, 8, oder 9 dann Kontonummer ungueltig.
|
|---|
| 1698 | if ($AccountNo[9] == '7' or $AccountNo[9] == '8' or $AccountNo[9] == '9') {
|
|---|
| 1699 | return $Help;
|
|---|
| 1700 | } else {
|
|---|
| 1701 | // Methode 33 (Modifizierte Methode 6 mit Divisor 7).
|
|---|
| 1702 | if (substr($AccountNo, 2, 2) != '99') {
|
|---|
| 1703 | $Help = $this->Method06($AccountNo, '000065432', FALSE, 10, 7);
|
|---|
| 1704 | // Wenn 3. und 4. Stelle = 99, dann Modifizierte Methode 2.
|
|---|
| 1705 | } else {
|
|---|
| 1706 | $Help = $this->Method02($AccountNo, '008765432', FALSE);
|
|---|
| 1707 | }
|
|---|
| 1708 | }
|
|---|
| 1709 | }
|
|---|
| 1710 | return $Help;
|
|---|
| 1711 | } /* End of Mark85 */
|
|---|
| 1712 |
|
|---|
| 1713 | private function Mark86($AccountNo) {
|
|---|
| 1714 | $Help = $this->Method00($AccountNo, '000121212', 10);
|
|---|
| 1715 | if ($Help == 1) {
|
|---|
| 1716 | if (substr($AccountNo,2,1) == '9') {
|
|---|
| 1717 | $Help = $this->Method06($AccountNo, 'A98765432', TRUE, 10, 11);
|
|---|
| 1718 | } else {
|
|---|
| 1719 | $Help = $this->Method06($AccountNo, '000765432', FALSE, 10, 11);
|
|---|
| 1720 | }
|
|---|
| 1721 | }
|
|---|
| 1722 | $Mark86 = $Help;
|
|---|
| 1723 | return $Mark86;
|
|---|
| 1724 | } /* End of Mark86 */
|
|---|
| 1725 |
|
|---|
| 1726 | private function Mark87($AccountNo) {
|
|---|
| 1727 | $Tab1[0] = 0;
|
|---|
| 1728 | $Tab1[1] = 4;
|
|---|
| 1729 | $Tab1[2] = 3;
|
|---|
| 1730 | $Tab1[3] = 2;
|
|---|
| 1731 | $Tab1[4] = 6;
|
|---|
| 1732 |
|
|---|
| 1733 | $Tab2[0] = 7;
|
|---|
| 1734 | $Tab2[1] = 1;
|
|---|
| 1735 | $Tab2[2] = 5;
|
|---|
| 1736 | $Tab2[3] = 9;
|
|---|
| 1737 | $Tab2[4] = 8;
|
|---|
| 1738 |
|
|---|
| 1739 | $Result = 1;
|
|---|
| 1740 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1741 | if (substr($AccountNo,2,1) == '9') {
|
|---|
| 1742 | $Result = $this->Mark10($AccountNo);
|
|---|
| 1743 | } else {
|
|---|
| 1744 | for ($Run = 0; $Run < strlen($AccountNo); $Run++) {
|
|---|
| 1745 | // $AccountNoTemp[$Run + 1] = (int) substr($AccountNo,$Run,1);
|
|---|
| 1746 | $AccountNoTemp[$Run] = (int) substr($AccountNo,$Run,1);
|
|---|
| 1747 | }
|
|---|
| 1748 |
|
|---|
| 1749 | $i = 4;
|
|---|
| 1750 | while ($AccountNoTemp[$i] == 0) {
|
|---|
| 1751 | $i++;
|
|---|
| 1752 | }
|
|---|
| 1753 |
|
|---|
| 1754 | $C2 = $i % 2;
|
|---|
| 1755 | $D2 = 0;
|
|---|
| 1756 | $A5 = 0;
|
|---|
| 1757 | while ($i < 10) {
|
|---|
| 1758 | switch ($AccountNoTemp[$i]) {
|
|---|
| 1759 | case 0 :
|
|---|
| 1760 | $AccountNoTemp[$i] = 5;
|
|---|
| 1761 | break;
|
|---|
| 1762 | case 1 :
|
|---|
| 1763 | $AccountNoTemp[$i] = 6;
|
|---|
| 1764 | break;
|
|---|
| 1765 | case 5:
|
|---|
| 1766 | $AccountNoTemp[$i] = 10;
|
|---|
| 1767 | break;
|
|---|
| 1768 | case 6:
|
|---|
| 1769 | $AccountNoTemp[$i] = 1;
|
|---|
| 1770 | break;
|
|---|
| 1771 | }
|
|---|
| 1772 | if ($C2 == $D2) {
|
|---|
| 1773 | if ($AccountNoTemp[$i] > 5) {
|
|---|
| 1774 | if(($C2 == 0) AND ($D2 == 0)) {
|
|---|
| 1775 | $C2 = 1;
|
|---|
| 1776 | $D2 = 1;
|
|---|
| 1777 | $A5 = $A5 + 6 - ($AccountNoTemp[$i] - 6);
|
|---|
| 1778 | } else {
|
|---|
| 1779 | $C2 = 0;
|
|---|
| 1780 | $D2 = 0;
|
|---|
| 1781 | $A5 = $A5 + $AccountNoTemp[$i];
|
|---|
| 1782 | } //end if(($C2 == 0) AND ($D2 == 0))
|
|---|
| 1783 | } else {
|
|---|
| 1784 | if (($C2 == 0) AND ($D2 == 0)) {
|
|---|
| 1785 | $C2 = 1;
|
|---|
| 1786 | $A5 = $A5 + $AccountNoTemp[$i];
|
|---|
| 1787 | } else {
|
|---|
| 1788 | $C2 = 0;
|
|---|
| 1789 | $A5 = $A5 + $AccountNoTemp[$i];
|
|---|
| 1790 | }
|
|---|
| 1791 | }
|
|---|
| 1792 | } else {
|
|---|
| 1793 | if ($AccountNoTemp[$i] > 5) {
|
|---|
| 1794 | if ($C2 == 0) {
|
|---|
| 1795 | $C2 = 1;
|
|---|
| 1796 | $D2 = 0;
|
|---|
| 1797 | $A5 = $A5 - 6 + ($AccountNoTemp[$i] - 6);
|
|---|
| 1798 | } else {
|
|---|
| 1799 | $C2 = 0;
|
|---|
| 1800 | $D2 = 1;
|
|---|
| 1801 | $A5 = $A5 - $AccountNoTemp[$i];
|
|---|
| 1802 | }
|
|---|
| 1803 | } else {
|
|---|
| 1804 | if ($C2 == 0) {
|
|---|
| 1805 | $C2 = 1;
|
|---|
| 1806 | $A5 = $A5 - $AccountNoTemp[$i];
|
|---|
| 1807 | } else {
|
|---|
| 1808 | $C2 = 0;
|
|---|
| 1809 | $A5 = $A5 - $AccountNoTemp[$i];
|
|---|
| 1810 | }
|
|---|
| 1811 | }
|
|---|
| 1812 | }
|
|---|
| 1813 | $i++;
|
|---|
| 1814 | }
|
|---|
| 1815 | while (($A5 < 0) OR ($A5 > 4)) {
|
|---|
| 1816 | if ($A5 > 4) {
|
|---|
| 1817 | $A5 = $A5 - 5;
|
|---|
| 1818 | } else {
|
|---|
| 1819 | $A5 = $A5 + 5;
|
|---|
| 1820 | }
|
|---|
| 1821 | }
|
|---|
| 1822 | if ($D2 == 0) {
|
|---|
| 1823 | $P = $Tab1[$A5];
|
|---|
| 1824 | } else {
|
|---|
| 1825 | $P = $Tab2[$A5];
|
|---|
| 1826 | }
|
|---|
| 1827 | if ($P == $AccountNoTemp[10]) {
|
|---|
| 1828 | $Result = 0;
|
|---|
| 1829 | } else {
|
|---|
| 1830 | if ($AccountNoTemp[4] == 0) {
|
|---|
| 1831 | if ($P > 4) {
|
|---|
| 1832 | $P = $P - 5;
|
|---|
| 1833 | } else {
|
|---|
| 1834 | $P = $P + 5;
|
|---|
| 1835 | }
|
|---|
| 1836 | if ($P == $AccountNoTemp[10] ) {
|
|---|
| 1837 | $Result = 0;
|
|---|
| 1838 | }
|
|---|
| 1839 | }
|
|---|
| 1840 | }
|
|---|
| 1841 | if ($Result <> 0 ) {
|
|---|
| 1842 | $Result = $this->Mark33($AccountNo);
|
|---|
| 1843 | if ($Result <> 0 ) {
|
|---|
| 1844 | $Result = $this->Method06($AccountNo,'000065432',FALSE,10,7);
|
|---|
| 1845 | }
|
|---|
| 1846 | }
|
|---|
| 1847 | }
|
|---|
| 1848 | return $Result;
|
|---|
| 1849 | } /* End of Mark87 */
|
|---|
| 1850 |
|
|---|
| 1851 | private function Mark88($AccountNo) {
|
|---|
| 1852 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1853 | if (substr($AccountNo,2,1) == '9') {
|
|---|
| 1854 | $Mark88 = $this->Method06($AccountNo, '008765432', FALSE, 10, 11);
|
|---|
| 1855 | } else {
|
|---|
| 1856 | $Mark88 = $this->Method06($AccountNo, '000765432', FALSE, 10, 11);
|
|---|
| 1857 | }
|
|---|
| 1858 | return $Mark88;
|
|---|
| 1859 | } /* End of Mark88 */
|
|---|
| 1860 |
|
|---|
| 1861 | private function Mark89($AccountNo) {
|
|---|
| 1862 | $Correct = 1;
|
|---|
| 1863 | switch (strlen($AccountNo)) {
|
|---|
| 1864 | case 1 :
|
|---|
| 1865 | case 2 :
|
|---|
| 1866 | case 3 :
|
|---|
| 1867 | case 4 :
|
|---|
| 1868 | case 5 :
|
|---|
| 1869 | case 6 :
|
|---|
| 1870 | case 10 :
|
|---|
| 1871 | $Correct = 4;
|
|---|
| 1872 | break;
|
|---|
| 1873 | case 7 :
|
|---|
| 1874 | case 9 :
|
|---|
| 1875 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1876 | $Correct = $this->Method06($AccountNo,'098765432',FALSE,10,11);
|
|---|
| 1877 | break;
|
|---|
| 1878 | default :
|
|---|
| 1879 | if ((((int)$AccountNo > 32000005) and ((int)$AccountNo < 38999995)) or (((int)$AccountNo >1999999999) AND ((int)$AccountNo <400000000))) {
|
|---|
| 1880 | $Correct = $this->Mark10($AccountNo);
|
|---|
| 1881 | }
|
|---|
| 1882 | }
|
|---|
| 1883 | return $Correct;
|
|---|
| 1884 | } /* End of Mark89 */
|
|---|
| 1885 |
|
|---|
| 1886 | private function Mark90($AccountNo) {
|
|---|
| 1887 | $Help = $this->Method06($AccountNo, '000765432', FALSE, 10, 11); // Methode A
|
|---|
| 1888 | if ($Help != 0) {
|
|---|
| 1889 | $Help = $this->Method06($AccountNo, '000065432', FALSE, 10, 11); // Methode B
|
|---|
| 1890 | if ($Help != 0) {
|
|---|
| 1891 | switch (substr($AccountNo,-1)) {
|
|---|
| 1892 | case '7' :
|
|---|
| 1893 | case '8' :
|
|---|
| 1894 | case '9' :
|
|---|
| 1895 | $Help = 4;
|
|---|
| 1896 | break;
|
|---|
| 1897 | default :
|
|---|
| 1898 | $Help = $this->Method06($AccountNo, '000065432', FALSE, 10, 7); //Methode C
|
|---|
| 1899 | break;
|
|---|
| 1900 | }
|
|---|
| 1901 | }
|
|---|
| 1902 | if ($Help != 0) {
|
|---|
| 1903 | $Help = $this->Method06($AccountNo, '000065432',FALSE, 10, 9); //Methode D
|
|---|
| 1904 | }
|
|---|
| 1905 | if ($Help != 0) {
|
|---|
| 1906 | $Help = $this->Method06($AccountNo, '000021212',FALSE, 10, 10); //Methode E
|
|---|
| 1907 | }
|
|---|
| 1908 | }
|
|---|
| 1909 | return $Help;
|
|---|
| 1910 | } /* End of Mark90 */
|
|---|
| 1911 |
|
|---|
| 1912 | private function Mark91($AccountNo) {
|
|---|
| 1913 | $Help = $this->Method06($AccountNo, '765432', FALSE, 7, 11);
|
|---|
| 1914 | if ($Help == 1) {
|
|---|
| 1915 | $Help = $this->Method06($AccountNo, '234567', FALSE, 7, 11);
|
|---|
| 1916 | if ($Help == 1) {
|
|---|
| 1917 | $Help = $this->Method06($AccountNo, 'A987650432', TRUE, 7, 11);
|
|---|
| 1918 | if ($Help == 1) {
|
|---|
| 1919 | $Help = $this->Method06($AccountNo, '9A5842', TRUE, 7, 11);
|
|---|
| 1920 | }
|
|---|
| 1921 | }
|
|---|
| 1922 | }
|
|---|
| 1923 | return $Help;
|
|---|
| 1924 | } /* End of Mark91 */
|
|---|
| 1925 |
|
|---|
| 1926 | private function Mark92($AccountNo) {
|
|---|
| 1927 | $Mark92 = $this->Method01($AccountNo, '000173173');
|
|---|
| 1928 | return $Mark92;
|
|---|
| 1929 | } /* End of Mark92 */
|
|---|
| 1930 |
|
|---|
| 1931 | private function Mark93($AccountNo) {
|
|---|
| 1932 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1933 | $Correct = 1;
|
|---|
| 1934 | if (substr($AccountNo,0,4) == '0000') {
|
|---|
| 1935 | $Correct = $this->Method06($AccountNo,'000065432',FALSE,10,11);
|
|---|
| 1936 | } else {
|
|---|
| 1937 | $Correct = $this->Method06($AccountNo,'65432',FALSE,10,11);
|
|---|
| 1938 | }
|
|---|
| 1939 | if ($Correct == 1) {
|
|---|
| 1940 | if (substr($AccountNo,0,4) == '0000') {
|
|---|
| 1941 | $Correct = $this->Method06($AccountNo,'000065432',FALSE,10,7);
|
|---|
| 1942 | } else {
|
|---|
| 1943 | $Correct = $this->Method06($AccountNo,'65432',FALSE,10,7);
|
|---|
| 1944 | }
|
|---|
| 1945 | }
|
|---|
| 1946 | $Mark93 = $Correct;
|
|---|
| 1947 | return $Mark93;
|
|---|
| 1948 | } /* End of Mark93 */
|
|---|
| 1949 |
|
|---|
| 1950 | private function Mark94($AccountNo) {
|
|---|
| 1951 | $Mark94 = $this->Method00($AccountNo, '121212121', 10);
|
|---|
| 1952 | return $Mark94;
|
|---|
| 1953 | } /* End of Mark94 */
|
|---|
| 1954 |
|
|---|
| 1955 | /* --- Changed Christian Rothe 20130909 --- */
|
|---|
| 1956 | private function Mark95($AccountNo) {
|
|---|
| 1957 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1958 |
|
|---|
| 1959 | switch($AccountNo) {
|
|---|
| 1960 | case ($AccountNo >= '0000000001' && $AccountNo <= '0001999999'):
|
|---|
| 1961 | case ($AccountNo >= '0009000000' && $AccountNo <= '0025999999'):
|
|---|
| 1962 | case ($AccountNo >= '0396000000' && $AccountNo <= '0499999999'):
|
|---|
| 1963 | case ($AccountNo >= '0700000000' && $AccountNo <= '0799999999'):
|
|---|
| 1964 | case ($AccountNo >= '0910000000' && $AccountNo <= '0989999999'):
|
|---|
| 1965 | $Mark95 = 4;
|
|---|
| 1966 | break;
|
|---|
| 1967 | default:
|
|---|
| 1968 | $Mark95 = $this->Method06($AccountNo, '432765432', FALSE, 10, 11);
|
|---|
| 1969 | }
|
|---|
| 1970 |
|
|---|
| 1971 | return $Mark95;
|
|---|
| 1972 | } /* End of Mark95 */
|
|---|
| 1973 |
|
|---|
| 1974 | private function Mark96($AccountNo) {
|
|---|
| 1975 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1976 | $Help = $this->Mark19($AccountNo);
|
|---|
| 1977 | if ($Help == 1) {
|
|---|
| 1978 | $Help = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 1979 | if ($Help == 1) {
|
|---|
| 1980 | if ((int) $AccountNo >1299999) {
|
|---|
| 1981 | if ((int) $AccountNo < 99400000) {
|
|---|
| 1982 | $Help = 0;
|
|---|
| 1983 | }
|
|---|
| 1984 | }
|
|---|
| 1985 | }
|
|---|
| 1986 | }
|
|---|
| 1987 | return $Help;
|
|---|
| 1988 | } /* End of Mark96 */
|
|---|
| 1989 |
|
|---|
| 1990 | private function Mark97($AccountNo) {
|
|---|
| 1991 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 1992 | $Help = (int) substr($AccountNo, 0, 9) % 11;
|
|---|
| 1993 | if ($Help == 10) {
|
|---|
| 1994 | $Help = 0;
|
|---|
| 1995 | }
|
|---|
| 1996 | if (substr($AccountNo,-1) == $Help) {
|
|---|
| 1997 | $Mark97 = 0;
|
|---|
| 1998 | } else {
|
|---|
| 1999 | $Mark97 = 1;
|
|---|
| 2000 | }
|
|---|
| 2001 | return $Mark97;
|
|---|
| 2002 | } /* End of Mark97 */
|
|---|
| 2003 |
|
|---|
| 2004 | private function Mark98($AccountNo) {
|
|---|
| 2005 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2006 | $Correct = $this->Method01($AccountNo,'003713713');
|
|---|
| 2007 | if ($Correct == 1) {
|
|---|
| 2008 | $Correct = $this->Mark32($AccountNo);
|
|---|
| 2009 | }
|
|---|
| 2010 | $Mark98 = $Correct;
|
|---|
| 2011 | return $Mark98;
|
|---|
| 2012 | } /* End of Mark98 */
|
|---|
| 2013 |
|
|---|
| 2014 | private function Mark99($AccountNo) {
|
|---|
| 2015 | $Mark99 = $this->Method06($AccountNo, '432765432', FALSE, 10, 11);
|
|---|
| 2016 | if ((int) $AccountNo >= 396000000 && (int) $AccountNo <= 499999999) {
|
|---|
| 2017 | $Mark99 = 4;
|
|---|
| 2018 | }
|
|---|
| 2019 | return $Mark99;
|
|---|
| 2020 | } /* End of Mark99 */
|
|---|
| 2021 |
|
|---|
| 2022 | private function MarkA1($AccountNo) {
|
|---|
| 2023 | if (strlen($AccountNo) == 8 OR strlen($AccountNo)==10){
|
|---|
| 2024 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2025 | $MarkA1 = $this->Method00($AccountNo, '002121212', 10);
|
|---|
| 2026 | } else {
|
|---|
| 2027 | $MarkA1 = 1;
|
|---|
| 2028 | }
|
|---|
| 2029 | return $MarkA1;
|
|---|
| 2030 | } /* End of MarkA1 */
|
|---|
| 2031 |
|
|---|
| 2032 | private function MarkA2($AccountNo) {
|
|---|
| 2033 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2034 | $MarkA2 = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 2035 | if ($MarkA2 != 0){
|
|---|
| 2036 | $MarkA2 = $this->Mark04($AccountNo);
|
|---|
| 2037 | }
|
|---|
| 2038 | return $MarkA2;
|
|---|
| 2039 | } /* End of MarkA2 */
|
|---|
| 2040 |
|
|---|
| 2041 | private function MarkA3($AccountNo) {
|
|---|
| 2042 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2043 | $RetVal = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 2044 | if ($RetVal != 0){
|
|---|
| 2045 | $RetVal = $this->Mark10($AccountNo);
|
|---|
| 2046 | }
|
|---|
| 2047 | return $RetVal;
|
|---|
| 2048 | } /* End of MarkA3 */
|
|---|
| 2049 |
|
|---|
| 2050 | private function MarkA4($AccountNo) {
|
|---|
| 2051 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2052 | if ((int) substr($AccountNo, 2,2) != 99){
|
|---|
| 2053 | /* Variante 1 */
|
|---|
| 2054 | $MarkA4 = $this->Method06($AccountNo,'000765432',FALSE, 10,11);
|
|---|
| 2055 | if ($MarkA4 !=0){
|
|---|
| 2056 | /* Variante 2 */
|
|---|
| 2057 | $Significance='000765432';
|
|---|
| 2058 | $MarkA4 = 1;
|
|---|
| 2059 | $Help = 0;
|
|---|
| 2060 | for ($Run = 0; $Run < strlen($Significance); $Run++) {
|
|---|
| 2061 | $Help += substr($AccountNo,$Run,1) * substr($Significance,$Run,1);
|
|---|
| 2062 | }
|
|---|
| 2063 | $Help = $Help % 7;
|
|---|
| 2064 | $Checksum = 7 - $Help;
|
|---|
| 2065 |
|
|---|
| 2066 | if ($Help == 0) {
|
|---|
| 2067 | $Checksum = 0;
|
|---|
| 2068 | }
|
|---|
| 2069 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 2070 | $MarkA4 = 0;
|
|---|
| 2071 | }
|
|---|
| 2072 | }
|
|---|
| 2073 | if ($MarkA4 != 0){
|
|---|
| 2074 | /* Variante 4 */
|
|---|
| 2075 | $MarkA4 = $this->Mark93($AccountNo);
|
|---|
| 2076 | }
|
|---|
| 2077 | } else {
|
|---|
| 2078 | /* Variante 3 */
|
|---|
| 2079 | $MarkA4 = $this->Method06($AccountNo,'000065432',FALSE,10,11);
|
|---|
| 2080 | if ($MarkA4 != 0){
|
|---|
| 2081 | /* Variante 4 */
|
|---|
| 2082 | $MarkA4 = $this->Mark93($AccountNo);
|
|---|
| 2083 | }
|
|---|
| 2084 | }
|
|---|
| 2085 | return $MarkA4;
|
|---|
| 2086 | } /* End of MarkA4 */
|
|---|
| 2087 |
|
|---|
| 2088 | private function MarkA5($AccountNo) {
|
|---|
| 2089 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2090 | $MarkA5 = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 2091 | if ($MarkA5 != 0){
|
|---|
| 2092 | if (substr($AccountNo,1,1) != "9"){
|
|---|
| 2093 | $MarkA5 = $this->Mark10($AccountNo);
|
|---|
| 2094 | } else {
|
|---|
| 2095 | $MarkA5 = 1;
|
|---|
| 2096 | }
|
|---|
| 2097 | }
|
|---|
| 2098 | return $MarkA5;
|
|---|
| 2099 | } /* End of MarkA5 */
|
|---|
| 2100 |
|
|---|
| 2101 | private function MarkA6($AccountNo) {
|
|---|
| 2102 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2103 | if (substr($AccountNo,1,1) != "8"){
|
|---|
| 2104 | $RetVal = $this->Method01($AccountNo, '173173173');
|
|---|
| 2105 | } else {
|
|---|
| 2106 | $RetVal = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 2107 | }
|
|---|
| 2108 | return $RetVal;
|
|---|
| 2109 | } /* End of MarkA6 */
|
|---|
| 2110 |
|
|---|
| 2111 | private function MarkA7($AccountNo) {
|
|---|
| 2112 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2113 | $RetVal = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 2114 | if ($RetVal != 0){
|
|---|
| 2115 | $RetVal = $this->Mark03($AccountNo);
|
|---|
| 2116 | }
|
|---|
| 2117 | return $RetVal;
|
|---|
| 2118 | } /* End of MarkA7 */
|
|---|
| 2119 |
|
|---|
| 2120 | private function MarkA8($AccountNo) {
|
|---|
| 2121 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2122 | $RetVal = $this->Mark81($AccountNo);
|
|---|
| 2123 | if ($RetVal != 0){
|
|---|
| 2124 | if (substr($AccountNo,2,1) != "9"){
|
|---|
| 2125 | $RetVal = $this->Mark73($AccountNo);
|
|---|
| 2126 | } else {
|
|---|
| 2127 | $RetVal = 1;
|
|---|
| 2128 | }
|
|---|
| 2129 | }
|
|---|
| 2130 | return $RetVal;
|
|---|
| 2131 | } /* End of MarkA8 */
|
|---|
| 2132 |
|
|---|
| 2133 | /* --- Fixed FrankM 20050408 --- */
|
|---|
| 2134 | private function MarkA9($AccountNo) {
|
|---|
| 2135 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2136 | $RetVal = $this->Method01($AccountNo, '173173173');
|
|---|
| 2137 | if ($RetVal != 0){
|
|---|
| 2138 | $RetVal = $this->Method06($AccountNo, '432765432', FALSE, 10, 11);
|
|---|
| 2139 | }
|
|---|
| 2140 | return $RetVal;
|
|---|
| 2141 | } /* End of MarkA9 */
|
|---|
| 2142 |
|
|---|
| 2143 |
|
|---|
| 2144 | /* --- Added FrankM 20050408 --- */
|
|---|
| 2145 | /* --- Wird aktuell von keiner Bank benutzt (09/2007 - 12/2007) ---*/
|
|---|
| 2146 | private function MarkB0($AccountNo) {
|
|---|
| 2147 | if (strlen($AccountNo) != 10 OR substr($AccountNo,0,1) == "8"){
|
|---|
| 2148 | $RetVal = 1;
|
|---|
| 2149 | } else {
|
|---|
| 2150 | if (substr($AccountNo,9,1) == "1" OR substr($AccountNo,9,1) == "2" OR substr($AccountNo,9,1) == "3" OR substr($AccountNo,9,1) == "6"){
|
|---|
| 2151 | $RetVal = 0;
|
|---|
| 2152 | } else {
|
|---|
| 2153 | $RetVal = $this->Method06($AccountNo, '432765432', FALSE, 10, 11);
|
|---|
| 2154 | }
|
|---|
| 2155 | }
|
|---|
| 2156 | return $RetVal;
|
|---|
| 2157 | } /* End of MarkB0 */
|
|---|
| 2158 |
|
|---|
| 2159 | /* --- Added FrankM 20050413 --- */
|
|---|
| 2160 | private function MarkB1($AccountNo) {
|
|---|
| 2161 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2162 | $RetVal = $this->Method01($AccountNo, '137137137');
|
|---|
| 2163 | if ($RetVal != 0){
|
|---|
| 2164 | $RetVal = $this->Method01($AccountNo, '173173173');
|
|---|
| 2165 | }
|
|---|
| 2166 | return $RetVal;
|
|---|
| 2167 | } /* End of MarkB1 */
|
|---|
| 2168 |
|
|---|
| 2169 | /* --- Added FrankM 20050415 --- */
|
|---|
| 2170 | private function MarkB2($AccountNo) {
|
|---|
| 2171 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2172 | if (substr($AccountNo,0,1) <= "7"){
|
|---|
| 2173 | $RetVal = $this->Method02($AccountNo, '298765432', FALSE);
|
|---|
| 2174 | } else {
|
|---|
| 2175 | $RetVal = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 2176 | }
|
|---|
| 2177 | return $RetVal;
|
|---|
| 2178 | } /* End of MarkB2 */
|
|---|
| 2179 |
|
|---|
| 2180 | /* --- Added FrankM 20050415 --- */
|
|---|
| 2181 | private function MarkB3($AccountNo) {
|
|---|
| 2182 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2183 | if (substr($AccountNo,0,1) <= "8"){
|
|---|
| 2184 | $RetVal = $this->Method06($AccountNo, '000765432', FALSE, 10, 11);
|
|---|
| 2185 | } else {
|
|---|
| 2186 | $RetVal = $this->Method06($AccountNo, '432765432', FALSE, 10, 11);
|
|---|
| 2187 | }
|
|---|
| 2188 | return $RetVal;
|
|---|
| 2189 | } /* End of MarkB3 */
|
|---|
| 2190 |
|
|---|
| 2191 | /* --- Added FrankM 20050415 --- */
|
|---|
| 2192 | private function MarkB4($AccountNo) {
|
|---|
| 2193 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2194 | if (substr($AccountNo,0,1) == "9"){
|
|---|
| 2195 | $RetVal = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 2196 | } else {
|
|---|
| 2197 | $RetVal = $this->Method02($AccountNo, '298765432', FALSE);
|
|---|
| 2198 | }
|
|---|
| 2199 | return $RetVal;
|
|---|
| 2200 | } /* End of MarkB4 */
|
|---|
| 2201 |
|
|---|
| 2202 | /* --- Added FrankM 20050727 --- */
|
|---|
| 2203 | private function MarkB5($AccountNo) {
|
|---|
| 2204 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2205 | $RetVal = $this->Method01($AccountNo, '137137137');
|
|---|
| 2206 | if ($RetVal != 0){
|
|---|
| 2207 | if ((substr($AccountNo,0,1) == '8') Or (substr($AccountNo,0,1) == '9')) {
|
|---|
| 2208 | return $RetVal;
|
|---|
| 2209 | }
|
|---|
| 2210 | $RetVal = $this->Method00($AccountNo, '212121212', 10);
|
|---|
| 2211 | }
|
|---|
| 2212 | return $RetVal;
|
|---|
| 2213 | } /* End of MarkB5 */
|
|---|
| 2214 |
|
|---|
| 2215 | /* --- Added FrankM 20060112 ---
|
|---|
| 2216 | --- Hotfix 20070717 ---
|
|---|
| 2217 | --- Hotfix FrankM 20080110 --- */
|
|---|
| 2218 | /* --- Changed Christian Rothe 20110901 --- */
|
|---|
| 2219 |
|
|---|
| 2220 | private function MarkB6($AccountNo, $BLZ) {
|
|---|
| 2221 | // Wenn Laenge = 9 dann Kontonummer fuer Methode 53 merken, Hotfix 20080110.
|
|---|
| 2222 | if (strlen($AccountNo) == 9) {
|
|---|
| 2223 | $AccountNoShort = $AccountNo;
|
|---|
| 2224 | }
|
|---|
| 2225 | // Mit fuehrenden Nullen auf 10 erweitern.
|
|---|
| 2226 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2227 | // Kontonummern, die an der 1. Stelle den Wert 1-9 beinhalten, nach Methode 20 pruefen.
|
|---|
| 2228 | // Ebenso Kontonummern, die an den Stellen 15 die Werte 02691-02699 beinhalten, nach Methode 20 pruefen.
|
|---|
| 2229 | if (((int)(substr($AccountNo,0 ,1)) <= 9 && (int)(substr($AccountNo,0 ,1)) > 0 ) || (substr($AccountNo,0 ,5) <= '02699' && substr($AccountNo,0 ,5) >= '02691' )){ //franky_n
|
|---|
| 2230 | $RetVal = $this->Mark20($AccountNo);
|
|---|
| 2231 | } else {
|
|---|
| 2232 | // Fuer Methode 53 muss die Laenge der Kontonummer = 9 sein
|
|---|
| 2233 | if (strlen($AccountNoShort) == 9) {
|
|---|
| 2234 | $RetVal = $this->Mark53($AccountNoShort, $BLZ);
|
|---|
| 2235 | } else {
|
|---|
| 2236 | $RetVal = 1;
|
|---|
| 2237 | }
|
|---|
| 2238 | }
|
|---|
| 2239 | return $RetVal;
|
|---|
| 2240 | } /* End of MarkB6 */
|
|---|
| 2241 |
|
|---|
| 2242 | /* --- Added FrankM 20060112 --- */
|
|---|
| 2243 | private function MarkB7($AccountNo) {
|
|---|
| 2244 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2245 | $AccountFloat = doubleval($AccountNo);
|
|---|
| 2246 | if (($AccountFloat >= 1000000) And ($AccountFloat <= 5999999)) {
|
|---|
| 2247 | $RetVal = $this->Method01($AccountNo, '173173173');
|
|---|
| 2248 | } elseif (($AccountFloat >= 700000000) And ($AccountFloat <= 899999999)) {
|
|---|
| 2249 | $RetVal = $this->Method01($AccountNo, '173173173');
|
|---|
| 2250 | } else {
|
|---|
| 2251 | $RetVal = 2;
|
|---|
| 2252 | }
|
|---|
| 2253 | return $RetVal;
|
|---|
| 2254 | } /* End of MarkB7 */
|
|---|
| 2255 |
|
|---|
| 2256 | /* --- Added FrankM 20060112 --- */
|
|---|
| 2257 | /* --- Changed Christian Rothe 20110606 --- */
|
|---|
| 2258 | /* --- 20110606: Aenderung des Verfahrens durch die Bundesbank --- */
|
|---|
| 2259 | private function MarkB8($AccountNo) {
|
|---|
| 2260 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2261 | $RetVal = $this->Mark20($AccountNo);
|
|---|
| 2262 | if ($RetVal != 0){
|
|---|
| 2263 | $RetVal = $this->Mark29($AccountNo);
|
|---|
| 2264 | }
|
|---|
| 2265 | if ($RetVal != 0){
|
|---|
| 2266 | if (($AccountNo >= 5100000000) And ($AccountNo <= 5999999999)) {
|
|---|
| 2267 | $RetVal = $this->Mark09($AccountNo);
|
|---|
| 2268 | } elseif (($AccountNo >= 9010000000) And ($AccountNo <= 9109999999)) {
|
|---|
| 2269 | $RetVal = $this->Mark09($AccountNo);
|
|---|
| 2270 | }
|
|---|
| 2271 | }
|
|---|
| 2272 | return $RetVal;
|
|---|
| 2273 | } /* End of MarkB8 */
|
|---|
| 2274 |
|
|---|
| 2275 | /* --- Added FrankM 20060124 --- */
|
|---|
| 2276 | /* --- Benutzt von Hanseatic Bank, Hamburg --- */
|
|---|
| 2277 | private function MarkB9($AccountNo) {
|
|---|
| 2278 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2279 | $RetVal = 1;
|
|---|
| 2280 |
|
|---|
| 2281 | // Variante 1 - Zwei führende Nullen
|
|---|
| 2282 | if ((substr($AccountNo,0,2) == "00")And (substr($AccountNo,2,1) != "0")){
|
|---|
| 2283 | $Significance = '1231231';
|
|---|
| 2284 | $Step3 = 0;
|
|---|
| 2285 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 2286 | $Step1 = (substr($AccountNo,$Run + 2,1) * substr($Significance,$Run,1));
|
|---|
| 2287 | $Step2 = $Step1 + substr($Significance,$Run,1);
|
|---|
| 2288 | $Step3 += $Step2 % 11;
|
|---|
| 2289 | }
|
|---|
| 2290 | $Checksum = $Step3 % 10;
|
|---|
| 2291 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 2292 | $RetVal = 0;
|
|---|
| 2293 | } else {
|
|---|
| 2294 | $Checksum = $Checksum + 5;
|
|---|
| 2295 | if ($Checksum > 10) {
|
|---|
| 2296 | $Checksum = $Checksum - 10;
|
|---|
| 2297 | }
|
|---|
| 2298 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 2299 | $RetVal = 0;
|
|---|
| 2300 | }
|
|---|
| 2301 | }
|
|---|
| 2302 |
|
|---|
| 2303 | // Variante 2 - Drei führende Nullen
|
|---|
| 2304 | } elseif ((substr($AccountNo,0,3) == "000")And (substr($AccountNo,3,1) != "0")){
|
|---|
| 2305 | $Significance = '654321';
|
|---|
| 2306 | $Step1 = 0;
|
|---|
| 2307 | for ($Run = 0;$Run < strlen($Significance);$Run++) {
|
|---|
| 2308 | $Step1 += (substr($AccountNo,$Run + 3,1) * substr($Significance,$Run,1));
|
|---|
| 2309 | }
|
|---|
| 2310 | $Checksum = $Step1 % 11;
|
|---|
| 2311 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 2312 | $RetVal = 0;
|
|---|
| 2313 | } else {
|
|---|
| 2314 | $Checksum = $Checksum + 5;
|
|---|
| 2315 | if ($Checksum > 10) {
|
|---|
| 2316 | $Checksum = $Checksum - 10;
|
|---|
| 2317 | }
|
|---|
| 2318 | if ($Checksum == substr($AccountNo,-1)) {
|
|---|
| 2319 | $RetVal = 0;
|
|---|
| 2320 | }
|
|---|
| 2321 | }
|
|---|
| 2322 | }
|
|---|
| 2323 | return $RetVal;
|
|---|
| 2324 | } /* End of MarkB9 */
|
|---|
| 2325 |
|
|---|
| 2326 | /* --- Added FrankM 20060112 ---
|
|---|
| 2327 | --- Fix FrankM 20061103 ---
|
|---|
| 2328 | --- Hotfix FrankM 20080110 --- */
|
|---|
| 2329 | private function MarkC0($AccountNo, $BLZ) {
|
|---|
| 2330 | // Wenn Laenge = 8 dann Kontonummer fuer Methode 52 merken, Hotfix 20080110.
|
|---|
| 2331 | if (strlen($AccountNo) == 8) {
|
|---|
| 2332 | $AccountNoShort = $AccountNo;
|
|---|
| 2333 | }
|
|---|
| 2334 | // Mit fuehrenden Nullen auf 10 erweitern.
|
|---|
| 2335 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2336 | // Pruefen nach Methode 52 (achtstellig)
|
|---|
| 2337 | if ((substr($AccountNo,0,2) == "00") And (substr($AccountNo,0,3)!= "000")) {
|
|---|
| 2338 | // Fuer Methode 52 muss die Laenge der Kontonummer = 8 sein.
|
|---|
| 2339 | if (strlen($AccountNoShort) == 8) {
|
|---|
| 2340 | $RetVal = $this->Mark52($AccountNoShort, $BLZ);
|
|---|
| 2341 | } else {
|
|---|
| 2342 | $RetVal = 1;
|
|---|
| 2343 | }
|
|---|
| 2344 | // Wenn falsch, dann Methode 20
|
|---|
| 2345 | if ($RetVal != 0){
|
|---|
| 2346 | $RetVal = $this->Mark20($AccountNo);
|
|---|
| 2347 | }
|
|---|
| 2348 | // Alles andere nach Methode 20
|
|---|
| 2349 | } else {
|
|---|
| 2350 | $RetVal = $this->Mark20($AccountNo);
|
|---|
| 2351 | }
|
|---|
| 2352 | return $RetVal;
|
|---|
| 2353 | } /* End of MarkC0 */
|
|---|
| 2354 |
|
|---|
| 2355 | /* --- Added 20060703 --- */
|
|---|
| 2356 | private function MarkC1($AccountNo) {
|
|---|
| 2357 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2358 | $markC1 = 1;
|
|---|
| 2359 | if($AccountNo{0} != '5') { // Variante 1
|
|---|
| 2360 | // Methode 17, Modulus 11, Gewichtung 1, 2, 1, 2, 1, 2
|
|---|
| 2361 | $markC1 = $this->Mark17($AccountNo);
|
|---|
| 2362 | } else { // Variante 2
|
|---|
| 2363 | $weights = '121212121';
|
|---|
| 2364 | $sum = 0;
|
|---|
| 2365 | for($i = 0; $i < 9; $i++) {
|
|---|
| 2366 | $sum += $this->CrossSum($AccountNo{$i} * $weights{$i});
|
|---|
| 2367 | }
|
|---|
| 2368 | $sum--;
|
|---|
| 2369 | $prz = $sum % 11;
|
|---|
| 2370 | if(0 < $prz) {
|
|---|
| 2371 | $prz = 10 - $prz;
|
|---|
| 2372 | }
|
|---|
| 2373 | if($prz == $AccountNo{9}) { // 10. Stelle ist PRZ
|
|---|
| 2374 | $markC1 = 0;
|
|---|
| 2375 | }
|
|---|
| 2376 | }
|
|---|
| 2377 | return $markC1;
|
|---|
| 2378 | }
|
|---|
| 2379 |
|
|---|
| 2380 | /* --- Added 20060703 --- */
|
|---|
| 2381 | private function MarkC2($AccountNo) {
|
|---|
| 2382 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2383 | $markC2 = $this->Mark22($AccountNo);
|
|---|
| 2384 | if($markC2 != 0) {
|
|---|
| 2385 | $markC2 = $this->Mark00($AccountNo);
|
|---|
| 2386 | }
|
|---|
| 2387 | return $markC2;
|
|---|
| 2388 | }
|
|---|
| 2389 |
|
|---|
| 2390 | /* --- Added FrankM 20070305 --- */
|
|---|
| 2391 | private function MarkC3($AccountNo) {
|
|---|
| 2392 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2393 | if (substr($AccountNo,0,1) != "9") {
|
|---|
| 2394 | $markC3 = $this->Mark00($AccountNo);
|
|---|
| 2395 | } else {
|
|---|
| 2396 | $markC3 = $this->Mark58($AccountNo);
|
|---|
| 2397 | }
|
|---|
| 2398 | return $markC3;
|
|---|
| 2399 | }
|
|---|
| 2400 |
|
|---|
| 2401 | /* --- Added FrankM 20070305 --- */
|
|---|
| 2402 | private function MarkC4($AccountNo) {
|
|---|
| 2403 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2404 | if (substr($AccountNo,0,1) != "9") {
|
|---|
| 2405 | $markC4 = $this->Mark15($AccountNo);
|
|---|
| 2406 | } else {
|
|---|
| 2407 | $markC4 = $this->Mark58($AccountNo);
|
|---|
| 2408 | }
|
|---|
| 2409 | return $markC4;
|
|---|
| 2410 | }
|
|---|
| 2411 |
|
|---|
| 2412 | /* --- Added FrankM 20070822 --- */
|
|---|
| 2413 | private function MarkC5($AccountNo) {
|
|---|
| 2414 | $aAccountNo = $this->ExpandAccountExtended($AccountNo);
|
|---|
| 2415 | $AccountNo = $aAccountNo['AccountNoLong'];
|
|---|
| 2416 |
|
|---|
| 2417 | // Berechnungsvariante nach Kontonummernlaenge.
|
|---|
| 2418 | switch ($aAccountNo['AccountNoShortLen']) {
|
|---|
| 2419 | case 6:
|
|---|
| 2420 | // Variante 1, sechsstellige Kontonummer
|
|---|
| 2421 | if ((int)(substr($AccountNo,4 ,1)) <= 8 && (int)(substr($AccountNo,4 ,1)) >= 1 ){ //franky_n
|
|---|
| 2422 | $markC5 = $this->Mark75($aAccountNo['AccountNoShort']);
|
|---|
| 2423 | } else {
|
|---|
| 2424 | $markC5 = 1;
|
|---|
| 2425 | }
|
|---|
| 2426 | break;
|
|---|
| 2427 | case 8:
|
|---|
| 2428 | // Variante 4, achtstellige Kontonummer.
|
|---|
| 2429 | if ((substr($AccountNo,2,1) == "3") or (substr($AccountNo,2,1) == "4") or (substr($AccountNo,2,1) == "5")) {
|
|---|
| 2430 | $markC5 = $this->Mark09($AccountNo);
|
|---|
| 2431 | } else {
|
|---|
| 2432 | $markC5 = 1;
|
|---|
| 2433 | }
|
|---|
| 2434 | break;
|
|---|
| 2435 | case 9:
|
|---|
| 2436 | // Variante 1, neunstellige Kontonummer
|
|---|
| 2437 | if (intval(substr($AccountNo,1 ,1)) <= 8 && intval(substr($AccountNo,1 ,1)) >= 1 ){
|
|---|
| 2438 | $markC5 = $this->Mark75($aAccountNo['AccountNoShort']);
|
|---|
| 2439 | } else {
|
|---|
| 2440 | $markC5 = 1;
|
|---|
| 2441 | }
|
|---|
| 2442 | break;
|
|---|
| 2443 | case 10:
|
|---|
| 2444 | // Variante 4, zehnstellige Kontonummer.
|
|---|
| 2445 | if ((substr($AccountNo,0,2) == "70") or (substr($AccountNo,0,2) == "85")) {
|
|---|
| 2446 | $markC5 = $this->Mark09($AccountNo);
|
|---|
| 2447 | return $markC5;
|
|---|
| 2448 | // Variante 2, zehnstellige Kontonummer.
|
|---|
| 2449 | } elseif ((substr($AccountNo,0,1) == "1") or (substr($AccountNo,0,1) == "4") or (substr($AccountNo,0,1) == "5") or (substr($AccountNo,0,1) == "6") or (substr($AccountNo,0,1) == "9")) {
|
|---|
| 2450 | $markC5 = $this->Mark29($AccountNo);
|
|---|
| 2451 | // Variante 3, zehnstellige Kontonummer.
|
|---|
| 2452 | } elseif ((substr($AccountNo,0,1) == "3")) {
|
|---|
| 2453 | $markC5 = $this->Mark00($AccountNo);
|
|---|
| 2454 | } else {
|
|---|
| 2455 | $markC5 = 1;
|
|---|
| 2456 | }
|
|---|
| 2457 | break;
|
|---|
| 2458 | default:
|
|---|
| 2459 | $markC5 = 1;
|
|---|
| 2460 | } // End switch.
|
|---|
| 2461 | return $markC5;
|
|---|
| 2462 | }
|
|---|
| 2463 |
|
|---|
| 2464 | /* --- Added FrankM 20070822 ---
|
|---|
| 2465 | --- Changed FrankM 20090206, 20100602 --- */
|
|---|
| 2466 | /* --- Changed Christian Rothe 20110606 --- */
|
|---|
| 2467 | /* --- Changed Christian Rothe 20130309 --- */
|
|---|
| 2468 | /* --- 20110606: Aenderung des Verfahrens durch die Bundesbank --- */
|
|---|
| 2469 | private function MarkC6($AccountNo) {
|
|---|
| 2470 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2471 | $FirstLeftDigit = substr($AccountNo, 0, 1);
|
|---|
| 2472 |
|
|---|
| 2473 | // Je nach vorhandener erster Stelle von links die Konstante zuordnen.
|
|---|
| 2474 | switch ($FirstLeftDigit) {
|
|---|
| 2475 | case 0:
|
|---|
| 2476 | $Help = '4451970';
|
|---|
| 2477 | break;
|
|---|
| 2478 | case 1:
|
|---|
| 2479 | $Help = '4451981';
|
|---|
| 2480 | break;
|
|---|
| 2481 | case 2:
|
|---|
| 2482 | $Help = '4451992';
|
|---|
| 2483 | break;
|
|---|
| 2484 | case 3:
|
|---|
| 2485 | $Help = '4451993';
|
|---|
| 2486 | break;
|
|---|
| 2487 | case 4:
|
|---|
| 2488 | $Help = '4344992';
|
|---|
| 2489 | break;
|
|---|
| 2490 | case 5:
|
|---|
| 2491 | $Help = '4344990';
|
|---|
| 2492 | break;
|
|---|
| 2493 | case 6:
|
|---|
| 2494 | $Help = '4344991';
|
|---|
| 2495 | break;
|
|---|
| 2496 | case 7:
|
|---|
| 2497 | $Help = '5499570';
|
|---|
| 2498 | break;
|
|---|
| 2499 | case 8:
|
|---|
| 2500 | $Help = '4451994';
|
|---|
| 2501 | break;
|
|---|
| 2502 | case 9:
|
|---|
| 2503 | $Help = '5499579';
|
|---|
| 2504 | break;
|
|---|
| 2505 | } /* end switch */
|
|---|
| 2506 | // Fuer Berechnung der Pruefziffer die Konstante
|
|---|
| 2507 | // zur Kontonummer hinzu fuegen.
|
|---|
| 2508 | $Help .= substr($AccountNo, 1);
|
|---|
| 2509 |
|
|---|
| 2510 | // Methode 00, 16. Stelle Pruefziffer, Modulator 10,
|
|---|
| 2511 | // Pruefziffer NICHT verschieben, ExpandAccount NICHT anwenden.
|
|---|
| 2512 | $markC6 = $this->Method00($Help, '212121212121212', 16, 10, 0, 1);
|
|---|
| 2513 |
|
|---|
| 2514 | return $markC6;
|
|---|
| 2515 | }
|
|---|
| 2516 |
|
|---|
| 2517 | /* --- Added FrankM 20071009 --- */
|
|---|
| 2518 | private function MarkC7($AccountNo) {
|
|---|
| 2519 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2520 | // Zuerst mit Methode 63 pruefen.
|
|---|
| 2521 | $markC7 = $this->Mark63($AccountNo);
|
|---|
| 2522 | // Wenn Pruefzifferfehler, dann Methode 06
|
|---|
| 2523 | if ($markC7 == 1) {
|
|---|
| 2524 | $markC7 = $this->Mark06($AccountNo);
|
|---|
| 2525 | }
|
|---|
| 2526 | return $markC7;
|
|---|
| 2527 | }
|
|---|
| 2528 |
|
|---|
| 2529 | /* --- Added FrankM 20080519 --- */
|
|---|
| 2530 | private function MarkC8($AccountNo) {
|
|---|
| 2531 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2532 | // Zuerst mit Methode 00 pruefen.
|
|---|
| 2533 | $markC8 = $this->Mark00($AccountNo);
|
|---|
| 2534 | // Wenn Pruefzifferfehler, dann Methode 04
|
|---|
| 2535 | if ($markC8 == 1) {
|
|---|
| 2536 | $markC8 = $this->Mark04($AccountNo);
|
|---|
| 2537 | // Wenn Pruefzifferfehler, dann Methode 07
|
|---|
| 2538 | if ($markC8 == 1) {
|
|---|
| 2539 | $markC8 = $this->Mark07($AccountNo);
|
|---|
| 2540 | }
|
|---|
| 2541 | }
|
|---|
| 2542 | return $markC8;
|
|---|
| 2543 | }
|
|---|
| 2544 |
|
|---|
| 2545 | /* --- Added FrankM 20080519 --- */
|
|---|
| 2546 | private function MarkC9($AccountNo) {
|
|---|
| 2547 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2548 | // Zuerst mit Methode 00 pruefen.
|
|---|
| 2549 | $markC9 = $this->Mark00($AccountNo);
|
|---|
| 2550 | // Wenn Pruefzifferfehler, dann Methode 07
|
|---|
| 2551 | if ($markC9 == 1) {
|
|---|
| 2552 | $markC9 = $this->Mark07($AccountNo);
|
|---|
| 2553 | }
|
|---|
| 2554 | return $markC9;
|
|---|
| 2555 | }
|
|---|
| 2556 |
|
|---|
| 2557 | /* --- Added FrankM 20080717 --- */
|
|---|
| 2558 | private function MarkD0($AccountNo) {
|
|---|
| 2559 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2560 | // Wenn die erste und zweite Stelle = 57, dann keine Pruefung.
|
|---|
| 2561 | if (substr($AccountNo, 0, 2) == "57") {
|
|---|
| 2562 | $markD0 = $this->Mark09($AccountNo);
|
|---|
| 2563 | // Andernfalls Methode 20 (modifizierte Methode 06).
|
|---|
| 2564 | } else {
|
|---|
| 2565 | $markD0 = $this->Method06($AccountNo, '398765432', FALSE, 10, 11);
|
|---|
| 2566 | }
|
|---|
| 2567 | return $markD0;
|
|---|
| 2568 | }
|
|---|
| 2569 |
|
|---|
| 2570 | /* --- Added FrankM 20080717 ---
|
|---|
| 2571 | --- Changed FrankM 20100602 ---
|
|---|
| 2572 | --- Changed Nico Sommer 20110120 ---
|
|---|
| 2573 | --- Changed Christian Rothe 20110901 ---
|
|---|
| 2574 | --- Changed Christian Rothe 20130309 --- */
|
|---|
| 2575 |
|
|---|
| 2576 | private function MarkD1($AccountNo) {
|
|---|
| 2577 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2578 | $FirstLeftDigit = substr($AccountNo, 0, 1);
|
|---|
| 2579 | $AccountSequence = substr($AccountNo, 1, 9);
|
|---|
| 2580 | if (substr($AccountNo, 0, 1) == "8") {
|
|---|
| 2581 | $markD1 = 1;
|
|---|
| 2582 | } else {
|
|---|
| 2583 | // Je nach vorhandener erster Stelle von links die Konstante zuordnen.
|
|---|
| 2584 | switch ($FirstLeftDigit) {
|
|---|
| 2585 | case 0:
|
|---|
| 2586 | $Help = '4363380' . $AccountSequence;
|
|---|
| 2587 | break;
|
|---|
| 2588 | case 1:
|
|---|
| 2589 | $Help = '4363381' . $AccountSequence;
|
|---|
| 2590 | break;
|
|---|
| 2591 | case 2:
|
|---|
| 2592 | $Help = '4363382' . $AccountSequence;
|
|---|
| 2593 | break;
|
|---|
| 2594 | case 3:
|
|---|
| 2595 | $Help = '4363383' . $AccountSequence;
|
|---|
| 2596 | break;
|
|---|
| 2597 | case 4:
|
|---|
| 2598 | $Help = '4363384' . $AccountSequence;
|
|---|
| 2599 | break;
|
|---|
| 2600 | case 5:
|
|---|
| 2601 | $Help = '4363385' . $AccountSequence;
|
|---|
| 2602 | break;
|
|---|
| 2603 | case 6:
|
|---|
| 2604 | $Help = '4363386' . $AccountSequence;
|
|---|
| 2605 | break;
|
|---|
| 2606 | case 7:
|
|---|
| 2607 | $Help = '4363387' . $AccountSequence;
|
|---|
| 2608 | break;
|
|---|
| 2609 | case 9:
|
|---|
| 2610 | $Help = '4363389' . $AccountSequence;
|
|---|
| 2611 | break;
|
|---|
| 2612 | } /* end switch */
|
|---|
| 2613 | // Methode 00, 16. Stelle Pruefziffer, Modulator 10,
|
|---|
| 2614 | // Pruefziffer NICHT verschieben, ExpandAccount NICHT anwenden.
|
|---|
| 2615 | $markD1 = $this->Method00($Help, '212121212121212', 16, 10, 0, 1);
|
|---|
| 2616 | }
|
|---|
| 2617 | return $markD1;
|
|---|
| 2618 | }
|
|---|
| 2619 |
|
|---|
| 2620 | /* --- Added FrankM 20081208 --- */
|
|---|
| 2621 | private function MarkD2($AccountNo) {
|
|---|
| 2622 | // Zuerst mit Methode 95 pruefen.
|
|---|
| 2623 | $markD2 = $this->Mark95($AccountNo);
|
|---|
| 2624 | // Wenn Pruefzifferfehler, dann mit Methode 00 pruefen.
|
|---|
| 2625 | if ($markD2 == 1) {
|
|---|
| 2626 | $markD2 = $this->Mark00($AccountNo);
|
|---|
| 2627 | // Wenn Pruefzifferfehler, dann mit Methode 68 pruefen.
|
|---|
| 2628 | if ($markD2 == 1) {
|
|---|
| 2629 | $markD2 = $this->Mark68($AccountNo);
|
|---|
| 2630 | }
|
|---|
| 2631 | }
|
|---|
| 2632 | return $markD2;
|
|---|
| 2633 | }
|
|---|
| 2634 |
|
|---|
| 2635 | /* --- Added FrankM 20081208 --- */
|
|---|
| 2636 | private function MarkD3($AccountNo) {
|
|---|
| 2637 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2638 | $markD3 = $this->Mark00($AccountNo);
|
|---|
| 2639 | // Wenn Pruefzifferfehler, dann mit Methode 27 pruefen.
|
|---|
| 2640 | if ($markD3 == 1) {
|
|---|
| 2641 | $markD3 = $this->Mark27($AccountNo);
|
|---|
| 2642 | }
|
|---|
| 2643 | return $markD3;
|
|---|
| 2644 | }
|
|---|
| 2645 |
|
|---|
| 2646 | /* --- Added FrankM 20100602 --- */
|
|---|
| 2647 | /* --- Changed Christian Rothe 20110606 --- */
|
|---|
| 2648 | /* --- 20110606: Aenderung des Verfahrens durch die Bundesbank --- */
|
|---|
| 2649 | private function MarkD4($AccountNo) {
|
|---|
| 2650 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2651 | if ((substr($AccountNo, 0, 1) == "0")) {
|
|---|
| 2652 | $markD4 = 1;
|
|---|
| 2653 | } else {
|
|---|
| 2654 | $Help = '428259' . $AccountNo;
|
|---|
| 2655 |
|
|---|
| 2656 | // Methode 00, 16. Stelle Pruefziffer, Modulator 10,
|
|---|
| 2657 | // Pruefziffer NICHT verschieben, ExpandAccount NICHT anwenden.
|
|---|
| 2658 | $markD4 = $this->Method00($Help, '212121212121212', 16, 10, 0, 1);
|
|---|
| 2659 | }
|
|---|
| 2660 | return $markD4;
|
|---|
| 2661 | }
|
|---|
| 2662 |
|
|---|
| 2663 | /* --- Added Christian Rothe 20101206 --- */
|
|---|
| 2664 | private function MarkD5($AccountNo) {
|
|---|
| 2665 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2666 | if (substr($AccountNo, 2, 2) == "99") {
|
|---|
| 2667 | // Kontonummern mit '99' an 3. und 4. Stelle mit dieser Verfahrensvariante pruefen
|
|---|
| 2668 | $markD5 = $this->Method06($AccountNo, '008765432', TRUE, 10, 11);
|
|---|
| 2669 | } else {
|
|---|
| 2670 | $markD5 = $this->Method06($AccountNo, '000765432', TRUE, 10, 11);
|
|---|
| 2671 | // Wenn Pruefzifferfehler, dann weiter pruefen mit Modulus 7.
|
|---|
| 2672 | if ($markD5) {
|
|---|
| 2673 | $markD5 = $this->Method90($AccountNo, '000765432', 10, 7);
|
|---|
| 2674 | }
|
|---|
| 2675 | // Wenn Pruefzifferfehler, dann weiter pruefen mit Modulus 10.
|
|---|
| 2676 | if ($markD5) {
|
|---|
| 2677 | $markD5 = $this->Method90($AccountNo, '000765432', 10, 10);
|
|---|
| 2678 | }
|
|---|
| 2679 | }
|
|---|
| 2680 | return $markD5;
|
|---|
| 2681 | }
|
|---|
| 2682 |
|
|---|
| 2683 | /* --- Added Christian Rothe 20110327 --- */
|
|---|
| 2684 | private function MarkD6($AccountNo) {
|
|---|
| 2685 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2686 | // Zunaechst pruefen mit Methode 07
|
|---|
| 2687 | $markD6 = $this->Mark07($AccountNo);
|
|---|
| 2688 | // Wenn Pruefzifferfehler, dann weiter pruefen mit Methode 03.
|
|---|
| 2689 | if ($markD6) {
|
|---|
| 2690 | $markD6 = $this->Mark03($AccountNo);
|
|---|
| 2691 | }
|
|---|
| 2692 | // Wenn Pruefzifferfehler, dann weiter pruefen mit Methode 00.
|
|---|
| 2693 | if ($markD6) {
|
|---|
| 2694 | $markD6 = $this->Mark00($AccountNo);
|
|---|
| 2695 | }
|
|---|
| 2696 | return $markD6;
|
|---|
| 2697 | }
|
|---|
| 2698 |
|
|---|
| 2699 | /* --- Added Christian Rothe 20110606 --- */
|
|---|
| 2700 | private function MarkD7($AccountNo) {
|
|---|
| 2701 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2702 | $markD7 = $this->Method00($AccountNo, '212121212', 10, 10, 0, 0, 'D7');
|
|---|
| 2703 | return $markD7;
|
|---|
| 2704 | }
|
|---|
| 2705 |
|
|---|
| 2706 | /* --- Added Christian Rothe 20110606 --- */
|
|---|
| 2707 | private function MarkD8($AccountNo) {
|
|---|
| 2708 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2709 | // Kontonummern aus dem Nummernkreis 1000000000 bis 9999999999 mit Methode 00 pruefen
|
|---|
| 2710 | $markD8 = 1;
|
|---|
| 2711 | if (($AccountNo >= 1000000000) And ($AccountNo <= 9999999999)) {
|
|---|
| 2712 | $markD8 = $this->Mark00($AccountNo);
|
|---|
| 2713 | } elseif (($AccountNo >= '0010000000') And ($AccountNo <= '0099999999')) {
|
|---|
| 2714 | // Fuer Kontonummernkreis 0010000000 bis 0099999999 mit Methode 09 pruefen
|
|---|
| 2715 | $markD8 = $this->Mark09($AccountNo);
|
|---|
| 2716 | }
|
|---|
| 2717 | return $markD8;
|
|---|
| 2718 | }
|
|---|
| 2719 |
|
|---|
| 2720 | /* --- Added Christian Rothe 20120606 --- */
|
|---|
| 2721 | private function MarkD9($AccountNo) {
|
|---|
| 2722 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2723 | $markD9 = $this->Method00($AccountNo, '212121212', 10, 10, 0, 0, 'D9');
|
|---|
| 2724 | // Wenn Pruefzifferfehler, dann weiter pruefen mit Methode 10.
|
|---|
| 2725 | if ($markD9) {
|
|---|
| 2726 | $markD9 = $this->Mark10($AccountNo);
|
|---|
| 2727 | }
|
|---|
| 2728 | // Wenn Pruefzifferfehler, dann weiter pruefen mit Methode 18.
|
|---|
| 2729 | if ($markD9) {
|
|---|
| 2730 | $markD9 = $this->Mark18($AccountNo);
|
|---|
| 2731 | }
|
|---|
| 2732 | return $markD9;
|
|---|
| 2733 | }
|
|---|
| 2734 |
|
|---|
| 2735 | /* --- Added Christian Rothe 20130309 --- */
|
|---|
| 2736 | private function MarkE0($AccountNo) {
|
|---|
| 2737 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2738 | $markE0 = $this->Method00($AccountNo, '212121212', strlen($AccountNo), 10, 0, 0, 'E0');
|
|---|
| 2739 | return $markE0;
|
|---|
| 2740 | }
|
|---|
| 2741 |
|
|---|
| 2742 | /* --- Added Christian Rothe 20131209 --- */
|
|---|
| 2743 | private function MarkE1($AccountNo) {
|
|---|
| 2744 | $markE1 = 1;
|
|---|
| 2745 | $AccountNo = $this->ExpandAccount($AccountNo);
|
|---|
| 2746 | $Help = 0;
|
|---|
| 2747 | $Significance = array(9, 10, 11, 6, 5, 4, 3, 2, 1);
|
|---|
| 2748 | // Rechnen mit ASCII-Repräsentation der Zahlen
|
|---|
| 2749 | for ($Run = 0; $Run < sizeof($Significance);$Run++) {
|
|---|
| 2750 | $Help += ((substr($AccountNo,$Run,1) + 48) * $Significance[$Run]);
|
|---|
| 2751 | }
|
|---|
| 2752 | $Checksum = $Help % 11;
|
|---|
| 2753 | if ($Checksum < 10 && $Checksum == substr($AccountNo,-1)) {
|
|---|
| 2754 | $markE1 = 0;
|
|---|
| 2755 | }
|
|---|
| 2756 | return $markE1;
|
|---|
| 2757 | }
|
|---|
| 2758 |
|
|---|
| 2759 | /* ----- Ende Endgueltige Funktionen der einzelnen Berechnungsmethoden. ---- */
|
|---|
| 2760 |
|
|---|
| 2761 | /* -------- Dies ist die wichtigste function ---------- */
|
|---|
| 2762 | function CheckAccount($banktransfer_number, $banktransfer_blz) {
|
|---|
| 2763 | $KontoNR = preg_replace('/[^0-9]/', '', $banktransfer_number); // Hetfield - 2009-08-19 - replaced deprecated function ereg_replace with preg_replace to be ready for PHP >= 5.3
|
|---|
| 2764 | $BLZ = preg_replace('/[^0-9]/', '', $banktransfer_blz); // Hetfield - 2009-08-19 - replaced deprecated function ereg_replace with preg_replace to be ready for PHP >= 5.3
|
|---|
| 2765 |
|
|---|
| 2766 | $Result = 0;
|
|---|
| 2767 | if ((int)$BLZ == 0 || strlen($BLZ) < 8) {
|
|---|
| 2768 | return 8; /* Keine BLZ übergeben */
|
|---|
| 2769 | }
|
|---|
| 2770 | if ((int) $KontoNR == 0) {
|
|---|
| 2771 | return 9; /* Keine Kontonummer übergeben */
|
|---|
| 2772 | }
|
|---|
| 2773 |
|
|---|
| 2774 | /* Beginn Implementierung */
|
|---|
| 2775 | $adata = $this->query($BLZ);
|
|---|
| 2776 | if ($adata == -1) {
|
|---|
| 2777 | $Result = 5; // BLZ nicht gefunden;
|
|---|
| 2778 | $PRZ = -1;
|
|---|
| 2779 | $this->PRZ = $PRZ;
|
|---|
| 2780 | $this->banktransfer_number=ltrim($banktransfer_number,"0");
|
|---|
| 2781 | $this->banktransfer_blz=$banktransfer_blz;
|
|---|
| 2782 | } else {
|
|---|
| 2783 | $this->Bankname = $adata['bankname'];
|
|---|
| 2784 | $this->PRZ = str_pad ($adata['prz'], 2, "0", STR_PAD_LEFT);
|
|---|
| 2785 | $this->banktransfer_number=ltrim($banktransfer_number,"0");
|
|---|
| 2786 | //$this->banktransfer_number=$this->ExpandAccount($banktransfer_number);
|
|---|
| 2787 | $this->banktransfer_blz=$banktransfer_blz;
|
|---|
| 2788 |
|
|---|
| 2789 | $PRZ = $adata['prz'];
|
|---|
| 2790 |
|
|---|
| 2791 | switch ($PRZ) {
|
|---|
| 2792 | case "52" :
|
|---|
| 2793 | $Result = $this->Mark52($KontoNR, $BLZ);
|
|---|
| 2794 | break;
|
|---|
| 2795 | case "53" :
|
|---|
| 2796 | $Result = $this->Mark53($KontoNR, $BLZ);
|
|---|
| 2797 | break;
|
|---|
| 2798 | /* --- Added FrankM 20060112 --- */
|
|---|
| 2799 | case "B6" :
|
|---|
| 2800 | $Result = $this->MarkB6($KontoNR, $BLZ);
|
|---|
| 2801 | break;
|
|---|
| 2802 | case "C0" :
|
|---|
| 2803 | $Result = $this->MarkC0($KontoNR, $BLZ);
|
|---|
| 2804 | break;
|
|---|
| 2805 | default:
|
|---|
| 2806 | $MethodName = "Mark$PRZ";
|
|---|
| 2807 | if (method_exists($this, $MethodName)){
|
|---|
| 2808 | $Result = call_user_func (array($this, $MethodName), $KontoNR);
|
|---|
| 2809 | } else {
|
|---|
| 2810 | $Result = 3;
|
|---|
| 2811 | }
|
|---|
| 2812 | } /* end switch */
|
|---|
| 2813 |
|
|---|
| 2814 | } /* end if num_rows */
|
|---|
| 2815 |
|
|---|
| 2816 | if ($Result > 0 && $this->checkmode == 'iban') {
|
|---|
| 2817 | $Result += 2000;
|
|---|
| 2818 | }
|
|---|
| 2819 |
|
|---|
| 2820 | return $Result;
|
|---|
| 2821 | } /* End of CheckAccount */
|
|---|
| 2822 |
|
|---|
| 2823 | /* --------
|
|---|
| 2824 | Diese Funktion liefert eine Beurteilung, ob eine Kontonummer grundsätzlich
|
|---|
| 2825 | angenommen und für Zahlungen verwendet werden kann
|
|---|
| 2826 | ---------- */
|
|---|
| 2827 |
|
|---|
| 2828 | function account_acceptable($check_result) {
|
|---|
| 2829 | $result = false;
|
|---|
| 2830 | if ( $check_result == 0 ||
|
|---|
| 2831 | $check_result == 2 ||
|
|---|
| 2832 | $check_result == 3 ||
|
|---|
| 2833 | $check_result == 4 ||
|
|---|
| 2834 | $check_result == 2002 ||
|
|---|
| 2835 | $check_result == 2003 ||
|
|---|
| 2836 | $check_result == 2004) {
|
|---|
| 2837 | $result = true;
|
|---|
| 2838 | }
|
|---|
| 2839 | return $result;
|
|---|
| 2840 | }
|
|---|
| 2841 |
|
|---|
| 2842 | /*
|
|---|
| 2843 | // Funktionen zu Testen einzelner Methoden mit von Bundesbank angegebenen Testkontonummern
|
|---|
| 2844 | // Für Produktivbetrieb auskommentieren
|
|---|
| 2845 |
|
|---|
| 2846 | function devTest($KontoNR, $PRZ) {
|
|---|
| 2847 |
|
|---|
| 2848 | $MethodName = "Mark$PRZ";
|
|---|
| 2849 | $Result = call_user_func (array($this, $MethodName), $KontoNR);
|
|---|
| 2850 |
|
|---|
| 2851 | return $Result;
|
|---|
| 2852 |
|
|---|
| 2853 | }
|
|---|
| 2854 | */
|
|---|
| 2855 |
|
|---|
| 2856 | } /* End Class AccountCheck */
|
|---|
| 2857 |
|
|---|
| 2858 |
|
|---|
| 2859 |
|
|---|
| 2860 | class IbanAccountCheck extends AccountCheck {
|
|---|
| 2861 | private $ibanstructure = Array();
|
|---|
| 2862 |
|
|---|
| 2863 | /*
|
|---|
| 2864 | -----------------------------------------------------------------------------------------
|
|---|
| 2865 | Copyright (c) 2013 Christian Rothe
|
|---|
| 2866 | -----------------------------------------------------------------------------------------
|
|---|
| 2867 | */
|
|---|
| 2868 |
|
|---|
| 2869 | /* Folgende Returncodes werden übergeben */
|
|---|
| 2870 | /* */
|
|---|
| 2871 | /* 0 -> IBAN ist okay */
|
|---|
| 2872 | /* 1000 -> Länderkennung ist unbekannt */
|
|---|
| 2873 | /* 1010 -> Länge der IBAN ist falsch: Zu viele Stellen */
|
|---|
| 2874 | /* 1020 -> Länge der IBAN ist falsch: Zu wenige Stellen */
|
|---|
| 2875 | /* 1030 -> IBAN entspricht nicht dem für das Land festgelegten Format */
|
|---|
| 2876 | /* 1040 -> Prüfsumme der IBAN ist nicht korrekt -> Tippfehler */
|
|---|
| 2877 | /* 1050 -> BIC ist ungültig */
|
|---|
| 2878 | /* 1060 -> Länge des BIC ist falsch: Zu viele Stellen */
|
|---|
| 2879 | /* 1070 -> Länge des BIC ist falsch: Zu wenige Stellen */
|
|---|
| 2880 | /* 1080 -> Länge des BIC ist ungültig */
|
|---|
| 2881 |
|
|---|
| 2882 | /* Zusätzlich werden für Deutsche Konten folgende Returncodes übergeben */
|
|---|
| 2883 | /* 2001 -> Deutsche Kontonummer & deutsche BLZ passen nicht */
|
|---|
| 2884 | /* 2002 -> Für diese Kontonummer kein deutsches Prüfziffernverfahren definiert */
|
|---|
| 2885 | /* Da die IBAN-Prüfung klappte, ist die Nr. wahrscheinlich trotzdem okay */
|
|---|
| 2886 | /* 2003 -> Dieses Deutsche Prüfziffernverfahren ist noch nicht implementiert */
|
|---|
| 2887 | /* Da die IBAN-Prüfung klappte, ist die Nr. wahrscheinlich trotzdem okay */
|
|---|
| 2888 | /* 2004 -> Diese Kontonummer ist mit deutschen Methoden im Detail nicht prüfbar */
|
|---|
| 2889 | /* Da die IBAN-Prüfung klappte, ist die Nr. wahrscheinlich trotzdem okay */
|
|---|
| 2890 | /* 2005 -> Deutsche BLZ nicht gefunden */
|
|---|
| 2891 | /* 2008 -> Keine deutsche BLZ übergeben */
|
|---|
| 2892 | /* 2009 -> Keine deutsche Kontonummer übergeben */
|
|---|
| 2893 | /* 2010 -> Kein Kontoinhaber übergeben */
|
|---|
| 2894 | /* 2020 -> BIC ist ungültig */
|
|---|
| 2895 | /* 2128 -> interner Fehler, der zeigt, dass eine Methode nicht implementiert ist */
|
|---|
| 2896 | /* */
|
|---|
| 2897 |
|
|---|
| 2898 | function __construct() {
|
|---|
| 2899 |
|
|---|
| 2900 | parent::__construct();
|
|---|
| 2901 |
|
|---|
| 2902 | $this->banktransfer_iban = ''; // Enthält nach der Prüfung die geprüfte IBAN
|
|---|
| 2903 | $this->banktransfer_bic = ''; // Enthält nach der Prüfung den geprüften BIC
|
|---|
| 2904 | $this->IBAN_country = ''; // Enthält nach der Prüfung das Land der geprüften IBAN
|
|---|
| 2905 |
|
|---|
| 2906 | // Basis-Informationen / Definition zu IBAN-Kontonummern der einzelnen Länder einlesen
|
|---|
| 2907 | $this->init();
|
|---|
| 2908 | $this->checkmode = 'iban';
|
|---|
| 2909 | }
|
|---|
| 2910 |
|
|---|
| 2911 | function IbanCheckAccount($iban, $bic = null) {
|
|---|
| 2912 |
|
|---|
| 2913 | $result = $this->is_valid_iban($iban);
|
|---|
| 2914 |
|
|---|
| 2915 | // Keine BIC-Überprüfung / keine BIC-Fehlermeldungen bei deutschen Shops,
|
|---|
| 2916 | // wenn IBAN eine deutsche IBAN ist und BIC nicht eingegebn
|
|---|
| 2917 | if ($this->get_store_ctryiso2() == 'DE' && $this->iban_get_ctryiso2($iban) == 'DE' && $bic == '') {
|
|---|
| 2918 | $bic = null;
|
|---|
| 2919 | }
|
|---|
| 2920 |
|
|---|
| 2921 | if ($result == 0 && isset($bic)) {
|
|---|
| 2922 | $result = $this->is_valid_bic($bic,$iban);
|
|---|
| 2923 | }
|
|---|
| 2924 |
|
|---|
| 2925 | // IBAN und BIC für spätere Verwendung nach außen verfügbar machen
|
|---|
| 2926 | $this->banktransfer_iban = $this->iban_trim($iban);
|
|---|
| 2927 | $this->banktransfer_bic = $this->bic_trim($bic);
|
|---|
| 2928 | $this->IBAN_country = $this->iban_get_ctryiso2($iban);
|
|---|
| 2929 |
|
|---|
| 2930 | return $result;
|
|---|
| 2931 |
|
|---|
| 2932 | }
|
|---|
| 2933 |
|
|---|
| 2934 | function is_valid_iban($iban, $use_german_check = true) {
|
|---|
| 2935 |
|
|---|
| 2936 | $result = 0;
|
|---|
| 2937 |
|
|---|
| 2938 | if (!$this->iban_check_country($iban)) {
|
|---|
| 2939 | $result = 1000;
|
|---|
| 2940 | }
|
|---|
| 2941 |
|
|---|
| 2942 | // Länge der IBAN prüfen
|
|---|
| 2943 | if ($result == 0) {
|
|---|
| 2944 | $temp_result = $this->iban_check_length($iban);
|
|---|
| 2945 | if ($temp_result) {
|
|---|
| 2946 | $result = $temp_result;
|
|---|
| 2947 | }
|
|---|
| 2948 | }
|
|---|
| 2949 |
|
|---|
| 2950 | // Format der IBAN anhand von regulären Ausdrücken prüfen
|
|---|
| 2951 | if ($result == 0 && !$this->iban_check_format($iban)) {
|
|---|
| 2952 | $result = 1030;
|
|---|
| 2953 | }
|
|---|
| 2954 |
|
|---|
| 2955 | // IBAN-Fehler über Prüfsumme aufdecken
|
|---|
| 2956 | if ($result == 0 && !$this->iban_check_checksum($iban)) {
|
|---|
| 2957 | $result = 1040;
|
|---|
| 2958 | }
|
|---|
| 2959 |
|
|---|
| 2960 | // Detail-Check für deutsche IBAN-Nummern
|
|---|
| 2961 | if ($result == 0 && $this->iban_get_ctryiso2($iban) == 'DE' && $use_german_check) {
|
|---|
| 2962 | $result = $this->iban_check_german_account($iban);
|
|---|
| 2963 | }
|
|---|
| 2964 |
|
|---|
| 2965 | return $result;
|
|---|
| 2966 |
|
|---|
| 2967 | }
|
|---|
| 2968 |
|
|---|
| 2969 | function is_valid_bic($bic, $iban = null) {
|
|---|
| 2970 |
|
|---|
| 2971 | $result = 0;
|
|---|
| 2972 |
|
|---|
| 2973 | $temp_result = $this->bic_check_length($bic);
|
|---|
| 2974 | if ($temp_result) {
|
|---|
| 2975 | $result = $temp_result;
|
|---|
| 2976 | }
|
|---|
| 2977 |
|
|---|
| 2978 | if ($result == 0 && !$this->bic_validate($bic)) {
|
|---|
| 2979 | $result = 1050;
|
|---|
| 2980 | }
|
|---|
| 2981 |
|
|---|
| 2982 | // Detail-Check für deutsche Konto: Existiert BIC?
|
|---|
| 2983 | if ($result == 0 && isset($iban) && $this->iban_get_ctryiso2($iban) == 'DE') {
|
|---|
| 2984 | $result = $this->bic_check_german_account($bic, $iban);
|
|---|
| 2985 | }
|
|---|
| 2986 |
|
|---|
| 2987 | return $result;
|
|---|
| 2988 | }
|
|---|
| 2989 |
|
|---|
| 2990 | function iban_check_country($iban) {
|
|---|
| 2991 |
|
|---|
| 2992 | // Länge der IBAN prüfen
|
|---|
| 2993 | $iban = $this->iban_trim($iban);
|
|---|
| 2994 | $ctry_iso_2 = $this->iban_get_ctryiso2($iban);
|
|---|
| 2995 |
|
|---|
| 2996 | if (isset($this->ibanstructure[$ctry_iso_2])) {
|
|---|
| 2997 | return true;
|
|---|
| 2998 | }
|
|---|
| 2999 |
|
|---|
| 3000 | return false;
|
|---|
| 3001 |
|
|---|
| 3002 | }
|
|---|
| 3003 |
|
|---|
| 3004 | function iban_check_length($iban) {
|
|---|
| 3005 |
|
|---|
| 3006 | // Länge der IBAN prüfen
|
|---|
| 3007 | $iban = $this->iban_trim($iban);
|
|---|
| 3008 | $ctry_iso_2 = $this->iban_get_ctryiso2($iban);
|
|---|
| 3009 |
|
|---|
| 3010 | if (strlen($iban) > $this->ibanstructure[$ctry_iso_2]['length']) {
|
|---|
| 3011 | return 1010;
|
|---|
| 3012 | } elseif (strlen($iban) < $this->ibanstructure[$ctry_iso_2]['length']) {
|
|---|
| 3013 | return 1020;
|
|---|
| 3014 | }
|
|---|
| 3015 |
|
|---|
| 3016 | return false;
|
|---|
| 3017 |
|
|---|
| 3018 | }
|
|---|
| 3019 |
|
|---|
| 3020 | function iban_check_format($iban) {
|
|---|
| 3021 |
|
|---|
| 3022 | // Format der IBAN anhand von regulären Ausdrücken prüfen
|
|---|
| 3023 | $result = true;
|
|---|
| 3024 |
|
|---|
| 3025 | $iban = $this->iban_trim($iban);
|
|---|
| 3026 | $ctry_iso_2 = $this->iban_get_ctryiso2($iban);
|
|---|
| 3027 |
|
|---|
| 3028 | if (isset($this->ibanstructure[$ctry_iso_2]['regex'])) {
|
|---|
| 3029 | if (!preg_match('/^' . $this->ibanstructure[$ctry_iso_2]['regex'] . '$/', $iban)) {
|
|---|
| 3030 | $result = false;
|
|---|
| 3031 | }
|
|---|
| 3032 | }
|
|---|
| 3033 |
|
|---|
| 3034 | return $result;
|
|---|
| 3035 |
|
|---|
| 3036 | }
|
|---|
| 3037 |
|
|---|
| 3038 | function iban_get_ctryiso2($iban) {
|
|---|
| 3039 |
|
|---|
| 3040 | // Land aus IBAN extrahieren
|
|---|
| 3041 |
|
|---|
| 3042 | $iban = $this->iban_trim($iban);
|
|---|
| 3043 | $ctry_iso_2 = substr($iban,0,2);
|
|---|
| 3044 |
|
|---|
| 3045 | return $ctry_iso_2;
|
|---|
| 3046 | }
|
|---|
| 3047 |
|
|---|
| 3048 | function iban_check_checksum($iban) {
|
|---|
| 3049 |
|
|---|
| 3050 | // IBAN-Fehler über Prüfsumme aufdecken
|
|---|
| 3051 |
|
|---|
| 3052 | $result = false;
|
|---|
| 3053 |
|
|---|
| 3054 | $iban = $this->iban_trim($iban);
|
|---|
| 3055 |
|
|---|
| 3056 | $iban1 = substr($iban, 4) . substr($iban, 0, 4);
|
|---|
| 3057 | $iban1 = str_replace(
|
|---|
| 3058 | array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
|---|
| 3059 | 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'),
|
|---|
| 3060 | array('10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22',
|
|---|
| 3061 | '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35'),
|
|---|
| 3062 | $iban1);
|
|---|
| 3063 |
|
|---|
| 3064 | $help = intval(substr($iban1, 0, 1));
|
|---|
| 3065 | $len = strlen($iban1);
|
|---|
| 3066 | for ($x = 1; $x < $len; ++$x) {
|
|---|
| 3067 | $help *= 10;
|
|---|
| 3068 | $help += intval(substr($iban1, $x, 1));
|
|---|
| 3069 | $help %= 97;
|
|---|
| 3070 | }
|
|---|
| 3071 |
|
|---|
| 3072 | if ($help == 1) {
|
|---|
| 3073 | $result = true;
|
|---|
| 3074 | }
|
|---|
| 3075 |
|
|---|
| 3076 | return $result;
|
|---|
| 3077 |
|
|---|
| 3078 | }
|
|---|
| 3079 |
|
|---|
| 3080 | function iban_check_german_account($iban) {
|
|---|
| 3081 |
|
|---|
| 3082 | // Überprüfe deutsche Kontonummern mit den Prüfziffern-Methoden der Deutschen Bundesbank
|
|---|
| 3083 |
|
|---|
| 3084 | $iban = $this->iban_trim($iban);
|
|---|
| 3085 | $kontonr = substr($iban, 12, 10);
|
|---|
| 3086 | $blz = substr($iban, 4, 8);
|
|---|
| 3087 |
|
|---|
| 3088 | $result = $this->CheckAccount($kontonr,$blz);
|
|---|
| 3089 |
|
|---|
| 3090 | return $result;
|
|---|
| 3091 |
|
|---|
| 3092 | }
|
|---|
| 3093 |
|
|---|
| 3094 | function is_sepa_country($ctry_iso2) {
|
|---|
| 3095 |
|
|---|
| 3096 | $result = false;
|
|---|
| 3097 |
|
|---|
| 3098 | if ($this->ibanstructure[$ctry_iso2]['sepa_ctry']) {
|
|---|
| 3099 | $result = true;
|
|---|
| 3100 | }
|
|---|
| 3101 |
|
|---|
| 3102 | return $result;
|
|---|
| 3103 |
|
|---|
| 3104 | }
|
|---|
| 3105 |
|
|---|
| 3106 | function iban_trim($iban) {
|
|---|
| 3107 |
|
|---|
| 3108 | // IBAN auf einheitliches Format mit Großbuchstaben und ohne Leerstellen bringen
|
|---|
| 3109 | // Swift (BIC) können damit ebenfalls formatiert werden
|
|---|
| 3110 | $iban = trim($iban);
|
|---|
| 3111 | $iban = strtoupper($iban);
|
|---|
| 3112 | $iban = preg_replace('/[^A-Z0-9]/','',$iban);
|
|---|
| 3113 |
|
|---|
| 3114 | return $iban;
|
|---|
| 3115 |
|
|---|
| 3116 | }
|
|---|
| 3117 |
|
|---|
| 3118 | function iban_format_human($iban) {
|
|---|
| 3119 |
|
|---|
| 3120 | // IBAN in durch Leerzeichen getrennte Vierergruppen formatieren
|
|---|
| 3121 |
|
|---|
| 3122 | $iban = $this->iban_trim($iban);
|
|---|
| 3123 |
|
|---|
| 3124 | $quadrupel_count = ceil(strlen($iban)/4);
|
|---|
| 3125 | $iban_formatted = substr($iban,0,4);
|
|---|
| 3126 |
|
|---|
| 3127 | for ($i = 1, $n = $quadrupel_count; $i < $n; $i++) {
|
|---|
| 3128 | $iban_formatted .= ' '.substr($iban,($i*4),4);
|
|---|
| 3129 | }
|
|---|
| 3130 |
|
|---|
| 3131 | return $iban_formatted;
|
|---|
| 3132 |
|
|---|
| 3133 | }
|
|---|
| 3134 |
|
|---|
| 3135 | function bic_trim($bic) {
|
|---|
| 3136 |
|
|---|
| 3137 | $bic = $this->iban_trim($bic);
|
|---|
| 3138 |
|
|---|
| 3139 | return $bic;
|
|---|
| 3140 |
|
|---|
| 3141 | }
|
|---|
| 3142 |
|
|---|
| 3143 | function init() {
|
|---|
| 3144 |
|
|---|
| 3145 | /*
|
|---|
| 3146 | Dabei bedeutet:
|
|---|
| 3147 | AD, BE, ... Länderkennzeichen
|
|---|
| 3148 | pp zweistellige Prüfsumme
|
|---|
| 3149 | b Stelle der Bankleitzahl
|
|---|
| 3150 | d Kontotyp
|
|---|
| 3151 | k Stelle der Kontonummer
|
|---|
| 3152 | K Kontrollziffern
|
|---|
| 3153 | r Regionalcode
|
|---|
| 3154 | s Stelle der Filialnummer (Branch Code / code guichet)
|
|---|
| 3155 | X sonstige Funktionen
|
|---|
| 3156 | */
|
|---|
| 3157 |
|
|---|
| 3158 | $this->ibanstructure = array(
|
|---|
| 3159 | // Albanien
|
|---|
| 3160 | 'AL' => array( 'scheme' => 'ALpp bbbs sssK kkkk kkkk kkkk kkkk',
|
|---|
| 3161 | 'regex' => 'AL[0-9]{2}[0-9]{8}[A-Z0-9]{16}',
|
|---|
| 3162 | 'length' => 28,
|
|---|
| 3163 | 'sepa_ctry' => false,
|
|---|
| 3164 | 'bank_start_pos' => 5,
|
|---|
| 3165 | 'bank_length' => 8),
|
|---|
| 3166 | // Andorra
|
|---|
| 3167 | 'AD' => array( 'scheme' => 'ADpp bbbb ssss kkkk kkkk kkkk',
|
|---|
| 3168 | 'regex' => 'AD[0-9]{2}[0-9]{4}[0-9]{4}[A-Z0-9]{12}',
|
|---|
| 3169 | 'length' => 24,
|
|---|
| 3170 | 'sepa_ctry' => false,
|
|---|
| 3171 | 'bank_start_pos' => 5,
|
|---|
| 3172 | 'bank_length' => 8),
|
|---|
| 3173 | // Aserbaidschan
|
|---|
| 3174 | 'AZ' => array( 'scheme' => 'AZpp bbbb kkkk kkkk kkkk kkkk kkkk',
|
|---|
| 3175 | 'regex' => 'AZ[0-9]{2}[A-Z]{4}[A-Z0-9]{20}',
|
|---|
| 3176 | 'length' => 28,
|
|---|
| 3177 | 'sepa_ctry' => false,
|
|---|
| 3178 | 'bank_start_pos' => 5,
|
|---|
| 3179 | 'bank_length' => 5),
|
|---|
| 3180 | // Bahrain
|
|---|
| 3181 | 'BH' => array( 'scheme' => 'BHpp bbbb kkkk kkkk kkkk kk',
|
|---|
| 3182 | 'regex' => 'BH[0-9]{2}[A-Z]{4}[A-Z0-9]{14}',
|
|---|
| 3183 | 'length' => 22,
|
|---|
| 3184 | 'sepa_ctry' => false,
|
|---|
| 3185 | 'bank_start_pos' => 5,
|
|---|
| 3186 | 'bank_length' => 4),
|
|---|
| 3187 | // Belgien
|
|---|
| 3188 | 'BE' => array( 'scheme' => 'BEpp bbbk kkkk kkKK',
|
|---|
| 3189 | 'regex' => 'BE[0-9]{2}[0-9]{3}[0-9]{7}[0-9]{2}',
|
|---|
| 3190 | 'length' => 16,
|
|---|
| 3191 | 'sepa_ctry' => true,
|
|---|
| 3192 | 'bank_start_pos' => 5,
|
|---|
| 3193 | 'bank_length' => 3),
|
|---|
| 3194 | // Bosnien und Herzegowina
|
|---|
| 3195 | 'BA' => array( 'scheme' => 'BApp bbbs sskk kkkk kkKK',
|
|---|
| 3196 | 'regex' => 'BA[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{8}[0-9]{2}',
|
|---|
| 3197 | 'length' => 20,
|
|---|
| 3198 | 'sepa_ctry' => false,
|
|---|
| 3199 | 'bank_start_pos' => 5,
|
|---|
| 3200 | 'bank_length' => 7),
|
|---|
| 3201 | // Brasilien
|
|---|
| 3202 | 'BR' => array( 'scheme' => 'BRpp bbbb bbbb ssss skkk kkkk kkkk k',
|
|---|
| 3203 | 'regex' => 'BR[0-9]{2}[0-9]{8}[0-9]{5}[0-9]{10}[A-Z][A-Z0-9]',
|
|---|
| 3204 | 'length' => 29,
|
|---|
| 3205 | 'sepa_ctry' => false,
|
|---|
| 3206 | 'bank_start_pos' => 5,
|
|---|
| 3207 | 'bank_length' => 13),
|
|---|
| 3208 | // Bulgarien
|
|---|
| 3209 | 'BG' => array( 'scheme' => 'BGpp bbbb ssss ddkk kkkk kk',
|
|---|
| 3210 | 'regex' => 'BG[0-9]{2}[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}',
|
|---|
| 3211 | 'length' => 22,
|
|---|
| 3212 | 'sepa_ctry' => true,
|
|---|
| 3213 | 'bank_start_pos' => 5,
|
|---|
| 3214 | 'bank_length' => 8),
|
|---|
| 3215 | // Costa Rica
|
|---|
| 3216 | 'CR' => array( 'scheme' => 'CRpp bbbk kkkk kkkk kkkk k',
|
|---|
| 3217 | 'regex' => 'CR[0-9]{2}[0-9]{3}[0-9]{14}',
|
|---|
| 3218 | 'length' => 21,
|
|---|
| 3219 | 'sepa_ctry' => false,
|
|---|
| 3220 | 'bank_start_pos' => 5,
|
|---|
| 3221 | 'bank_length' => 3),
|
|---|
| 3222 | // Dänemark
|
|---|
| 3223 | 'DK' => array( 'scheme' => 'DKpp bbbb kkkk kkkk kK',
|
|---|
| 3224 | 'regex' => 'DK[0-9]{2}[0-9]{14}',
|
|---|
| 3225 | 'length' => 18,
|
|---|
| 3226 | 'sepa_ctry' => true,
|
|---|
| 3227 | 'bank_start_pos' => 5,
|
|---|
| 3228 | 'bank_length' => 4),
|
|---|
| 3229 | // Deutschland
|
|---|
| 3230 | 'DE' => array( 'scheme' => 'DEpp bbbb bbbb kkkk kkkk kk',
|
|---|
| 3231 | 'regex' => 'DE[0-9]{2}[0-9]{8}[0-9]{10}',
|
|---|
| 3232 | 'length' => 22,
|
|---|
| 3233 | 'sepa_ctry' => true,
|
|---|
| 3234 | 'bank_start_pos' => 5,
|
|---|
| 3235 | 'bank_length' => 8),
|
|---|
| 3236 | // Dominikanische Republik
|
|---|
| 3237 | 'DO' => array( 'scheme' => 'DOpp bbbb kkkk kkkk kkkk kkkk kkkk',
|
|---|
| 3238 | 'regex' => 'DO[0-9]{2}[A-Z0-9]{4}[0-9]{20}',
|
|---|
| 3239 | 'length' => 28,
|
|---|
| 3240 | 'sepa_ctry' => false,
|
|---|
| 3241 | 'bank_start_pos' => 5,
|
|---|
| 3242 | 'bank_length' => 4),
|
|---|
| 3243 | // Estland
|
|---|
| 3244 | 'EE' => array( 'scheme' => 'EEpp bbkk kkkk kkkk kkkK',
|
|---|
| 3245 | 'regex' => 'EE[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{11}[0-9]{1}',
|
|---|
| 3246 | 'length' => 20,
|
|---|
| 3247 | 'sepa_ctry' => true,
|
|---|
| 3248 | 'bank_start_pos' => 5,
|
|---|
| 3249 | 'bank_length' => 4),
|
|---|
| 3250 | // Faröer Insel
|
|---|
| 3251 | 'FO' => array( 'scheme' => 'FOpp bbbb kkkk kkkk kK',
|
|---|
| 3252 | 'regex' => 'FO[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}',
|
|---|
| 3253 | 'length' => 18,
|
|---|
| 3254 | 'sepa_ctry' => true,
|
|---|
| 3255 | 'bank_start_pos' => 5,
|
|---|
| 3256 | 'bank_length' => 4),
|
|---|
| 3257 | // Finnland
|
|---|
| 3258 | 'FI' => array( 'scheme' => 'FIpp bbbb bbkk kkkk kK',
|
|---|
| 3259 | 'regex' => 'FI[0-9]{2}[0-9]{6}[0-9]{7}[0-9]{1}',
|
|---|
| 3260 | 'length' => 18,
|
|---|
| 3261 | 'sepa_ctry' => true,
|
|---|
| 3262 | 'bank_start_pos' => 5,
|
|---|
| 3263 | 'bank_length' => 6),
|
|---|
| 3264 | // Frankreich
|
|---|
| 3265 | 'FR' => array( 'scheme' => 'FRpp bbbb bsss sskk kkkk kkkk kKK',
|
|---|
| 3266 | 'regex' => 'FR[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}',
|
|---|
| 3267 | 'length' => 27,
|
|---|
| 3268 | 'sepa_ctry' => true,
|
|---|
| 3269 | 'bank_start_pos' => 5,
|
|---|
| 3270 | 'bank_length' => 10),
|
|---|
| 3271 | // Georgien
|
|---|
| 3272 | 'GE' => array( 'scheme' => 'GEpp bbkk kkkk kkkk kkkk kk',
|
|---|
| 3273 | 'regex' => 'GE[0-9]{2}[A-Z]{2}[0-9]{16}',
|
|---|
| 3274 | 'length' => 22,
|
|---|
| 3275 | 'sepa_ctry' => false,
|
|---|
| 3276 | 'bank_start_pos' => 5,
|
|---|
| 3277 | 'bank_length' => 2),
|
|---|
| 3278 | // Gibraltar
|
|---|
| 3279 | 'GI' => array( 'scheme' => 'GIpp bbbb kkkk kkkk kkkk kkk',
|
|---|
| 3280 | 'regex' => 'GI[0-9]{2}[A-Z]{4}[A-Z0-9]{15}',
|
|---|
| 3281 | 'length' => 23,
|
|---|
| 3282 | 'sepa_ctry' => true,
|
|---|
| 3283 | 'bank_start_pos' => 5,
|
|---|
| 3284 | 'bank_length' => 4),
|
|---|
| 3285 | // Griechenland
|
|---|
| 3286 | 'GR' => array( 'scheme' => 'GRpp bbbs sssk kkkk kkkk kkkk kkk',
|
|---|
| 3287 | 'regex' => 'GR[0-9]{2}[0-9]{3}[0-9]{4}[A-Z0-9]{16}',
|
|---|
| 3288 | 'length' => 27,
|
|---|
| 3289 | 'sepa_ctry' => true,
|
|---|
| 3290 | 'bank_start_pos' => 5,
|
|---|
| 3291 | 'bank_length' => 7),
|
|---|
| 3292 | // Grönland
|
|---|
| 3293 | 'GL' => array( 'scheme' => 'GLpp bbbb kkkk kkkk kK',
|
|---|
| 3294 | 'regex' => 'GL[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}',
|
|---|
| 3295 | 'length' => 18,
|
|---|
| 3296 | 'sepa_ctry' => true,
|
|---|
| 3297 | 'bank_start_pos' => 5,
|
|---|
| 3298 | 'bank_length' => 4),
|
|---|
| 3299 | // Großbritannien
|
|---|
| 3300 | 'GB' => array( 'scheme' => 'GBpp bbbb ssss sskk kkkk kk',
|
|---|
| 3301 | 'regex' => 'GB[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}',
|
|---|
| 3302 | 'length' => 22,
|
|---|
| 3303 | 'sepa_ctry' => true,
|
|---|
| 3304 | 'bank_start_pos' => 5,
|
|---|
| 3305 | 'bank_length' => 4),
|
|---|
| 3306 | // Guadeloupe
|
|---|
| 3307 | 'GP' => array( 'scheme' => 'GPpp bbbb bsss sskk kkkk kkkk kKK',
|
|---|
| 3308 | 'regex' => null,
|
|---|
| 3309 | 'length' => 27,
|
|---|
| 3310 | 'sepa_ctry' => false,
|
|---|
| 3311 | 'bank_start_pos' => 5,
|
|---|
| 3312 | 'bank_length' => 10),
|
|---|
| 3313 | // Guatemala
|
|---|
| 3314 | 'GT' => array( 'scheme' => 'GTpp bbbb kkkk kkkk kkkk kkkk kkkk',
|
|---|
| 3315 | 'regex' => 'GT[0-9]{2}[A-Z0-9]{4}[A-Z0-9]{20}',
|
|---|
| 3316 | 'length' => 28,
|
|---|
| 3317 | 'sepa_ctry' => false,
|
|---|
| 3318 | 'bank_start_pos' => 5,
|
|---|
| 3319 | 'bank_length' => 4),
|
|---|
| 3320 | // Hongkong
|
|---|
| 3321 | 'HK' => array( 'scheme' => 'HKpp bbbb kkkk kkkk',
|
|---|
| 3322 | 'regex' => null,
|
|---|
| 3323 | 'length' => 16,
|
|---|
| 3324 | 'sepa_ctry' => false,
|
|---|
| 3325 | 'bank_start_pos' => 5,
|
|---|
| 3326 | 'bank_length' => 4),
|
|---|
| 3327 | // Irland
|
|---|
| 3328 | 'IE' => array( 'scheme' => 'IEpp bbbb ssss sskk kkkk kk',
|
|---|
| 3329 | 'regex' => 'IE[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}',
|
|---|
| 3330 | 'length' => 22,
|
|---|
| 3331 | 'sepa_ctry' => true,
|
|---|
| 3332 | 'bank_start_pos' => 5,
|
|---|
| 3333 | 'bank_length' => 10),
|
|---|
| 3334 | // Island
|
|---|
| 3335 | 'IS' => array( 'scheme' => 'ISpp bbbb sskk kkkk XXXX XXXX XX',
|
|---|
| 3336 | 'regex' => 'IS[0-9]{2}[0-9]{4}[0-9]{2}[0-9]{6}[0-9]{10}',
|
|---|
| 3337 | 'length' => 26,
|
|---|
| 3338 | 'sepa_ctry' => true,
|
|---|
| 3339 | 'bank_start_pos' => 5,
|
|---|
| 3340 | 'bank_length' => 6),
|
|---|
| 3341 | // Israel
|
|---|
| 3342 | 'IL' => array( 'scheme' => 'ILpp bbbs sskk kkkk kkkk kkk',
|
|---|
| 3343 | 'regex' => 'IL[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{13}',
|
|---|
| 3344 | 'length' => 23,
|
|---|
| 3345 | 'sepa_ctry' => false,
|
|---|
| 3346 | 'bank_start_pos' => 5,
|
|---|
| 3347 | 'bank_length' => 6),
|
|---|
| 3348 | // Italien
|
|---|
| 3349 | 'IT' => array( 'scheme' => 'ITpp Kbbb bbss sssk kkkk kkkk kkk',
|
|---|
| 3350 | 'regex' => 'IT[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}',
|
|---|
| 3351 | 'length' => 27,
|
|---|
| 3352 | 'sepa_ctry' => true,
|
|---|
| 3353 | 'bank_start_pos' => 6,
|
|---|
| 3354 | 'bank_length' => 10),
|
|---|
| 3355 | // Jordanien
|
|---|
| 3356 | 'JO' => array( 'scheme' => 'JOpp bbbb ssss kkkk kkkk kkkk kkkk kk',
|
|---|
| 3357 | 'regex' => null,
|
|---|
| 3358 | 'length' => 30,
|
|---|
| 3359 | 'sepa_ctry' => false,
|
|---|
| 3360 | 'bank_start_pos' => 5,
|
|---|
| 3361 | 'bank_length' => 8),
|
|---|
| 3362 | // Jungferninseln
|
|---|
| 3363 | 'VG' => array( 'scheme' => 'VGpp bbbb kkkk kkkk kkkk kkkk',
|
|---|
| 3364 | 'regex' => 'VG[0-9]{2}[A-Z]{4}[0-9]{16}',
|
|---|
| 3365 | 'length' => 24,
|
|---|
| 3366 | 'sepa_ctry' => false,
|
|---|
| 3367 | 'bank_start_pos' => 5,
|
|---|
| 3368 | 'bank_length' => 4),
|
|---|
| 3369 | // Kasachstan
|
|---|
| 3370 | 'KZ' => array( 'scheme' => 'KZpp bbbk kkkk kkkk kkkk',
|
|---|
| 3371 | 'regex' => 'KZ[0-9]{2}[0-9]{3}[A-Z0-9]{13}',
|
|---|
| 3372 | 'length' => 20,
|
|---|
| 3373 | 'sepa_ctry' => false,
|
|---|
| 3374 | 'bank_start_pos' => 5,
|
|---|
| 3375 | 'bank_length' => 3),
|
|---|
| 3376 | // Katar
|
|---|
| 3377 | 'QA' => array( 'scheme' => 'QApp bbbb kkkk kkkk kkkk kkkk kkkk k',
|
|---|
| 3378 | 'regex' => null,
|
|---|
| 3379 | 'length' => 29,
|
|---|
| 3380 | 'sepa_ctry' => false,
|
|---|
| 3381 | 'bank_start_pos' => 5,
|
|---|
| 3382 | 'bank_length' => 4),
|
|---|
| 3383 | // Kroatien
|
|---|
| 3384 | 'HR' => array( 'scheme' => 'HRpp bbbb bbbk kkkk kkkk k',
|
|---|
| 3385 | 'regex' => 'HR[0-9]{2}[0-9]{7}[0-9]{10}',
|
|---|
| 3386 | 'length' => 21,
|
|---|
| 3387 | 'sepa_ctry' => false,
|
|---|
| 3388 | 'bank_start_pos' => 5,
|
|---|
| 3389 | 'bank_length' => 7),
|
|---|
| 3390 | // Kuwait
|
|---|
| 3391 | 'KW' => array( 'scheme' => 'KWpp bbbb kkkk kkkk kkkk kkkk kkkk kk',
|
|---|
| 3392 | 'regex' => 'KW[0-9]{2}[A-Z]{4}[0-9]{22}',
|
|---|
| 3393 | 'length' => 30,
|
|---|
| 3394 | 'sepa_ctry' => false,
|
|---|
| 3395 | 'bank_start_pos' => 5,
|
|---|
| 3396 | 'bank_length' => 4),
|
|---|
| 3397 | // Lettland
|
|---|
| 3398 | 'LV' => array( 'scheme' => 'LVpp bbbb kkkk kkkk kkkk k',
|
|---|
| 3399 | 'regex' => 'LV[0-9]{2}[A-Z]{4}[A-Z0-9]{13}',
|
|---|
| 3400 | 'length' => 21,
|
|---|
| 3401 | 'sepa_ctry' => true,
|
|---|
| 3402 | 'bank_start_pos' => 5,
|
|---|
| 3403 | 'bank_length' => 4),
|
|---|
| 3404 | // Libanon
|
|---|
| 3405 | 'LB' => array( 'scheme' => 'LBpp bbbb kkkk kkkk kkkk kkkk kkkk',
|
|---|
| 3406 | 'regex' => 'LB[0-9]{2}[0-9]{4}[A-Z0-9]{20}',
|
|---|
| 3407 | 'length' => 28,
|
|---|
| 3408 | 'sepa_ctry' => false,
|
|---|
| 3409 | 'bank_start_pos' => 5,
|
|---|
| 3410 | 'bank_length' => 4),
|
|---|
| 3411 | // Liechtenstein
|
|---|
| 3412 | 'LI' => array( 'scheme' => 'LIpp bbbb bkkk kkkk kkkk k',
|
|---|
| 3413 | 'regex' => 'LI[0-9]{2}[0-9]{5}[A-Z0-9]{12}',
|
|---|
| 3414 | 'length' => 21,
|
|---|
| 3415 | 'sepa_ctry' => true,
|
|---|
| 3416 | 'bank_start_pos' => 5,
|
|---|
| 3417 | 'bank_length' => 5),
|
|---|
| 3418 | // Litauen
|
|---|
| 3419 | 'LT' => array( 'scheme' => 'LTpp bbbb bkkk kkkk kkkk',
|
|---|
| 3420 | 'regex' => 'LT[0-9]{2}[0-9]{5}[0-9]{11}',
|
|---|
| 3421 | 'length' => 20,
|
|---|
| 3422 | 'sepa_ctry' => true,
|
|---|
| 3423 | 'bank_start_pos' => 5,
|
|---|
| 3424 | 'bank_length' => 5),
|
|---|
| 3425 | // Luxemburg
|
|---|
| 3426 | 'LU' => array( 'scheme' => 'LUpp bbbk kkkk kkkk kkkk',
|
|---|
| 3427 | 'regex' => 'LU[0-9]{2}[0-9]{3}[A-Z0-9]{13}',
|
|---|
| 3428 | 'length' => 20,
|
|---|
| 3429 | 'sepa_ctry' => true,
|
|---|
| 3430 | 'bank_start_pos' => 5,
|
|---|
| 3431 | 'bank_length' => 3),
|
|---|
| 3432 | // Malta
|
|---|
| 3433 | 'MT' => array( 'scheme' => 'MTpp bbbb ssss skkk kkkk kkkk kkkk kkk',
|
|---|
| 3434 | 'regex' => 'MT[0-9]{2}[A-Z]{4}[0-9]{5}[A-Z0-9]{18}',
|
|---|
| 3435 | 'length' => 31,
|
|---|
| 3436 | 'sepa_ctry' => true,
|
|---|
| 3437 | 'bank_start_pos' => 5,
|
|---|
| 3438 | 'bank_length' => 9),
|
|---|
| 3439 | // Marokko
|
|---|
| 3440 | 'MT' => array( 'scheme' => 'MApp bbba aakk kkkk kkkk kkKK',
|
|---|
| 3441 | 'regex' => null,
|
|---|
| 3442 | 'length' => 24,
|
|---|
| 3443 | 'sepa_ctry' => false,
|
|---|
| 3444 | 'bank_start_pos' => 5,
|
|---|
| 3445 | 'bank_length' => 3),
|
|---|
| 3446 | // Martinique
|
|---|
| 3447 | 'MQ' => array( 'scheme' => 'MQpp bbbb bsss sskk kkkk kkkk kKK',
|
|---|
| 3448 | 'regex' => null,
|
|---|
| 3449 | 'length' => 27,
|
|---|
| 3450 | 'sepa_ctry' => false,
|
|---|
| 3451 | 'bank_start_pos' => 5,
|
|---|
| 3452 | 'bank_length' => 10),
|
|---|
| 3453 | // Mauretanien
|
|---|
| 3454 | 'MR' => array( 'scheme' => 'MRpp bbbb bsss sskk kkkk kkkk kKK',
|
|---|
| 3455 | 'regex' => 'MR13[0-9]{5}[0-9]{5}[0-9]{11}[0-9]{2}',
|
|---|
| 3456 | 'length' => 27,
|
|---|
| 3457 | 'sepa_ctry' => false,
|
|---|
| 3458 | 'bank_start_pos' => 5,
|
|---|
| 3459 | 'bank_length' => 10),
|
|---|
| 3460 | // Mauritius
|
|---|
| 3461 | 'MU' => array( 'scheme' => 'MUpp bbbb bbss kkkk kkkk kkkk kkkK KK',
|
|---|
| 3462 | 'regex' => 'MU[0-9]{2}[A-Z]{4}[0-9]{2}[0-9]{2}[0-9]{12}[0-9]{3}[A-Z]{3}',
|
|---|
| 3463 | 'length' => 30,
|
|---|
| 3464 | 'sepa_ctry' => false,
|
|---|
| 3465 | 'bank_start_pos' => 5,
|
|---|
| 3466 | 'bank_length' => 7),
|
|---|
| 3467 | // Mazedonien
|
|---|
| 3468 | 'MK' => array( 'scheme' => 'MKpp bbbk kkkk kkkk kKK',
|
|---|
| 3469 | 'regex' => 'MK[0-9]{2}[0-9]{3}[A-Z0-9]{10}[0-9]{2}',
|
|---|
| 3470 | 'length' => 19,
|
|---|
| 3471 | 'sepa_ctry' => false,
|
|---|
| 3472 | 'bank_start_pos' => 5,
|
|---|
| 3473 | 'bank_length' => 3),
|
|---|
| 3474 | // Moldawien
|
|---|
| 3475 | 'MD' => array( 'scheme' => 'MDpp bbkk kkkk kkkk kkkk kkkk',
|
|---|
| 3476 | 'regex' => 'MD[0-9]{2}[A-Z0-9]{20}',
|
|---|
| 3477 | 'length' => 24,
|
|---|
| 3478 | 'sepa_ctry' => false,
|
|---|
| 3479 | 'bank_start_pos' => 5,
|
|---|
| 3480 | 'bank_length' => 2),
|
|---|
| 3481 | // Monaco
|
|---|
| 3482 | 'MC' => array( 'scheme' => 'MCpp bbbb bsss sskk kkkk kkkk kKK',
|
|---|
| 3483 | 'regex' => 'MC[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}',
|
|---|
| 3484 | 'length' => 27,
|
|---|
| 3485 | 'sepa_ctry' => true,
|
|---|
| 3486 | 'bank_start_pos' => 5,
|
|---|
| 3487 | 'bank_length' => 10),
|
|---|
| 3488 | // Montenegro
|
|---|
| 3489 | 'ME' => array( 'scheme' => 'MEpp bbbk kkkk kkkk kkkk KK',
|
|---|
| 3490 | 'regex' => 'ME[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',
|
|---|
| 3491 | 'length' => 20,
|
|---|
| 3492 | 'sepa_ctry' => false,
|
|---|
| 3493 | 'bank_start_pos' => 5,
|
|---|
| 3494 | 'bank_length' => 3),
|
|---|
| 3495 | // Neukaledonien
|
|---|
| 3496 | 'NC' => array( 'scheme' => 'NCpp bbbb bsss sskk kkkk kkkk kKK',
|
|---|
| 3497 | 'regex' => null,
|
|---|
| 3498 | 'length' => 30,
|
|---|
| 3499 | 'sepa_ctry' => false,
|
|---|
| 3500 | 'bank_start_pos' => 5,
|
|---|
| 3501 | 'bank_length' => 10),
|
|---|
| 3502 | // Niederlande
|
|---|
| 3503 | 'NL' => array( 'scheme' => 'NLpp bbbb kkkk kkkk kk',
|
|---|
| 3504 | 'regex' => 'NL[0-9]{2}[A-Z]{4}[0-9]{10}',
|
|---|
| 3505 | 'length' => 18,
|
|---|
| 3506 | 'sepa_ctry' => true,
|
|---|
| 3507 | 'bank_start_pos' => 5,
|
|---|
| 3508 | 'bank_length' => 4),
|
|---|
| 3509 | // Norwegen
|
|---|
| 3510 | 'NO' => array( 'scheme' => 'NOpp bbbb kkkk kkK',
|
|---|
| 3511 | 'regex' => 'NO[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{1}',
|
|---|
| 3512 | 'length' => 15,
|
|---|
| 3513 | 'sepa_ctry' => true,
|
|---|
| 3514 | 'bank_start_pos' => 5,
|
|---|
| 3515 | 'bank_length' => 4),
|
|---|
| 3516 | // Österreich
|
|---|
| 3517 | 'AT' => array( 'scheme' => 'ATpp bbbb bkkk kkkk kkkk',
|
|---|
| 3518 | 'regex' => 'AT[0-9]{2}[0-9]{5}[0-9]{11}',
|
|---|
| 3519 | 'length' => 20,
|
|---|
| 3520 | 'sepa_ctry' => true,
|
|---|
| 3521 | 'bank_start_pos' => 5,
|
|---|
| 3522 | 'bank_length' => 5),
|
|---|
| 3523 | // Pakistan
|
|---|
| 3524 | 'PK' => array( 'scheme' => 'PKpp bbbb rrkk kkkk kkkk kkkk',
|
|---|
| 3525 | 'regex' => 'PK[0-9]{2}[A-Z]{4}[A-Z0-9]{16}',
|
|---|
| 3526 | 'length' => 24,
|
|---|
| 3527 | 'sepa_ctry' => false,
|
|---|
| 3528 | 'bank_start_pos' => 5,
|
|---|
| 3529 | 'bank_length' => 6),
|
|---|
| 3530 | // Polen
|
|---|
| 3531 | 'PL' => array( 'scheme' => 'PLpp bbbs sssK kkkk kkkk kkkk kkkk',
|
|---|
| 3532 | 'regex' => 'PL[0-9]{2}[0-9]{8}[0-9]{16}',
|
|---|
| 3533 | 'length' => 28,
|
|---|
| 3534 | 'sepa_ctry' => true,
|
|---|
| 3535 | 'bank_start_pos' => 5,
|
|---|
| 3536 | 'bank_length' => 8),
|
|---|
| 3537 | // Palästinensische Autonomiegebiete
|
|---|
| 3538 | 'PS' => array( 'scheme' => 'PSpp bbbb rrrr rrrr rkkk kkkk kkkk k',
|
|---|
| 3539 | 'regex' => 'PS[0-9]{2}[A-Z]{4}[A-Z0-9]{21}',
|
|---|
| 3540 | 'length' => 29,
|
|---|
| 3541 | 'sepa_ctry' => false,
|
|---|
| 3542 | 'bank_start_pos' => 5,
|
|---|
| 3543 | 'bank_length' => 13),
|
|---|
| 3544 | // Portugal
|
|---|
| 3545 | 'PT' => array( 'scheme' => 'PTpp bbbb ssss kkkk kkkk kkkK K',
|
|---|
| 3546 | 'regex' => 'PT[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{11}[0-9]{2}',
|
|---|
| 3547 | 'length' => 25,
|
|---|
| 3548 | 'sepa_ctry' => true,
|
|---|
| 3549 | 'bank_start_pos' => 5,
|
|---|
| 3550 | 'bank_length' => 8),
|
|---|
| 3551 | // Réunion
|
|---|
| 3552 | 'RE' => array( 'scheme' => 'REpp bbbb bsss sskk kkkk kkkk kKK',
|
|---|
| 3553 | 'regex' => null,
|
|---|
| 3554 | 'length' => 27,
|
|---|
| 3555 | 'sepa_ctry' => false,
|
|---|
| 3556 | 'bank_start_pos' => 5,
|
|---|
| 3557 | 'bank_length' => 10),
|
|---|
| 3558 | // Rumänien*
|
|---|
| 3559 | 'RO' => array( 'scheme' => 'ROpp bbbb kkkk kkkk kkkk kkkk',
|
|---|
| 3560 | 'regex' => 'RO[0-9]{2}[A-Z]{4}[A-Z0-9]{16}',
|
|---|
| 3561 | 'length' => 24,
|
|---|
| 3562 | 'sepa_ctry' => true,
|
|---|
| 3563 | 'bank_start_pos' => 5,
|
|---|
| 3564 | 'bank_length' => 4),
|
|---|
| 3565 | // San Marino
|
|---|
| 3566 | 'SM' => array( 'scheme' => 'SMpp Kbbb bbss sssk kkkk kkkk kkk',
|
|---|
| 3567 | 'regex' => 'SM[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}',
|
|---|
| 3568 | 'length' => 27,
|
|---|
| 3569 | 'sepa_ctry' => false,
|
|---|
| 3570 | 'bank_start_pos' => 6,
|
|---|
| 3571 | 'bank_length' => 10),
|
|---|
| 3572 | // Saudi-Arabien
|
|---|
| 3573 | 'SA' => array( 'scheme' => 'SApp bbkk kkkk kkkk kkkk kkkk',
|
|---|
| 3574 | 'regex' => 'SA[0-9]{2}[0-9]{2}[A-Z0-9]{18}',
|
|---|
| 3575 | 'length' => 24,
|
|---|
| 3576 | 'sepa_ctry' => false,
|
|---|
| 3577 | 'bank_start_pos' => 5,
|
|---|
| 3578 | 'bank_length' => 2),
|
|---|
| 3579 | // Schweden
|
|---|
| 3580 | 'SE' => array( 'scheme' => 'SEpp bbbk kkkk kkkk kkkk kkkK',
|
|---|
| 3581 | 'regex' => 'SE[0-9]{2}[0-9]{3}[0-9]{16}[0-9]{1}',
|
|---|
| 3582 | 'length' => 24,
|
|---|
| 3583 | 'sepa_ctry' => true,
|
|---|
| 3584 | 'bank_start_pos' => 5,
|
|---|
| 3585 | 'bank_length' => 3),
|
|---|
| 3586 | // Schweiz
|
|---|
| 3587 | 'CH' => array( 'scheme' => 'CHpp bbbb bkkk kkkk kkkk k',
|
|---|
| 3588 | 'regex' => 'CH[0-9]{2}[0-9]{5}[A-Z0-9]{12}',
|
|---|
| 3589 | 'length' => 21,
|
|---|
| 3590 | 'sepa_ctry' => true,
|
|---|
| 3591 | 'bank_start_pos' => 5,
|
|---|
| 3592 | 'bank_length' => 5),
|
|---|
| 3593 | // Serbien
|
|---|
| 3594 | 'RS' => array( 'scheme' => 'RSpp bbbk kkkk kkkk kkkk KK',
|
|---|
| 3595 | 'regex' => 'RS[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',
|
|---|
| 3596 | 'length' => 22,
|
|---|
| 3597 | 'sepa_ctry' => false,
|
|---|
| 3598 | 'bank_start_pos' => 5,
|
|---|
| 3599 | 'bank_length' => 3),
|
|---|
| 3600 | // Slowakei
|
|---|
| 3601 | 'SK' => array( 'scheme' => 'SKpp bbbb ssss sskk kkkk kkkk',
|
|---|
| 3602 | 'regex' => 'SK[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{10}',
|
|---|
| 3603 | 'length' => 24,
|
|---|
| 3604 | 'sepa_ctry' => true,
|
|---|
| 3605 | 'bank_start_pos' => 5,
|
|---|
| 3606 | 'bank_length' => 4),
|
|---|
| 3607 | // Slowenien
|
|---|
| 3608 | 'SI' => array( 'scheme' => 'SIpp bbss skkk kkkk kKK',
|
|---|
| 3609 | 'regex' => 'SI[0-9]{2}[0-9]{5}[0-9]{8}[0-9]{2}',
|
|---|
| 3610 | 'length' => 19,
|
|---|
| 3611 | 'sepa_ctry' => true,
|
|---|
| 3612 | 'bank_start_pos' => 5,
|
|---|
| 3613 | 'bank_length' => 5),
|
|---|
| 3614 | // Spanien
|
|---|
| 3615 | 'ES' => array( 'scheme' => 'ESpp bbbb ssss KKkk kkkk kkkk',
|
|---|
| 3616 | 'regex' => 'ES[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{1}[0-9]{1}[0-9]{10}',
|
|---|
| 3617 | 'length' => 24,
|
|---|
| 3618 | 'sepa_ctry' => true,
|
|---|
| 3619 | 'bank_start_pos' => 5,
|
|---|
| 3620 | 'bank_length' => 8),
|
|---|
| 3621 | // Tschechien
|
|---|
| 3622 | 'CZ' => array( 'scheme' => 'CZpp bbbb kkkk kkkk kkkk kkkk',
|
|---|
| 3623 | 'regex' => 'CZ[0-9]{2}[0-9]{20}',
|
|---|
| 3624 | 'length' => 24,
|
|---|
| 3625 | 'sepa_ctry' => true,
|
|---|
| 3626 | 'bank_start_pos' => 5,
|
|---|
| 3627 | 'bank_length' => 4),
|
|---|
| 3628 | // Türkei
|
|---|
| 3629 | 'TR' => array( 'scheme' => 'TRpp bbbb brkk kkkk kkkk kkkk kk',
|
|---|
| 3630 | 'regex' => 'TR[0-9]{2}[0-9]{5}[A-Z0-9]{1}[A-Z0-9]{16}',
|
|---|
| 3631 | 'length' => 26,
|
|---|
| 3632 | 'sepa_ctry' => false,
|
|---|
| 3633 | 'bank_start_pos' => 5,
|
|---|
| 3634 | 'bank_length' => 6),
|
|---|
| 3635 | // Tunesien
|
|---|
| 3636 | 'TN' => array( 'scheme' => 'TNpp bbss skkk kkkk kkkk kkKK',
|
|---|
| 3637 | 'regex' => 'TN59[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',
|
|---|
| 3638 | 'length' => 24,
|
|---|
| 3639 | 'sepa_ctry' => false,
|
|---|
| 3640 | 'bank_start_pos' => 5,
|
|---|
| 3641 | 'bank_length' => 5),
|
|---|
| 3642 | // Ungarn
|
|---|
| 3643 | 'HU' => array( 'scheme' => 'HUpp bbbs sssK kkkk kkkk kkkk kkkK',
|
|---|
| 3644 | 'regex' => 'HU[0-9]{2}[0-9]{3}[0-9]{4}[0-9]{1}[0-9]{15}[0-9]{1}',
|
|---|
| 3645 | 'length' => 28,
|
|---|
| 3646 | 'sepa_ctry' => true,
|
|---|
| 3647 | 'bank_start_pos' => 5,
|
|---|
| 3648 | 'bank_length' => 7),
|
|---|
| 3649 | // Vereinigte Arabische Emirate
|
|---|
| 3650 | 'AE' => array( 'scheme' => 'AEpp bbbk kkkk kkkk kkkk kkk',
|
|---|
| 3651 | 'regex' => 'AE[0-9]{2}[0-9]{3}[0-9]{16}',
|
|---|
| 3652 | 'length' => 23,
|
|---|
| 3653 | 'sepa_ctry' => false,
|
|---|
| 3654 | 'bank_start_pos' => 5,
|
|---|
| 3655 | 'bank_length' => 3),
|
|---|
| 3656 | // Zypern
|
|---|
| 3657 | 'CY' => array( 'scheme' => 'CYpp bbbs ssss kkkk kkkk kkkk kkkk',
|
|---|
| 3658 | 'regex' => 'CY[0-9]{2}[0-9]{3}[0-9]{5}[A-Z0-9]{16}',
|
|---|
| 3659 | 'length' => 28,
|
|---|
| 3660 | 'sepa_ctry' => true,
|
|---|
| 3661 | 'bank_start_pos' => 5,
|
|---|
| 3662 | 'bank_length' => 8),
|
|---|
| 3663 | );
|
|---|
| 3664 |
|
|---|
| 3665 |
|
|---|
| 3666 |
|
|---|
| 3667 |
|
|---|
| 3668 |
|
|---|
| 3669 | }
|
|---|
| 3670 |
|
|---|
| 3671 |
|
|---|
| 3672 | function bic_check_length($bic) {
|
|---|
| 3673 |
|
|---|
| 3674 | // Länge des BIC prüfen
|
|---|
| 3675 | if (strlen($bic) > 11) {
|
|---|
| 3676 | return 1060;
|
|---|
| 3677 | } elseif (strlen($bic) < 8) {
|
|---|
| 3678 | return 1070;
|
|---|
| 3679 | } elseif (strlen($bic) != 8 && strlen($bic) != 11) {
|
|---|
| 3680 | return 1080;
|
|---|
| 3681 | };
|
|---|
| 3682 |
|
|---|
| 3683 | return false;
|
|---|
| 3684 |
|
|---|
| 3685 | }
|
|---|
| 3686 |
|
|---|
| 3687 |
|
|---|
| 3688 | function bic_validate($bic) {
|
|---|
| 3689 |
|
|---|
| 3690 | /*
|
|---|
| 3691 | Der BIC oder SWIFT-Code hat eine Länge von 8 oder 11 alphanumerischen Zeichen und folgenden Aufbau: BBBBCCLLbbb
|
|---|
| 3692 | Bedeutung
|
|---|
| 3693 | BBBB: nur Buchstaben 4-stelliger Bankcode, vom Geldinstitut frei wählbar
|
|---|
| 3694 | CC: nur Buchstaben 2-stelliger Ländercode nach ISO 3166-1
|
|---|
| 3695 | LL: Buchstaben/Ziffern 2-stellige Codierung des Ortes in zwei Zeichen.
|
|---|
| 3696 | Das erste Zeichen darf nicht die Ziffer "0" oder "1" sein.
|
|---|
| 3697 | Wenn das zweite Zeichen kein Buchstabe, sondern eine Ziffer ist, so bedeutet dies:
|
|---|
| 3698 | 0 es handelt sich um eine Test-BIC
|
|---|
| 3699 | 1 es handelt sich um einen passiven SWIFT-Teilnehmer
|
|---|
| 3700 | 2 der Empfänger zahlt die Transaktionskosten
|
|---|
| 3701 | Der Buchstabe 'O' ist als zweites Zeichen nicht gestattet.
|
|---|
| 3702 | bbb: Buchstaben/Ziffern 3-stellige Kennzeichnung (Branch-Code) der Filiale oder Abteilung (optional)
|
|---|
| 3703 | Ein 8-stelliger BIC kann um "XXX" auf einen 11-stelligen ergänzt werden, entsprechend kann "XXX" auch weggelassen werden,
|
|---|
| 3704 | andere Kennzeichen nicht. Der Branch-Code darf nicht mit "X" anfangen, es sei denn, es ist "XXX".
|
|---|
| 3705 | */
|
|---|
| 3706 |
|
|---|
| 3707 | $bic = $this->bic_trim($bic);
|
|---|
| 3708 |
|
|---|
| 3709 | $result = false;
|
|---|
| 3710 | if(preg_match('/^([A-Z]){4}([A-Z]){2}([0-9A-Z]){2}([0-9A-Z]{3})?$/', $bic)) {
|
|---|
| 3711 | $result = true;
|
|---|
| 3712 | }
|
|---|
| 3713 | // Stellen 7 und 8: 2-stellige Codierung des Ortes in zwei Zeichen. Das erste Zeichen davon darf nicht die Ziffer "0" oder "1" sein. Der Buchstabe 'O' ist als zweites Zeichen nicht gestattet.
|
|---|
| 3714 | if (substr($bic,6,1) == '0' || substr($bic,6,1) == '1') {
|
|---|
| 3715 | $result = false;
|
|---|
| 3716 | }
|
|---|
| 3717 | if (substr($bic,7,1) == 'O') {
|
|---|
| 3718 | $result = false;
|
|---|
| 3719 | }
|
|---|
| 3720 | // Der Branch-Code darf nicht mit "X" anfangen, es sei denn, es ist "XXX".
|
|---|
| 3721 | if (substr($bic,8,1) == 'X' && substr($bic,8,3) != 'XXX') {
|
|---|
| 3722 | $result = false;
|
|---|
| 3723 | }
|
|---|
| 3724 |
|
|---|
| 3725 | return $result;
|
|---|
| 3726 |
|
|---|
| 3727 | }
|
|---|
| 3728 |
|
|---|
| 3729 | function get_bic($blz) {
|
|---|
| 3730 | $result = false;
|
|---|
| 3731 | $check_blz = $this->query($blz);
|
|---|
| 3732 | if ($check_blz != -1 && isset($check_blz['bic'])) {
|
|---|
| 3733 | $result = $check_blz['bic'];
|
|---|
| 3734 | }
|
|---|
| 3735 | return $result;
|
|---|
| 3736 | }
|
|---|
| 3737 |
|
|---|
| 3738 | function get_bankname($blz) {
|
|---|
| 3739 | $result = false;
|
|---|
| 3740 | $check_blz = $this->query($blz);
|
|---|
| 3741 | if ($check_blz != -1 && isset($check_blz['bankname'])) {
|
|---|
| 3742 | $result = $check_blz['bankname'];
|
|---|
| 3743 | }
|
|---|
| 3744 | return $result;
|
|---|
| 3745 | }
|
|---|
| 3746 |
|
|---|
| 3747 | function bic_check_german_account($bic, $iban) {
|
|---|
| 3748 |
|
|---|
| 3749 | // Überprüfe, ob BIC in BLZ-Daten der Deutschen Bundesbank vorhanden ist.
|
|---|
| 3750 |
|
|---|
| 3751 | $result = 0;
|
|---|
| 3752 |
|
|---|
| 3753 | if (MODULE_PAYMENT_BANKTRANSFER_DATABASE_BLZ == 'true' && defined(MODULE_PAYMENT_BANKTRANSFER_DATABASE_BLZ)) {
|
|---|
| 3754 | // Zunächst prüfen, ob BIC-Spalte in Bankleitzahlen-Tabelle enthalten
|
|---|
| 3755 | $table_query = xtc_db_query("SHOW COLUMNS from ".TABLE_BANKTRANSFER_BLZ." where Field = 'bic'");
|
|---|
| 3756 | if (xtc_db_num_rows($table_query) > 0) {
|
|---|
| 3757 |
|
|---|
| 3758 | // Okay: BIC-Spalte existiert
|
|---|
| 3759 | // Wir prüfen also den BIC
|
|---|
| 3760 | $result = 2020;
|
|---|
| 3761 |
|
|---|
| 3762 | $bic = $this->bic_trim($bic);
|
|---|
| 3763 | $bic_padded = str_pad($bic, 11, "X", STR_PAD_RIGHT);
|
|---|
| 3764 |
|
|---|
| 3765 | $german_bank_query = xtc_db_query("select * from ".TABLE_BANKTRANSFER_BLZ." where bic = '".xtc_db_input($bic)."' or bic = '".xtc_db_input($bic_padded)."' limit 1");
|
|---|
| 3766 |
|
|---|
| 3767 | if ($german_bank = xtc_db_fetch_array($german_bank_query)) {
|
|---|
| 3768 | $result = 0;
|
|---|
| 3769 | }
|
|---|
| 3770 |
|
|---|
| 3771 | }
|
|---|
| 3772 | }
|
|---|
| 3773 |
|
|---|
| 3774 | return $result;
|
|---|
| 3775 |
|
|---|
| 3776 | }
|
|---|
| 3777 |
|
|---|
| 3778 | function bban_to_iban($bban, $ctry_iso2) {
|
|---|
| 3779 |
|
|---|
| 3780 | // Leerzeichen entfernen und Buchstaben in Großbuchstaben verwandeln
|
|---|
| 3781 | $ctry_iso2 = $this->iban_trim($ctry_iso2);
|
|---|
| 3782 | $bban = $this->iban_trim($bban);
|
|---|
| 3783 |
|
|---|
| 3784 | $iban_tmp = $bban . $ctry_iso2.'00';
|
|---|
| 3785 |
|
|---|
| 3786 | $iban_tmp = str_replace(
|
|---|
| 3787 | array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
|---|
| 3788 | 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'),
|
|---|
| 3789 | array('10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22',
|
|---|
| 3790 | '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35'),
|
|---|
| 3791 | $iban_tmp);
|
|---|
| 3792 |
|
|---|
| 3793 |
|
|---|
| 3794 | $modulo = (bcmod($iban_tmp,"97"));
|
|---|
| 3795 | $pruefziffer = str_pad ( 98 - $modulo, 2, "0",STR_PAD_LEFT);
|
|---|
| 3796 | $iban = $ctry_iso2 . $pruefziffer . $bban;
|
|---|
| 3797 |
|
|---|
| 3798 | // Ergebnis überprüfen
|
|---|
| 3799 | $checkresult = $this->is_valid_iban($iban, false);
|
|---|
| 3800 | if ($checkresult > 0) {
|
|---|
| 3801 | $iban = false;
|
|---|
| 3802 | }
|
|---|
| 3803 |
|
|---|
| 3804 | return $iban;
|
|---|
| 3805 |
|
|---|
| 3806 | }
|
|---|
| 3807 |
|
|---|
| 3808 |
|
|---|
| 3809 | function message($error_code) {
|
|---|
| 3810 |
|
|---|
| 3811 | /* Folgende Error-Codes werden berücksichtigt */
|
|---|
| 3812 | /* */
|
|---|
| 3813 |
|
|---|
| 3814 | /* 0 -> Bankverbindung ist okay */
|
|---|
| 3815 |
|
|---|
| 3816 | /* 1 -> Kontonummer & BLZ passen nicht */
|
|---|
| 3817 | /* 2 -> Für diese Kontonummer ist kein Prüfziffernverfahren definiert */
|
|---|
| 3818 | /* 3 -> Dieses Prüfziffernverfahren ist noch nicht implementiert */
|
|---|
| 3819 | /* 4 -> Diese Kontonummer ist technisch nicht prüfbar */
|
|---|
| 3820 | /* 5 -> BLZ nicht gefunden */
|
|---|
| 3821 | /* 8 -> Keine BLZ übergeben */
|
|---|
| 3822 | /* 9 -> Keine Kontonummer übergeben */
|
|---|
| 3823 | /* 10 -> Kein Kontoinhaber übergeben */
|
|---|
| 3824 | /* 128 -> interner Fehler, der zeigt, dass eine Methode nicht implementiert ist */
|
|---|
| 3825 |
|
|---|
| 3826 | /* 1000 -> Länderkennung ist unbekannt */
|
|---|
| 3827 | /* 1010 -> Länge der IBAN ist falsch: Zu viele Stellen */
|
|---|
| 3828 | /* 1020 -> Länge der IBAN ist falsch: Zu wenige Stellen */
|
|---|
| 3829 | /* 1030 -> IBAN entspricht nicht dem für das Land festgelegten Format */
|
|---|
| 3830 | /* 1040 -> Prüfsumme der IBAN ist nicht korrekt -> Tippfehler */
|
|---|
| 3831 | /* 1050 -> BIC ist ungültig */
|
|---|
| 3832 | /* 1060 -> Länge des BIC ist falsch: Zu viele Stellen */
|
|---|
| 3833 | /* 1070 -> Länge des BIC ist falsch: Zu wenige Stellen */
|
|---|
| 3834 | /* 1080 -> Länge des BIC ist ungültig */
|
|---|
| 3835 |
|
|---|
| 3836 | /* 2001 -> Deutsche Kontonummer & deutsche BLZ passen nicht */
|
|---|
| 3837 | /* 2002 -> Für diese Kontonummer kein deutsches Prüfziffernverfahren definiert */
|
|---|
| 3838 | /* Da die IBAN-Prüfung klappte, ist die Nr. wahrscheinlich trotzdem okay */
|
|---|
| 3839 | /* 2003 -> Dieses Deutsche Prüfziffernverfahren ist noch nicht implementiert */
|
|---|
| 3840 | /* Da die IBAN-Prüfung klappte, ist die Nr. wahrscheinlich trotzdem okay */
|
|---|
| 3841 | /* 2004 -> Diese Kontonummer ist mit deutschen Methoden im Detail nicht prüfbar */
|
|---|
| 3842 | /* Da die IBAN-Prüfung klappte, ist die Nr. wahrscheinlich trotzdem okay */
|
|---|
| 3843 | /* 2005 -> Deutsche BLZ nicht gefunden */
|
|---|
| 3844 | /* 2008 -> Keine deutsche BLZ übergeben */
|
|---|
| 3845 | /* 2009 -> Keine deutsche Kontonummer übergeben */
|
|---|
| 3846 | /* 2010 -> Kein Kontoinhaber übergeben */
|
|---|
| 3847 | /* 2020 -> BIC ist ungültig */
|
|---|
| 3848 | /* 2128 -> interner Fehler, der zeigt, dass eine Methode nicht implementiert ist */
|
|---|
| 3849 | /* */
|
|---|
| 3850 |
|
|---|
| 3851 |
|
|---|
| 3852 | if (defined('BANKACCOUNT_CHECK_TEXT_BANK_ERROR_'.(int)$error_code)) {
|
|---|
| 3853 | $result = constant('BANKACCOUNT_CHECK_TEXT_BANK_ERROR_'.(int)$error_code);
|
|---|
| 3854 | } else {
|
|---|
| 3855 | $result = BANKACCOUNT_CHECK_TEXT_BANK_ERROR_UNKNOWN;
|
|---|
| 3856 | }
|
|---|
| 3857 |
|
|---|
| 3858 | return $result;
|
|---|
| 3859 |
|
|---|
| 3860 | }
|
|---|
| 3861 |
|
|---|
| 3862 | function get_store_ctryiso2() {
|
|---|
| 3863 |
|
|---|
| 3864 | $country_query = xtc_db_query("select countries_iso_code_2 from ".TABLE_COUNTRIES." where countries_id = '".(int)STORE_COUNTRY."'");
|
|---|
| 3865 | $country = xtc_db_fetch_array($country_query);
|
|---|
| 3866 |
|
|---|
| 3867 | return $country['countries_iso_code_2'];
|
|---|
| 3868 |
|
|---|
| 3869 | }
|
|---|
| 3870 |
|
|---|
| 3871 |
|
|---|
| 3872 | } /* End Class IbanAccountCheck */
|
|---|
| 3873 |
|
|---|