“Ba-Ba-Banküberfall … Ba-Ba-Banküberfall … Ba-Ba-Banküberfall …
Erste Allgemeine Verunsicherung
Das Böse ist immer und überall!”
Die bank-account-validator Bibliothek validiert bislang BIC und IBAN Angaben auf syntaktische Korrektheit. Bei deutschen BIC und IBAN werden die Angaben zusätzlich gegen eine Bankenliste der Deutschen Bundesbank geprüft. Damit wird zwar nicht die Existenz der Bankverbindung bewiesen, aber die Korrektheit der Bankangaben innerhalb des BIC und der IBAN.
Erfreulicherweise bietet die Österreichische Nationalbank eine Liste von Banken in Österreich an. Damit kann auch die Validierung von österreichischen Bankangaben verbessert werden. Bislang wird der EASYATW1
als valider österreichische BIC akzeptiert. Dies soll nun verhindert werden.
Die Österreichische Nationalbank stellt eine tagesaktuelle Liste der Banken in Form einer CSV-Datei bereit. Die ersten beiden Zeilen der Datei vom 22. September 2023 zeigt die Spaltenüberschriften in der ersten Zeile und die Angaben zur Raiffeisenbank Matrei am Brenner und Umgebung eGen.
Kennzeichen;Identnummer;Bankleitzahl;Institutsart;Sektor;Firmenbuchnummer;Bankenname;Straße;PLZ;Ort;Postadresse / Straße;Postadresse / PLZ;Postadresse / Ort;Postfach;Bundesland;Telefon;Fax;E-Mail;SWIFT-Code;Homepage;Gründungsdatum;LEI Hauptanstalt;263451;36273;KI;Raiffeisen;39856m;Raiffeisenbank Matrei am Brenner und Umgebung eGen;Raiffeisenplatz 43a;6143;Matrei am Brenner;;;;;Tirol;05273/6111;05999/3688872090;info@raibamatrei.at;RZTIAT22273;www.raibamatrei.at;02.05.1897;529900NPXLPY9ZGPM933
Interessant für die Validierung sind nur die Spalten 2 (Bankleitzahl), 6 (Bankname) und 18 (SWIFT-Code).
Die BankService
Implementierung für Österreich wird mit @CountryCode("AT")
annotiert und in der convert
Methode wird aus jeder Zeile der CSV-Datei eine Bank
Instanz erzeugt.
@CountryCode("AT") public class AustriaBankServiceImpl extends BankService { public static final String FILE_NAME = "sepa-zv-vz_gesamt-2023-09-22.csv"; private final Map<String, List<Bank>> byBankIdentifierCode; private final Map<String, Bank> byBankCode; public AustriaBankServiceImpl() { List<Bank> banks = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(FILE_NAME), StandardCharsets.UTF_8)) .lines().skip(1L).map(AustriaBankServiceImpl::convert).toList(); byBankCode = banks.stream().collect(Collectors.toMap(Bank::getBankCode, b -> b, (a, b) -> a)); byBankIdentifierCode = banks.stream().collect(Collectors.groupingBy(Bank::getBankIdentifierCode)); } private static Bank convert(String x) { String[] parts = x.split(";"); return new Bank(parts[6], parts[2], parts[18]); } @Override public List<Bank> byBankIdentifierCode(String bankIdentifierCode) { return byBankIdentifierCode.getOrDefault(bankIdentifierCode.length() == 8 ? bankIdentifierCode + "XXX" : bankIdentifierCode, List.of()); } @Override public Bank byBankCode(String bankCode) { return byBankCode.get(bankCode); } @Override public Bank byBasicBankAcountNumber(String basicBankAccountNumber) { return byBankCode(basicBankAccountNumber.substring(0, 5)); } }
Damit die AustriaBankServiceImpl Klasse verwendet wird, muss sie außerdem in der Datei META-INF/services/de.schegge.bank.BankService
aufgeführt werden.
Mit diesen Änderungen ist die Bibliothek nun in der Lage auch österreichische BIC und IBAN besser zu validieren. Im lenient-Mode werden weiterhin die BICs EASYATW1
und RLNWATWW
als valide erkannt, ansonsten wird der BIC EASYATW1
abgelehnt.
Wer es selbst ausprobieren möchte, findet die aktuelle Bibliothek auf Maven Central.
<dependency> <groupId>de.schegge</groupId> <artifactId>bank-account-validator</artifactId> <version>0.3.1</version> </dependency>