BAV (bank account validator) is a validation library for German bank accounts. Its based among other things on https://www.bundesbank.de/Redaktion/DE/Downloads/Aufgaben/Unbarer_Zahlungsverkehr/pruefzifferberechnungsmethoden.pdf?__blob=publicationFile
Use Composer:
{
"require": {
"malkusch/bav": "^1"
}
}
You can use BAV out of the box. BAV comes with a ready to play default
configuration (DefaultConfiguration
):
-
UTF-8
encoding (if supported) -
FileDataBackendContainer
. I.e. it uses binary search on the file from the Bundesbank. Note that this data backend uses the directorybav/data
for install and update operations. You have to make sure that this directory is writable. -
automatic installation. You don't have to call any installation script. The container will download the Bundesbank file upon the first execution.
-
update plan which triggers an E_USER_NOTICE if the Bundesbank file is outdated.
You can define your own configuration by calling
ConfigurationRegistry::setConfiguration()
or preferably creating the file bav/configuration.php
which returns a
Configuration
object:
namespace malkusch\bav;
$configuration = new DefaultConfiguration();
$pdo = new \PDO("mysql:host=localhost;dbname=test;charset=UTF8");
$configuration->setDataBackendContainer(new PDODataBackendContainer($pdo));
$configuration->setUpdatePlan(new AutomaticUpdatePlan());
return $configuration;
The Bundesbank releases new files for March, June, September and December. BAV needs those new files. You have several possiblities to update bav:
Call bin/bav-update.php
.
use malkusch\bav\BAV;
$bav = new BAV();
$bav->update();
Enable automatic updates with
AutomaticUpdatePlan
in your bav/configuration.php
:
namespace malkusch\bav;
$configuration = new DefaultConfiguration();
$configuration->setUpdatePlan(new AutomaticUpdatePlan());
return $configuration;
This automatic update plan will perform long running update operations as a shutdown hook. I.e. it won't bother users during normal operations.
You can use BAV with the api facade
BAV
:
-
BAV::isValidBank($bankID)
: Returns true for existing bank ids. -
BAV::isValidBankAccount($bankID, $account)
: Returns true for existing accounts of an existing bank. -
BAV::isValidAccount($account)
: This method validates an account against the bank of the lastisValidBank()
call. -
BAV::getValidBankFilterCallback()
: Returns a callback for filter bank validation. -
BAV::getValidAccountFilterCallback()
: Returns a callback for filter account validation. The account filter needs to be called after the bank filter. -
BAV::getMainAgency()
: Returns the main agency of a bank. -
BAV::getAgencies()
: Returns further agencies. The main agency is not included in this list. This list can be empty.
An Agency
object has the fields:
use malkusch\bav\BAV;
$bav = new BAV();
$bankID = "10000000";
$account = "1234567890"
// check for a bank
var_dump(
$bav->isValidBank($bankID)
);
// check for a bank account
var_dump(
$bav->isValidBankAccount($bankID, $account)
);
// filter validation
var_dump(
filter_var($bankID, FILTER_CALLBACK, $bav->getValidBankFilterCallback()),
filter_var($account, FILTER_CALLBACK, $bav->getValidAccountFilterCallback())
);
// Get informations about a bank
$agency = $bav->getMainAgency($bankID);
echo "{$agency->getName()} {$agency->getCity()}\n";
See also bav/docs/example.php
.
You may have:
-
CURL: If you provide
bav/data/banklist.txt
you don't need CURL. -
mbstring: BAV works with unicode encoding. Your PHP must have support compiled in the
mb_*
functions. If these functions are missing BAV works only with the ISO-8859-15 encoding. -
PDO: If you intend to use a DBS you need to use
PDODataBackendContainer
.PDODataBackendContainer
needs aPDO
support compiled in PHP. -
doctrine/orm: You can use
DoctrineBackendContainer
which uses doctrine as data backend.
This project is free and under the WTFPL. So do what ever you want. But it would be nice to leave a note about the authors.
The author of the original project which gave the idea to this project is Björn Wilmsmann. Responsable for this project is Markus Malkusch [email protected].
If you like BAV and feel generous donate a few Bitcoins here: 1335STSwu9hST4vcMRppEPgENMHD2r1REK