/bav

BAV is a German Bank Account (Konto) Validator written in PHP.

Primary LanguagePHPDo What The F*ck You Want To Public LicenseWTFPL

About BAV

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 directory bav/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:

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 a PDO 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

Build Status