malkusch / bav
BAV provides validation for German Bank Accounts (Konto)
Installs: 16 007
Dependents: 3
Suggesters: 1
Security: 0
Stars: 5
Watchers: 4
Forks: 8
Open Issues: 5
Requires
- php: >=5.4
- malkusch/php-index: ~0.1
Requires (Dev)
- doctrine/orm: ^2
- phpunit/phpunit: >=4
Suggests
- ext-PDO: Allows storing bank information in a database
- ext-dom: Enables picking the download URI by xpath
- ext-mbstring: Enables UTF-8 support
- lib-curl: Enables API for downloading the bank file
- doctrine/orm: Support for Doctrine ORM data backend
README
BAV (bank account validator) is a validation library for German bank accounts.
Installation
Use Composer:
{ "require": { "malkusch/bav": "^1" } }
Configuration
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;
Update
The Bundesbank releases new files for March, June, September and December. BAV needs those new files. You have several possiblities to update bav:
Script
Call bin/bav-update.php
.
Programmatically
use malkusch\bav\BAV; $bav = new BAV(); $bav->update();
Automatic
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.
Usage
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:
Example
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
.
Optional Dependencies
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.
License and authors
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 markus@malkusch.de.
Donations
If you like BAV and feel generous donate a few Bitcoins here: 1335STSwu9hST4vcMRppEPgENMHD2r1REK