96 lines
2.6 KiB
PHP
96 lines
2.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Informatica Eindproject D4p
|
|
* 6in3, Stedelijk Gymnasium Nijmegen
|
|
* Docent: Hans de Wolf
|
|
*
|
|
* ==================
|
|
*
|
|
* Daniel Boutros,
|
|
* Christiaan Goossens,
|
|
* Jelmer Hinssen
|
|
*/
|
|
|
|
namespace Inforbank\Application\Helper;
|
|
|
|
class IBAN
|
|
{
|
|
private static function wordToNumbers($word)
|
|
{
|
|
$newword = "";
|
|
$wordarray = str_split($word);
|
|
foreach ($wordarray as $v) {
|
|
if (ctype_alpha($v)) {
|
|
$newword .= ord(strtolower($v)) - 87;
|
|
} else {
|
|
$newword .= $v;
|
|
}
|
|
}
|
|
return $newword;
|
|
}
|
|
|
|
private static function getCheckDigits($bignum)
|
|
{
|
|
//Modulo staartdeling
|
|
$modulo97 = (int)substr($bignum, 0, 6);
|
|
$modulo97 = $modulo97 % 97;
|
|
$modulo97 = (1000000 * $modulo97) + (int)substr($bignum, 6, 6);
|
|
$modulo97 = $modulo97 % 97;
|
|
$modulo97 = (1000000 * $modulo97) + (int)substr($bignum, 12, 6);
|
|
$modulo97 = $modulo97 % 97;
|
|
$modulo97 = (1000000 * $modulo97) + (int)substr($bignum, 18, 6);
|
|
$modulo97 = $modulo97 % 97;
|
|
$checkdigits = 98 - $modulo97;
|
|
if (strlen($checkdigits) < 2) {
|
|
$checkdigits = '0' . $checkdigits;
|
|
}
|
|
return $checkdigits;
|
|
}
|
|
|
|
public static function isValidIBAN($iban)
|
|
{
|
|
$iban = str_replace(" ", "", $iban);
|
|
$landcode = substr($iban, 0, 2);
|
|
$controle = substr($iban, 2, 2);
|
|
$identificatie = substr($iban, 4);
|
|
$identificatie .= $landcode;
|
|
$identificatie .= "00";
|
|
$nummer = self::wordToNumbers($identificatie);
|
|
return $controle == self::getCheckDigits($nummer);
|
|
}
|
|
|
|
public static function getRekeningNummer($iban)
|
|
{
|
|
return substr(str_replace(" ", "", $iban), 8);
|
|
}
|
|
|
|
public static function getBank($iban)
|
|
{
|
|
return substr(str_replace(" ", "", $iban), 4, 4);
|
|
}
|
|
|
|
public static function getLand($iban)
|
|
{
|
|
return substr(str_replace(" ", "", $iban), 0, 2);
|
|
}
|
|
|
|
public static function getIBAN($rekeningnr)
|
|
{
|
|
$landcode = "NL"; // NL in vertaling
|
|
$landnumber = self::wordToNumbers($landcode);
|
|
|
|
|
|
$bankcode = "INFO";
|
|
$banknumber = self::wordToNumbers($bankcode);
|
|
|
|
$rekeningnr = str_pad($rekeningnr, 10, 0, STR_PAD_LEFT);
|
|
|
|
$bignum = $banknumber . $rekeningnr . $landnumber . "00";
|
|
$checkdigits = self::getCheckDigits($bignum);
|
|
|
|
$rekeningnrarr = str_split($rekeningnr, 4);
|
|
return $landcode.$checkdigits." ".$bankcode." ".$rekeningnrarr[0]." ".$rekeningnrarr[1]." ".$rekeningnrarr[2];
|
|
}
|
|
}
|