BAV provides validation for German Bank Accounts (Konto)

1.2.0 2015-07-05 21:18 UTC

This package is not auto-updated.

Last update: 2024-05-11 13:31:18 UTC


BAV (bank account validator) is a validation library for German bank accounts.


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 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;


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();


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:

An Agency object has the fields:


use malkusch\bav\BAV;

$bav = new BAV();
$bankID  = "10000000";
$account = "1234567890"

// check for a bank

// check for a bank account
    $bav->isValidBankAccount($bankID, $account)

// filter validation
    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


If you like BAV and feel generous donate a few Bitcoins here: 1335STSwu9hST4vcMRppEPgENMHD2r1REK

Build Status