03.03.21 (noch) Version 6.13
Docker-Image, .NET Core, PHP 8
- Hauke Preuß hat ein Docker-Image und ein REST-Beispiel sowie die Anbindung an .NET Core beigesteuert; es läuft nativ unter Windowws, das Docker-Image läßt sich natürlich auch auf anderen Plattformen kompilieren. Die Dateien finden sich unter https://github.com/hihain/KontoCheckRestApi.
- Für PHP gibt es einen kleinen Patch, so daß konto_check sich auch unter PHP 8 kompilieren läßt
- Die Datendatei blz.lut2f wurde wieder aktualisiert; die Datei enthält die Daten für den Zeitraum vom 07.12.2020 bis 06.06.2021
08.12.19 Version 6.11
Anpassung der Perl-Tests, Option -gs in main.c hinzugefügt
- Korrektur in den Testdateien für Perl
- main.c: Option -gs hinzugefügt (SCL-Blocks zur LUT-Datei hinzufügen)
15.08.19 Version 6.10
Anpassung der Perl-Tests, neue Funktion lut_valid_date
- Korrektur in den Testdateien für Perl
- neue Funktion lut_valid_date(), um die Gültigkeitsdaten einer LUT-Datei zu bestimmen (nur in C und PHP)
- Patchfile für gawk 5.0.1 hinzugefügt
13.05.19 Version 6.09
Update für blz.lut, daher wurden Korrekturen in den Testdateien für Perl notwendig. Die Prüfziffermethoden und IBAN-Regeln sind unverändert, daher gibt es auch kein neues Paket für die anderen Ports (außer Perl).
19.03.19 Version 6.08
Update für blz.lut, kleine Korrekturen:
- Update für blz.lut2f: SCL-Daten vom 18.3.19
- Korrektur in den Prüfziffermethoden C0 und E1: falls beim ersten Test die Prüfziffer 10 ist, wurde "ungültiges Konto" zurückgegeben, statt den Test mit C0b bzw. E1b weiterzuführen.
- IBAN-Regel 56: Code etwas aufgeräumt
- einige Typecasts in den scl_*() Funktionen hinzugefügt
04.12.18 Version 6.07
Update für blz.lut, Korrektur in den Testdateien für Perl; alles andere ist unverändert
29.11.18 Version 6.06
SCL-Funktionen nun auch in Perl, kleine Änderungen
- die IBAN-Regel 56 entfällt ab Dezember 2018
- keine Änderung in den PZ-Methoden
- SCL-Funktionen auch in Perl
- Testdateien für perl aktualisiert
02.09.18 Version 6.05
Die Versionsnummer ist jetzt 6.05, da Perl einige Zwischenversionen erforderte.
- einige Funktionen für das SCL-Verzeichnis wurden hinzugefügt (noch nicht dokumentiert, zunächst nur in C und PHP)
- die IBAN-Regel 48 entfällt ab September 2018
- Änderungen in der IBAN-Regel 56
- kleinere Korrekturen
- Testdateien für perl aktualisiert
02.04.18 Version 6.04
Testdateien für perl aktualisiert, konto_check-at aus Perl entfernt
- einige Testdateien für perl aktualisiert
- das konto_check-at Modul wurde aus der Perl-Version entfernt, da PSA den INPAR-Dienst im zweiten Halbjahr 2018 auslaufen läßt.
13.12.17 Version 6.03
Testdateien für perl aktualisiert
1.12.2017 - Version 6.02 von konto_check
Kleine Änderungen und Bugfixes
- Änderung der IBAN-Regel 56 ab Dezember 2017
- AWK-Port für gawk 4.2.0
- Ausgabe der konto_check Version bei gawk
- einige kleinere Berichtigungen und bug fixes
31.8.2017 - Version 6.01 von konto_check
Wieder einmal eine Version mit nur kleinen Änderungen:
- neues Prüfzifferverfahren C2c
- die IBAN-Regel 45 entfällt ab September 2017 (bleibt frei)
- Änderung der IBAN-Regel 56 ab September 2017
13.6.2017 - Version 6.00 von konto_check
Die Versionsnummer wurde auf 6.00 erhöht, da der CPAN Indexer die Versionen 5.10 und 5.11 nicht indizieren wollte, da bereits eine höhere Version (5.9) existiere...
Ansonsten gibt es keinen Grund für den Versionssprung. Die Änderungen sind nicht sehr umfangreich:
- neues Prüfzifferverfahren B1c
- neues Prüfzifferverfahren E4
- die IBAN-Regel 54 entfällt ab Juni 2017 (bleibt frei)
10.3.2017 - Version 5.10 von konto_check
Wieder einmal eine Version mit nur kleinen Änderungen:
- neues Prüfzifferverfahren E3
- kleine Korrektur im Ruby-Port
- Anpassung der Testdateien für Perl
Momentan macht die Funktion lut_multiple() unter PHP leider noch einige Probleme.
13.11.2016 - Version 5.9 von konto_check
Dies ist wieder eine Version mit kleineren Anpassungen:
- neues Prüfzifferverfahren 74b
- in der IBAN-Regel 42 werden eine Reihe 10-stellige Konten akzeptiert
- für die gawk-Version 4.1.4 gibt es ein Patchfile
- die Perl-Version wurde komplett auf UTF-8 umgestellt, sowie das encoding pragma entfernt; die Tests laufen jetzt auch bei neueren Perl-Versionen wieder durch
22.8.2015 - Version 5.8 von konto_check
Diese Version enthält wieder nur einige kleinere Änderungen
- neues Prüfzifferverfahren 87d
- es gibt jetzt ein Patchfile für gawk 4.1.3
- Änderungen in konto_check_mini:
- die Ausgabe kann als JSON-String formatiert werden (Schalter -j und -J)
- bessere Erkennung von IBANs und IPIs: dazu werden die ersten Stellen
des übergebenen Strings analysiert, nicht mehr nur die Länge. Z.B. liefert
das folgende Kommando (anders als die Vorversion) die richtigen Ergebnisse:
./konto_check_mini SI56191000000123438 AT611904300234573201 AZ21NABZ00000000137010001944 \ BE68539007547034 BA391290079401028494 HU42117730161111101800000000 DE89370400440532013000 \ 0900000000DE07550905 54000000000ADSF00345 380000000001234578DW FR1420041010050500013M02606 \ DO28BAGR00000001212453611324 BG80BNBG96611020345678 54000000000ADSF0099876
- Änderungen in iban_gen:
- auch in diesem Programm kann die Ausgabe als JSON-String formatiert werden (Schalter -j und -J)
- für die Eingabe können auch IBANs benutzt werden. Die Umschaltung kann global (mit dem Schalter -I) oder innerhalb der Eingabedatei mittels @@i (IBAN Verarbeitung) oder @@b (BLZ/Konto Verarbeitung, jeweils auf einer eigenen Zeile) erfolgen.
26.6.2015 - Version 5.7 von konto_check
Dies ist eine reine Bugfix-Version für die Prüfziffermethode 90; bei dieser Methode wurde die Untermethode 90g durch eine irrtümlich nicht entfernte Bedingung nicht mehr getestet, so daß Konten die unter diese Methode fielen, als falsch ausgegeben wurden.
13.5.2015 - Neuer Server für den Online-Test, JSON-Version
Die Online-Tests sind wieder auf einem neuen (eigenen) Server umgezogen.
Außerdem gibt es jetzt auch eine JSON Online-Version von konto_check. Das Ergebnis der Prüfung bzw. die angeforderten Informationen wird als JSON kodierter String zurückgeliefert. Dies ist für manche Anwendungen einfacher zu implementieren als eine PHP-Abfrage, da das Ergebnis direkt verwendbar ist.
Es ist noch die erste Version und daher wahrscheinlich nicht fehlerfrei; auch für das Interface sind evl. noch Wünsche offen. Anregungen und Kritik (positiv oder negativ) können Sie gern per Email schreiben.
13.5.2015 - Version 5.6 von konto_check
Diese Version enthält vor allem eine Reihe Änderungen an verschiedenen Prüfziffermethoden:
- neues Prüfzifferverfahren E2
- Prüfzifferverfahren 08: Die Konten unter 60 000 werden jetzt als richtig (ohne
Prüfzifferberechnung) ausgegeben. Die Beschreibung in der PDF-Datei der Bundesbank sagt
nichts darüber aus, wie mit Kontonummern
unter 60 000 umzugehen ist. Ich bekam jetzt zwei Emails, bei denen reale Konten in diesem
Bereich existieren; ein kleiner Test mit verschiedenen "Konkurrenzprodukten"
ergibt folgendes Bild:
- ckonto.de: ok
- ktoblzcheck: ok
- kontonummern.de: ok, ohne Prüfzifferberechnung
- iban-rechner.de: ok, ohne Prüfzifferberechnung
- VR-IBAN-Konverter: ok
- SEPA-Account-Konverter (Sparkasse): ok
- BAV: falsch
- bankleitzahlen.de: Prüffehler.
- bankdatencheck.de: nicht gültig
BAV und konto_check hatten Markus Malkusch und ich vor einiger Zeit zum wechselseitigen Vergleichstest benutzt; daher ist die Übereinstimmung nicht bedeutsam (wir haben den Text der PDF-Datei nur gleich interpretiert). Markus hat nach einer kurzen Rückfrage den BAV umgestellt, so daß jetzt auch BAV diese Konten ohne Prüfung als richtig ansieht.
- bei den Prüfziffermethoden 28 und 34 wird nicht mehr auf fehlende Unterkonten geprüft (in der PDF-Datei findet sich nichts dazu, und andere Konverter scheinen sie auch nicht zu ergänzen)
- Prüfziffermethode 44: es wird ein Sonderfall aus der IBAN-Regel 49 berücksichtigt.
In der IBAN-Regel heißt es:
Für Kontonummern mit einer "9" an der 5. Stelle muss die Kontonummer, auf deren Basis die IBAN ermittelt wird, abweichend berechnet werden. Die ersten 4 Stellen (inkl. aufgefüllter Nullen) müssen ans Ende gestellt werden, so dass die Kontonummer dann immer mit der "9" anfängt.
Beispiel:
Kontonummer alt: 0001991182 Kontonummer für die Berechnung der IBAN: 9911820001 Diese neu ermittelte Kontonummer hat keine Prüfziffer, die daher auch nicht geprüft werden darf. Ansonsten kann mit dieser Kontonummer die IBAN mit der Standard-IBAN-Regel ermittelt werden.
Das Verhalten mit der führenden "9" ist nicht in der IBAN-Regel angegeben, wurde aber aufgrund realer Kontodaten gefunden und durch eine Nachfrage bei der Bank bestätigt (vielen Dank an Stefan Banse für den Hinweis).
- der Compiler-Switch USE_IBAN_RULES wurde entfernt; die Verwendung der IBAN-Regeln wird jetzt immer vorausgesetzt. In dem Zusammenhang entfällt auch die Funktion static int kto_check_blz_x().
- bei der IBAN-Regel 0 wird nicht mehr auf weggelassene Unterkonten geprüft (das war eine Krücke aus der Zeit, als die IBAN-Regeln noch nicht so verbreitet waren; mittlerweile sind sie für IBAN-Rechnungen jedoch obligatorisch, und damit entfällt auch die Notwendigkeit dafür).
- in der Funktion iban2bic() wurde die Bundesbank nicht richtig behandelt (bei Konten der Bundesbank wurde ein Fehler zurückgegeben); dies ist jetzt gefixt.
- PHP: bei lut_suche_volltext werden (optional) die gefundenen Suchbegriffe zurückgegeben
- einige kleinere Änderungen und Korrekturen
13.10.2014 - Kleine Änderung in konto_check-at
Bei der österreichischen Kontenprüfung wurde die Gewichtungstabelle um einen neuen Parameter "H" erweitert. Diese Änderung (und noch einige kleinere Bugfixes in den Prüfparametern) wurden in konto_check-at eingepflegt; die neue Version findet sich auf der Sourceforge-Webseite.
15.9.2014 - Ergänzung für den awk-Port
Für den awk-Port gibt es jetzt eine zusätzliche Funktion kc_retval(), mit der man den Statuscode der letzten Funktion ermitteln kann. Diese Funktion ist besonders praktisch bei den IBAN-Routinen und einigen anderen Funktionen, bei denen der Rückgabewert ein String ist und der Statuscode in awk daher nicht ermittelt werden konnte. Die Funktion wird in dem Skript mini_iban.awk benutzt.
Sie ist nur in dem neuen Patchfile konto_check.gawk-4.1.1.diff enthalten; in die älteren Patches wurde sie nicht integriert.
1.9.2014 - Version 5.5 von konto_check
Im September 2014 gab es keine Änderungen oder Ergänzungen bei den Prüfzifferverfahren (nur eine redaktionelle Korrektur beim Verfahren 90), und es wurden auch keine neuen IBAN-Regeln definiert. Diese Version enthält außer der neuen LUT-Datei nur kleinere Änderungen:
- Fehlerkorrektur in den Funktionen bic_check() und ci_check() (fehlende Stringterminierung)
- die Funktionen rebuild_blzfile() pz_aenderungen_enable() sind in allen Ports verfügbar
- für die Funktionen die einen String zurückgeben, gibt es jetzt auch eine *_id() Variante. Diese geben statt eines Strings ein Handle zurück, das mittels kc_id2ptr() in einen String umgewandelt werden kann. Die Funktionen sind vor allem für die Windows-DLL gedacht, bei der Strings oft eine Sonderbehandlung brauchen. So muß man nur eine Funktion (kc_id2ptr()) in der jeweiligen Umgebung lauffähig machen :-)
- einige kleinere Bugfixes und Schönheitskorrekturen
2.6.2014 - Version 5.4 von konto_check
Diese Version enthält vor allem einige Bugfixes und Ergänzugen zur Version 5.3, sowie eine erste Version des Java-Ports von konto_check. Es sind keine wesentlichen neuen Features implementiert.
- PZ-Methode 90g implementiert (bei der Sparda-Bank Südwest wird es damit langsam schwierig, falsche Kontonummern zu erzeugen :-)
- die Funktion rebuild_blzfile() berücksichtigt jetzt auch die IBAN-Regeln; so ist
es möglich, mit dem Befehl
./konto_check -r blz.lut2f blz.rebuild
einen Datensatz der LUT-Datei in eine BLZ-Datei umzuwandeln. Diese Datei stimmt bis auf die vier Testkonten (13051172, 16052072, 80053772 und 80053782) und evl. die Reihenfolge bei einzelnen Banken mit der Datei der Deutschen Bundesbank überein. Der letzte Parameter (1 oder 2) gibt die Nummer des zu verwendenden Datensatzes an. Die Funktion ist aktuell nur in der C-Datei enthalten, wird in der nächsten Version jedoch auch in die anderen Ports gebracht.
- für gawk gibt es ein Patchfile für die Version 4.1.1; dieses wurde direkt von der gawk-Version 4.1.0 übernommen
- Es gibt eine erste Version für Java; diese bereitet allerdings manchmal etwas Kopfzerbrechen, siehe die Datei 00liesmich.txt im Verzeichnis java/. Momentan wird für java deshalb nur der Quellcode mitgeliefert. Zum Kompilieren ist noch swig (www.swig.org) sowie ein C-Compiler erforderlich. Ein makefile ist ebenfalls enthalten.
- Die Funktionen kto_check_retval2*() wurden in eine eigene Datei retvals.h ausgelagert; die anderen Quellcodedateien können bei Bedarf problemlos nach UTF-8 umkodiert werden.
- Die neuen Funktionen bic_*(), biq_*() und iban_*() sind jetzt in allen Ports (außer awk) enthalten; außerdem wurden noch einige Bugs in den Funktionen gefixt.
- Fehler in RETURN_OK für die IBAN-Regeln korriegiert (falls eine Bank durch die Nachfolge-BLZ ersetzt wurde, wurde der Wert OK_BLZ_KTO_REPLACED statt OK_BLZ_REPLACED zurückgegeben
3.3.2014 - Version 5.3 von konto_check
In Version 5.3 gibt es eine Reihe neuer Funktionen rund um IBAN und BIC, die neue IBAN-Regeln 57, sowie eine Reihe kleinerer Änderungen. Die neuen Funktionen sind aktuell nur im C- und PHP-Port enthalten; bei der nächsten Version kommen sie auch in die anderen Ports.
- Es ist eine Suche nach den BICs der Hauptstellen implementiert
- In der LUT-Datei gibt es einen neuen Indexblock über die BICs der Hauptstellen
- Die Daten der Bundesbank-Datei die mit den Funktionen lut_name(), lut_ort()... abgefragt werden, können jetzt auch für BICS und IBANs abgefragt werden (s.u.)
- Viele Vergleiche in den IBAN- und BIC-Funktionen die mit strcmp gemacht wurden, wurden auf strcasecmp() umgestellt, so daß die Groß/Kleinschreibung bei IBANs und BICs komplett ignoriert wird.
- Änderung in der Pruefzifferberechnungsmethode 66 implementiert
- neue IBAN-Regel 57 implementiert
- Änderung in den IBAN-Regeln 54 und 56
- Klarstellung in IBAN-Regel 42 (Deutsche Bundesbank)
- Die Funktion pz2str() enthält nur noch die wirklich definierten Prüfziffermethoden, dafür jedoch auch die Untermethoden
- Die Ruby-Dokumentation wird jetzt über yardoc generiert
- kleinere Änderungen im Ruby-Port
- Fehler in mini1.vb behoben
- verschiedene kleinere Bugs behoben
- neue Funktionen (diese sind momentan erst im C- und PHP-Port
implementiert, in den anderen Sprachen kommen sie spätestens in der nächsten Version):
- lut_suche_bic_h(): Die Funktion entspricht weitgehend der Funktion lut_suche_bic(); für die Nebenstellen wird bei dieser Funktion allerdings der BIC der Hauptstelle benutzt.
- lut_bic_h(char*,int,int*) und lut_bic_hi(int,int,int*): Diese Funktionen geben den BIC der jeweiligen Hauptstelle zurück
- lut_blz_i(int,int): eine vergessene Funktion, analog zu lut_blz() mit Integerparameter für die BLZ
- bic_info(char*,int,int*,int*): Diese Funktion sucht Banken mit einem bestimmten BIC und gibt die gefundene Anzahl sowie den Startindex in den internen Arrays zurück. Sie ist für die Funktionsgruppe biq_* (s.u.) gedacht, falls Werte für mehrere Filialen einer Bank bestimmt werden sollen.
- bic_aenderung(char*,int,int,int*), bic_loeschung(), bic_iban_regel(), bic_nachfolge_blz(), bic_nr(), bic_pan(), bic_plz(), bic_pz(), bic_bic(), bic_bic_h(), bic_name(), bic_name_kurz(), bic_ort(): Die Funktionen dieser Gruppe entsprechen den Funktionen lut_*(), nur daß statt einer BLZ ein BIC angegeben wird.
- biq_aenderung(int,int*), biq_loeschung(), biq_iban_regel(), biq_nachfolge_blz(), biq_nr(), biq_pan(), biq_plz(), biq_pz(), biq_bic(), biq_bic_h(), biq_name(), biq_name_kurz(), biq_ort() (das q steht für quick): diese Funktionen entsprechen denen der Gruppe bic_*(); statt des BIC wird allerdings ein Index angegeben, der über die Funktion bic_info() bestimmt wird. Der Parameter mode fehlt in dieser Gruppe; er wird auch bei bic_info() spezifiziert.
- iban_aenderung(), iban_loeschung(), iban_iban_regel(), iban_nachfolge_blz(), iban_nr(), iban_pan(), iban_plz(), iban_pz(), iban_bic(), iban_bic_h(), iban_name(), iban_name_kurz(), iban_ort(): nochmal eine Gruppe mit gleicher Funktionalität, nur wird statt eines BIC eine IBAN zur Spezifizierung der Banken benutzt. Bei der Banksuche per BIC ist das Problem, daß oft große Gruppen einen BIC teilen (s. z.B. die Postbank), und die Filialinformation (z.B. Ort o.ä.) komplett verlorengeht. Außerdem sind in der Bundesbankdatei nicht alle Filialcodes enthalten, so daß die bic_*() Funktionen manchmal nur mit dem Modus 0 fündig werden (dabei wird im letzten Schritt der Filialteil durch XXX ersetzt; Beispiel ist wieder die Postbank).
2.1.2014 - Neu: Python-Version von konto_check
Thimo Kraemer hat eine Phyton-Version für konto_check geschrieben; sie kann auch von der offiziellen Python-Webseite heruntergeladen werden. Mittels
easy_install kontocheckkann sie leicht installiert werden.
2.1.2014 - Ruby-Version auf rubygems.org
Die aktuelle Ruby-Version ist jetzt auf rubygems.org verfügbar und kann durch den Befehl
gem install konto_checkinstalliert werden.
13.11.2013 - Version 5.2 von konto_check
In Version 5.2 gibt es die neue Prüfziffermethode E1 (gültig ab Dezember 2013), die neun IBAN-Regeln 55 und 56, sowie eine Reihe kleinerer Änderungen und neue Funktionen:
- neues Prüfzifferverfahren E1, gültig ab Dezember 2013
- IBAN-Regeln 55 und 56 (gültig ab Dezember 2013) implementiert
- einige Änderungen bei IBAN-Regeln 05, 10, 15, 20, 43, 45 eingebaut (meist gültig ab Dezember 2013)
- neuer Rückgabewert FALSE_UNTERKONTO_ATTACHED, falls bei der IBAN-Regel 05 ein Unterkonto angehängt wurde und die Kontoprüfung dadurch "falsch" zurückgibt (das betrifft 6- und 7stellige Konten mit der Prüfziffermethode 13 bei der Commerzbank AG)
- neue Funktion lut_blocks(), die geladene Blocks und Blocks mit Fehlerstatus (bei der Initialisierung) ausgibt
- neue Funktion lut_suche_regel(), die Banken mit einer bestimmten IBAN-Regel sucht
- neue Funktion kto_check_regel() und kto_check_regel_dbg() für Kontentest unter Berücksichtigung der IBAN-Regeln
- Perl: vergessene Funktion iban2bic() nachgeliefert
- Ruby: es gibt die Funktionen bank_suche_* auch in der Bibliothek KontoCheck::, nicht mehr nur in KontoCheckRaw::
- bei der Initialisierung wird die Fehlermeldung LUT2_OK_WITHOUT_IBAN_RULES nicht mehr ausgegeben; stattdessen wird ein Fehlen des Blocks mit den IBAN-Regeln als Fehler klassifiziert und LUT2_PARTIAL_OK zurückgegeben.
- zum Rückgabewert -38 (nicht alle Blocks geladen) gibt es noch zwei Zusatzvarianten: LUT2_NOT_YET_VALID_PARTIAL_OK und LUT2_NO_LONGER_VALID_PARTIAL_OK
- Die Flessa Korrektur kann jetzt entfallen (die entsprechenden Banken haben jetzt das Löschkennzeichen)
- beim Einzeltest auf der Webseite kann man jetzt wählen von welchem Datensatz die Initialisierung stattfinden soll
- verschiedene kleinere Bugs behoben
04.10.2013 - korrigierte LUT-Datei, neue Suchfunktion
Von der Bundesbank kam vor kurzem eine Nachricht, daß durch das Bankhaus Max Flessa irrtuemlich eine Reihe Bankleitzahlen zur Löschung aufgegeben wurden. Dabei handelt es sich um folgende BLZs:
700 301 11
763 301 11
770 301 11
783 301 11
840 301 11
Das Bankhaus Max Flessa bittet alle Anwender, diese Bankleitzahlen, soweit moeglich, manuell wieder in den Datenbestand aufzunehmen.
In der ab 9. Dezember 2013 gueltigen Bankleitzahlendatei werden die Bankleitzahlen wieder enthalten sein.
Für die Sparkasse LeerWittmund (BLZ 28252760) ist in der Bundesbank-Datei die IBAN-Regel 0 eingetragen (Defaultregel); diese Bank ist jedoch die einzige, für die die Regel 50 zutrifft. Der Fehler wurde ebenfalls korrigiert und an die Bank gemeldet.
In der Online-Version gibt es jetzt auch die Möglichkeit, Banken nach IBAN-Regeln zu suchen. Diese Funktion wird in der nächsten Version auch enthalten sein. Die LUT-Datei enthält dafür einen zusätzlichen Index-Block mit der ID 26 bzw. 126; dieser wird von der Version 5.1 von konto_check noch nicht erkannt.
17.09.2013 - konto_check jetzt im Heise Software-Verzeichnis gelistet
konto_check ist jetzt auch im Heise Software Verzeichnis gelistet:
17.09.2013 - Version 5.1 von konto_check
Nach relativ kurzer Zeit gibt es schon wieder eine neue Version von konto_check. Grund dafür sind einige ärgerliche Fehler bei der IBAN-Berechnung, sowie noch ein neues Tool (iban_gen), mit dem sich Batch-Berechnungen von IBA und BIC gut durchführen lassen. Hier die Änderungen im Einzelnen:
- Es gibt ein neues Tool iban_gen, mit dem eine einfache Batch-Konvertierung von BLZ und Kontonummer nach IBAN Und BIC möglich ist. iban_gen enthält neuerdings auch eine Schnittstelle zu den Suchfunktionen von konto_check, so daß eine Suche nach Banken unter vielen Kriterien möglich ist. Eine kurze Beschreibung ist in der Datei iban_gen.readme enthalten.
- Es gibt eine neue Funktion ci_check() zum Test von Gläubiger-Identifikationsnummern (Creditor Identifier, CI). Die Funktion wurde weitgehend von iban_check() kopiert, hat aber einige Besonderheiten.
- Vor einer IBAN-Berechnung wird getestet, ob alle notwendigen LUT-Blocks geladen sind; falls nicht, werden fehlende Daten per inkrementeller Initialisierung nachgeladen (mittels der Funktion iban_init()). In Version 5.0 war dieser Test noch nicht vorhanden. Falls vorher mit z.B. mit dem Initialisierungslevel 3 oder 5 initialisiert wurde, konnte es passieren, daß eine Bank als gelöscht markiert war, dies von den IBAN-Routinen aber nicht erkannt wurde.
- Die IBAN-Regel 20 (Deutsche Bank) wurde aktualisiert auf die Version 1.6 (Bundesbank-Email vom 30.8.2013). Die neue Version dieser Regel wird zum 9. Dezember in den offiziellen IBAN-Regeln veröffentlicht; die Bundesbank hat den Text jedoch schon am 28. August veröffentlicht, mit der Bitte, sie möglichst schon zum 9. September einzusetzen. Der Best Guess Ansatz mit dem Fehlercode 51 (bzw. IBAN_AMBIGUOUS_KTO in konto_check) wird entfernt und durch Verfahren zur Ermittlung eindeutiger IBANs ersetzt.
- Bei der Funktion iban2bic() werden nun die IBAN-Regeln berücksichtigt. Dies ist wichtig falls in einer Regel z.B. spezifiziert wird, daß bestimmte Kontenkreise ohne Prüfzifferberechnung gültig sind o.ä. Falls in einer IBAN-Regel vorgegeben wird, daß kein Test der Bankverbindung erfolgen soll, wird das in iban_check() und iban2bic() jetzt auch berücksichtigt
- in bestimmten Fehlerfällen (Konto ungültig) lieferte iban_bic_gen() keinen BIC; das ist jetzt behoben
- Unterkonten können nur noch hinzugefügt werden, falls die beiden ersten Stellen der Kontonummer auch "00" sind (das wurde nicht immer geprüft)
- kleine Korrekturen in den Prüfziffermethoden 13b, 63, C7 und der IBAN-Regel 5
- einige kleinere bug fixes und etwas Kosmetik im C-Code
02.08.2013 - Version 5.0 von konto_check
Die Version 5.0 implementiert die Änderungen in den Prüfziffermethoden 57 und 95, die zum 9.9.2013 gültig werden und korrigiert eine Reihe von Schwächen und Bugs bei der Erzeugung von IBANs. Außerdem wurden die IBAN-Regeln aktualisiert (Stand 9.9.2013).
Die Änderungen der Prüfziffermethoden und IBAN-Regeln sind schon im Code enthalten, werden jedoch erst zum Gültigkeitszeitpunkt aktiviert.
Die IBAN-Regeln scheinen nun weitgehend korrekt implementiert zu sein. Vergleichstests mit zwei anderen Programmen (Sepa Account Converter der Sparkassen sowie VR IBAN Konverter der Volks- und Raiffeisenbanken) ergeben zwar Differenzen, aber diese scheinen auf Fehlern in den anderen Programmen bzw. unterschiedliche Behandlung von Fehlern zu beruhen. Es sind noch weitere Tests geplant bzw. in Arbeit.
Die Änderungen im Einzelnen:
- Änderungen der Pruefzifferberechnungsmethoden 57 und 95 (gültig ab 9.9.2013) implementiert. Die Änderungen werden zum Gültigkeitsdatum automatisch aktiviert
- Änderungen der IBAN-Regeln zum 9. September 2013 implementiert:
IBAN-Regeln 05, 12, 13, 20, 21, 31, 33, 35, 40 aktualisiert auf Version 1
IBAN-Regeln 48 - 54 neu implementiert - bei iban_gen() wird unterschieden, ob ein Konto ersetzt wurde (z.B. Spendenkonten), oder ob nur ein Unterkonto angehängt wurde. Der Rückgabewert OK_UNTERKONTO_ATTACHED ist jetzt eine positive Statusmeldung, keine Fehlermeldung mehr.
- neue "schwarze Liste" für IBANs (in der Datei iban.blacklist; nähere Info in der Datei)
- einige kleinere Änderungen in den IBAN-Regeln berücksichtigt, die von der Deutschen Bundesbank per Mail verbreitet wurden (sie werden erst im Dezember in die offizielle Version aufgenommen, die Institute bitten jedoch darum sie schon zu berücksichtigen; betrifft die Regeln 10, 15 und 43).
- Überprüfung beim Test von IBANs (Funktion iban_check()), ob die übergebene IBAN mit der von konto_check erzeugten übereinstimmt, oder ob evl. ein Unterkonto nicht angehängt wurde oder eine IBAN-Regel nicht beachtet wurde. Auf diese Weise werden falsch erzeugte IBANs in den meisten Fällen erkannt.
- Alle Leerzeichen werden vor der Verarbeitung aus der IBAN entfernt (Funktionen iban2bic() sowie iban_check() )
- Ruby: die Funktion version() akzeptiert einen optionalen Integer-Parameter, mit dem verschiedene Infos über die konto_check-Bibliothek erfragt werden können
- Ruby ist jetzt wieder mit im SVN
- Die Funktion iban_gen() in Ruby, PHP und Perl gibt nun auch die benutzte IBAN-Regel zurück
- PHP: einige Standardwerte für PHP-Generierung wurden geändert:
- Beschreibung der Prüfziffermethoden werden defaultmäßig eingebunden
- symbolische Rückgabewerte werden defaultmäßig definiert
- BAV Kompatibilität ist standardmäßig aus und hat noch einen zusätzlichen Schalter in konto_check.h (die Funktionalität wird aktuell nicht benutzt)).
- Außerdem in konto_check.ini:
konto_check.init_default_level=9 (statt 5)
konto_check.lut_path1=. (alt: /etc)
konto_check.lut_path2=/etc (alt: .)
- Info zu IBAN-Regeln in den Info-Teil der LUT-Datei übernommen
- Fehler in IBAN-Regel 5 (Commerzbank) beim Kontenkreis 998000000-999499999 berichtigt
- Fehler in IBAN-Regel 46 berichtigt
- Fehler in Prüfziffermethode C7 berichtigt: 10-stellige Konten sind ungültig Der Fehler trat nur auf, wenn die Untermethoden C7a oder C7b direkt aufgerufen wurden
- Behandlung von Unterkonten in Methode C7 überarbeitet
- in Prüfziffermethode 16 wird beim Divisionsrest 1 und unterschiedlichen Ziffern an der 9. und 10. Stelle der Wert FALSE zurückgegeben (dies ist die Rückgabe des Bank Account Validators (BAV), sowie des SEPA IBAN Konverters der Sparkassen als auch des VR Bank IBAN Konverters.
- Bug fix in lut_bic(); die Funktion lieferte manchmal eine access violation
- Die Funktion lut_bic() liefert für Zweigstellen wieder deren BIC, nicht mehr den der Hauptstelle
- Die comdirect bank behält ihren BIC aus der Bundesbank-Datei
- Das Löschflag "D" aus Feld 11 der Bankleitzahlendatei (Funktion lut_aenderung()) wird berücksichtigt; BLZs mit diesem Flag werden nicht mehr bearbeitet
07.06.2013 - Version 4.6 von konto_check
Die Version 4.6 ist ein größeres Release, bei dem die IBAN-Regeln implementiert wurden sowie einige kleinere Änderungen gemacht wurden:
- IBAN-Regeln implementiert und getestet. Von der Deutschen Bundesbank wurden im April die IBAN-Regeln veröffentlicht, die für eine Reihe Bankleitzahlen eine Sonderbehandlung bei der Bestimmung der IBAN aus BLZ und Kontonummer definieren. Die IBAN-Regeln wurden komplett implementiert und mit dem "Sepa Account Converter" der Sparkassen getestet. Bei Differenzen zwischen den beiden Programmen wurde zur Entscheidung, welches Programm die richtige Ausgabe lieferte, die entsprechende IBAN-Regel bzw. das Prüfzifferverfahren herangezogen.
- Im Online-Formular besteht jetzt die Möglichkeit, IBANs zu generieren (sowohl beim Einzeltest, als auch in separatem Unterpunkt als Liste)
- Änderungen in Prüfziffermethode 51 und 84 (gültig ab 3.6.2013)
- Kommentar zu Prüfziffermethode E0 angepasst (Klarstellung)
- neue Funktion lut_iban_regel() zur Bestimmung der IBAN-Regel für eine Bankverbindung.
- neue Funktion iban_bic_gen() zur Bestimmung einer IBAN sowie BIC und benutzter BLZ/Kontonummer. Durch die IBAN-Regeln wird oft die BLZ, und manchmal auch die Kontonummer ersetzt. Dadurch ergibt sich dann ein anderer BIC, als wenn er aus der BLZ-Tabelle abgelesen würde. Ebenfalls zurückgeliefert werden BLZ und Kontonummer, die für die Generierung der IBAN benutzt werden.
- neue Funktion get_kto_check_version_x() mit etwas mehr Infos
- Bug fix in main.c: bei der Anzeige der Bankdaten in der Konsole wurde bei Prüfziffermethoden ab B0 die erste Stelle der Prüfziffermethode immer falsch ausgegeben.
28.02.2013 - Version 4.5 von konto_check
Dies ist wieder eine reine Bugfix-Version für Perl, die zwei Fehler in den Perl-Tests korrigiert (eine Bank wurde umbenannt, eine andere gibt es nicht mehr). Diese Fehler führten wieder zu FAILS in den Tests auf allen Systemen.
02.02.2013 - Version 4.4 von konto_check
Die Version 4.4 enthält die neue Prüfziffermethode E0 sowie kleinere Änderungen:
- neue Prüfziffermethode E0
- Änderungen der Prüfziffermethoden C6 und D1 implementiert
- Bug fix in Methode C6
13.11.2012 - Version 4.3 von konto_check
Die Version 4.3 ist eine reine Bugfix-Version für Perl, die eine vergessene Datei (blz.txt) nachliefert. Diese Datei wird für einen Test benötigt; aufgrund der fehlenden Datei wurde für alle Tests ein FAIL zurückgegeben.
24.10.2012 - Version 4.2 von konto_check
Die Version 4.2 enthält vor allem einige Bugfixes sowie kleinere Änderungen im Perl- und Ruby-Port:
- encoding error in KontoCheck.pm gefixt
- einige Speicherprobleme gefixt
- IBAN Generierung der Flessa Bank korrigiert (es wird für alle BLZs der Flessa-Bank dieselbe BLZ benutzt)
- in Perl gibt es jetzt die Funktion lut_keine_iban_berechnung() sowie eine optionale Variable in generate_lut2(), um eine IBAN-Blacklist an eine LUT-Datei anzuhängen
- Perl: neue Testdatei generate_lut.t zum Test der Generierung einer LUT-Datei
- Perl und Ruby: Alle Suchroutinen in KontoCheckRaw haben jetzt die Parameter sort (Ausgabe nach BLZ sortieren) und uniq (für jede Bank nur eine Zweigstelle ausgeben); auch die Ruby-Funktion KontoCheck::suche() unterstützt die beiden Parameter.
- diverse kleinere Änderungen
24.10.2012 - Version 4.2 von konto_check
Die Version 4.2 enthält vor allem einige Bugfixes sowie kleinere Änderungen im Perl- und Ruby-Port:
- encoding error in KontoCheck.pm gefixt
- einige Speicherprobleme gefixt
- IBAN Generierung der Flessa Bank korrigiert (es wird für alle BLZs der Flessa-Bank dieselbe BLZ benutzt)
- in Perl gibt es jetzt die Funktion lut_keine_iban_berechnung() sowie eine optionale Variable in generate_lut2(), um eine IBAN-Blacklist an eine LUT-Datei anzuhängen
- Perl: neue Testdatei generate_lut.t zum Test der Generierung einer LUT-Datei
- Perl und Ruby: Alle Suchroutinen in KontoCheckRaw haben jetzt die Parameter sort (Ausgabe nach BLZ sortieren) und uniq (für jede Bank nur eine Zweigstelle ausgeben); auch die Ruby-Funktion KontoCheck::suche() unterstützt die beiden Parameter.
- diverse kleinere Änderungen
01.06.2012 - Version 4.1 von konto_check
Die Version 4.1 enthält wieder einige wesentliche Änderungen in der Suche nach Banken sowie die neu definierte Prüfziffermethode C9. Hier die Änderungen im Einzelnen:
- Prüfziffermethode C9 hinzugefügt
- Es gibt jetzt eine Volltextsuche, die in den Feldern Bankname (Langform), Kurzname und Ort sucht. Alle Worte in diesen drei Feldern werden indiziert und in zwei Blocks in der LUT-Datei gespeichert; mit der Volltextsuche lassen sich so auch Begriffe finden, die an zweiter oder dritter Stelle stehen und mit der normalen Suche nicht gefunden werden können.
- Eine weitere Suchfunktion (lut_suche_multiple() bzw. bank_suche_multiple()) unterstützt die Suche nach mehreren Kriterien. Es können bis zu 26 einfache Suchen aufgerufen und die Ergebnisse beliebig (additiv, subtraktiv und multiplikativ) verknüpft werden. Eine kurze Dokumentation findet sich bei der Ruby-Dokumentation der Funktion KontoCheckRaw::bank_suche_multiple()
- Neu ist die Beispielsdatei mini.vb für Visual Basic .NET, sowie eine Interface-Datei mini1.vb
mit dem kompletten Aufrufinterface. Die beiden Skripte wurden mit der
freien Version des Instant VB Converters von
Tangible
Software Solutions Inc.
aus mini.cs bzw. mini1.cs generiert; sie können mit dem Befehl
vbc mini.vb
bzw.vbc mini1.vb
übersetzt werden. - In PHP 5.4 wurde das Aufruf-API geändert; dafür ist eine kleine Anpassung notwendig
- Im AWK-Port gibt es die neuen Funktionen iban_gen(), iban_check(), ipi_gen() und ipi_check()
- Die IBAN-Länge wird für die verschiedenen Länder getestet
- diverse kleinere Änderungen und Bugfixes
09.06.2011 - neue LUT-Datei, Ausblick auf Version 3.7
Die Deutsche Bundesbank hat in ihrer Mailingliste (wieder einmal) über eine falsche Prüfziffermethode informiert:
die Alte Leipziger Bauspar AG hat uns darüber informiert, dass in der Bankleitzahlendatei zum Gültigkeitstermin 06.06.2011 zu der Bankleitzahl 500 128 00 versehentlich eine falsche Prüfzifferberechnungsmethode (falsch = 50) gemeldet wurde. Die Alte Leipziger Bauspar AG bittet - soweit technisch möglich - die Datenbestände manuell zu korrigieren und zu der Bankleitzahl 500 128 00 die Prüfzifferberechnungsmethode 09 (keine Prüfzifferberechnung) zu hinterlegen.
Mit freundlichen Grüßen
Deutsche Bundesbank
Ich habe die Änderung in die LUT-Datei eingebaut und eine neue LUT-Datei nach SourceForge hochgeladen. Diese enthält noch einige zusätzliche Felder (mit den IDs 16-22), die erst ab Version 4.0 der Bibliothek benutzt werden; bei älteren Versionen werden sie einfach ignoriert. Sie enthalten vorberechnete Indexblocks zu den Suchfeldern sowie noch einen Block mit Banken, die einer IBAN-Berechnung nicht zugestimmt haben (Quelle: Sparkasse).
Mit den vorberechneten Indexblocks läßt sich die Suche wesentlich beschleunigen. Beim ersten Aufruf einer Suchroutine ist es im Moment noch erforderlich, das entsprechende Feld zu sortieren, was sehr aufwendig ist (bei mir dauert der erste Aufruf etwa 37 ms). Mit den Indexblocks wird der erste Aufruf auf weniger als 1 ms reduziert. Außerdem wurden die Suchroutinen noch dahingehend geändert, daß die Umlaute in allen vier unterstützten Kodierungen konsistent behandelt werden (sie werden - unabhängig von der zugrundeliegenden Kodierung (auch für HTML Entities) - nach den entsprechenden Grundbuchstaben einsortiert. Bei der alten Version war die Suche auf die Kodierung ISO-8859-1 festgelegt; Umlaute in anderen Kodierungen wurden nicht erkannt, bzw. falsch einsortiert.
Eine weitere Neuerung betrifft die Funktion iban_gen(). Bislang wurde immer von einer Selbstberechnung abgeraten; von der Sparkasse gibt es nun ein kleines Programm (SEPA Acoount Converter), bei dem eine Liste der Banken enthalten ist, die einer Selbstberechnung der IBAN nicht zugestimmt haben. Diese Datei läßt sich nun auch in konto_check einlesen und in die LUT-Datei integrieren; falls der Block enthalten ist, wird er automatisch geladen und bei der IBAN-Berechnung ausgewertet. Bei Banken, die einer Selbstberechnung nicht zugestimmt haben, wird dann eine Fehlermeldung generiert und keine Berechnung durchgeführt.
Die neue Version kommt voraussichtlich Ende Juli nach SourceForge. Vielleicht gibt es bald noch ein Update im SVN-Repository; es müssen allerdings noch einige Tests gemacht werden.
Weblinks zum SEPA-Account-Converter:
Kurzanleitung
Downloadseite
Installationsdatei des Account Converters
20.05.2011 - Ruby-Version von konto_check
Die Ruby-Version von konto_check ist nun als konto_check-0.1.0.gem von SourceForge erhältlich. Die Version ist (wie die Versionsnummer nahelegt) noch nicht ganz final, aber das API dürfte jetzt stabil bleiben; evl. gibt es noch kleinere Änderungen.
Der Ruby-Port wurde durch Peter Horn initiiert; er schrieb die erste Version und das notwendige Framework. Ich hatte dann einige der Bank-Funktionen hinzugefügt; das Interface war allerdings nicht sehr komfortabel (ähnlich wie jetzt KontoCheckRaw, es war der Vorläufer davon). Jan Schwenzien hatte um die Zeit auch ein wenig an der Bibliothek gearbeitet; er hatte dann die Idee, die Bibliothek in zwei Klassen zu splitten, KontoCheck mit einem mehr ruby-artigem und einfachen Interface, das nur die Werte zurückliefert, die man auch erwartet, sowie KontoCheckRaw, das zusätzlich noch Statusinfos und manches mehr zurückgibt. Er schrieb den Code für die beiden Klassen.
Den beiden sei an dieser Stelle nochmals herzlich gedankt für ihre Arbeit; ohne sie würde es den Ruby-Port nicht geben.
Diese Version ist gegenüber den beiden Versionen auf RubyForge stark erweitert; sie enthält zusätzlich noch die encoding() Funktion, mit dem die Kodierung für die Funktion retval2txt() sowie die Bankdaten (Name, Kurzname, Ort) umgestellt werden kann, sowie eine kurze Dokumentation aller Funktionen (im Source eingebettet; die HTML- sowie rdoc-Dokumentation wird bei der Installation generiert).
Diese Version enthält als C-Code eine etwas erweiterte Version von 3.6 (es wurde noch die encoding() Funktion hinzugefügt; diese wird im nächsten Release auch in den anderen Ports enthalten sein). Der Port enthält eine eigene Dokumentation im rdoc- und HTML-Format.
Die Ruby-Version ist in zwei Klassen aufgeteilt: KontoCheckRaw bildet die direkte Schnittstelle zur C-Bibliothek und ist daher manchmal etwas sperrig; KontoCheck ist dagegen mehr Ruby-artig ausgelegt. KontoCheck gibt meist nur eine Teilmenge von KontoCheckRaw zurück, aber (hoffentlich) die Teile, die man unmittelbar von den jeweiligen Funktionen erwartet. Eine Reihe einfacher Funktionen sind auch in beiden Versionen identisch.
Die encoding() Funktion in Zusammenhang mit der Suche ist noch nicht fertig. Momentan werden die Sucharrays bei einer Änderung der Kodierung verworfen und bei der nächsten Suche dann neu aufgebaut, so daß sie zu der neuen Kodierung passen. Besser wäre es, die Suchindizes (unabhängig von der Kodierung) in eigene Blocks in der LUT-Datei zu speichern und diese automatisch mit den zugehörigen Blocks zu laden; das würde auch die Suche an sich beschleunigen, da beim ersten Suchvorgang nicht immer die zeitaufwendige Sortierung erfolgen müßte. Außerdem sollte die Suche nach Umlaut-Texten nicht von der aktuellen Kodierung abhängen, sondern Umlaute etc. z.B. auf die entsprechenden Grundbuchstaben reduzieren. Diese beiden Features werden voraussichtlich in der nächsten Version implementiert.
13.04.2011 - neue Version von konto_check
Die Version 3.6 von konto_check ist nun von SourceForge erhältlich.
Diese Version enthält die Änderungen der Prüfziffermethoden, die ab 6.6.2011 gültig werden, sowie einige kleinere Fehlerkorrekturen.
Hier die Änderungen im Einzelnen:
- neue Prüfziffermethoden D7 und D8 implementiert (gültig ab 6.6.2011)
- Änderungen für die Prüfziffermethode B8, C6 und D4 (gültig ab 6.6.2011).
- Bugfix in Methode D6 (falls sich in D6a für die Prüfziffer 10 ergab, wurde die Meldung "ungültiges Konto" zurückgegeben, statt mit D6b weiterzutesten).
- Eine Reihe Compilerwarnungen, die sich bei dem neuen Ruby-Port ergaben, wurden beseitigt. Der Ruby-Port ist ziemlig weit fortgeschritten; er wird wahrscheinlich auch bald freigegeben.
06.03.2011 - LUT-Datei korrigiert, Patch für Methode D6
Bei der Generierung der LUT-Dateien hatte sich ein Fehler eingeschlichen (die Dateinamen stimmten mit dem Gültigkeitsdatum nicht überein); der Fehler ist jetzt korrigiert.
Außerdem wurde ein Fehler in der Prüfziffermethode D6 beseitigt (Details finden sich auf dem Sourceforge Bug Tracker). Die neue Version ist im SVN enthalten, bald kommt auch ein neues Release dafür.
12.02.2011 - awk-Version von konto_check
Es gibt nun auch einen awk-Port von konto_check. Es werden zwar nur wenige Funktionen exportiert; dafür sind die awk-Programme jedoch wesentlich kürzer und prägnanter als Programme in anderen Sprachen. Ein Minimaltest läßt sich sogar leicht in einer Zeile implementieren, ohne daß das Programm deshalb schwerer zu lesen wäre. Zwei kleine Demoprogramme sind bei den Beispielsprogrammen verfügbar.
06.01.2011 - neue Version von konto_check
Die Version 3.5 von konto_check ist nun von SourceForge erhältlich.
Diese Version enthält die neue Berechnungsmethode D6 und die Änderung in der Berechnung für die Prüfziffermethode D1 sowie einige kleinere Fehlerkorrekturen.
Hier noch die Änderungen im Einzelnen:
- neue Prüfziffermethode D6 implementiert (gültig ab 7.3.2011)
- neue Berechnung für Prüfziffermethode D1 (gültig ab 7.3.2011). Aktuell benutzt keine Bank die Prüfziffermethode, daher wurde der Compilerswitch METHODE_D1_NEU_2011_03_07 als 1 definiert (und damit die neue Berechnungsmethode schon aktiviert).
- die Variablen lut_set_* enthalten jetzt explizit auch BLZ und Prüfziffer. Normalerweise werden die beiden Blocks implizit eingefügt; u.U. konnte allerdings eine LUT-Datei ohne diese Blocks erzeugt werden, die dann natürlich für die Kontenprüfung unbrauchbar ist.
- Fehler in den *BIC-Routinen beseitigt, der unter NetBSD/64 Bit und Dragonfly/64Bit zum Absturz führte. Der Fehler trat auf, falls für eine BLZ kein BIC definiert ist; bei der Suche nach einem BIC müssen diese zunächst sortiert werden, was dann sofort zum Absturz führte (allerdings nur auf diesen Systemen).
- kleiner Fix für Compilerproblem unter Solaris
- für generate_lut2() wird jetzt eine minimale Anzahl Slots vorgegeben; falls der angegebene Wert kleiner ist, wird er korrigiert. Der Standardwert ist 25; damit ist es möglich, zwei volle Sätze in einer LUT-Datei zu speichern. Das entsprechende Makro ist SLOT_CNT_MIN in konto_check.h.
- kleine Änderungen im Perl-Port:
- einige Testkonten aktualisiert, neue Testwerte eingefügt
- etwas zusätzliche POD-Dokumentation für generate_lut2() in KontoCheck.pm
04.12.2010 - neue Version von konto_check
Die Version 3.4 von konto_check ist nun von SourceForge erhältlich. Sie enthält die neue Prüfziffermethode D5 (gültig ab Dezember 2010), sowie glue code für zusätzliche Kompressionsbibliotheken.
Hier noch die Änderungen im Einzelnen:
- neue Prüfziffermethode D5 implementiert (gültig ab Dezember 2010)
- optional können zusätzlich zu gzip verschiedene andere Kompressions-Bibliotheken (bzip2, lzo, lzma) eingebunden werden. Die Auswahl erfolgt beim Generieren der LUT-Datei über die Funktion set_default_compression(). Die benutzte Kompressionsmethode wird in den Klartext-Header der LUT-Datei geschrieben und bei der Initialisierung ausgewertet; falls die benutzte Kompressionsmethode nicht einkompiliert wurde, gibt es eine Fehlermeldung.
Die Ergebnisse der Tests zeigen eine klare Überlegenheit von gzip in der Gesamtwertung; daher wird es auch das Standardverfahren bleiben. Ausführliche Testergebnisse finden sich in der Datei 0test_compression auf SourceForge.net. - kleinere Korrekturen in der Initialisierung
- Code etwas aufgeräumt, check_malloc Routinen herausgenommen (sie werden nicht mehr benötigt)
- neue Option -vx (in main.c) und Makro VERBOSE_DEBUG; dies ist für erweiterte Debug-Routinen bei verzwickten Problemen. Die Option ist allerdings wohl etwas esoterisch ;-)
20.06.2010 - neue Version von konto_check
Die Version 3.3 von konto_check ist nun von SourceForge erhältlich. Es gab bereits am 13.6. die Version 3.2; allerdings zeigte sich, daß in den Suchroutinen ein Fehler war, der sich nur auf 64 Bit Plattformen bemerkbar machte, so daß schon nach kurzer Zeit noch eine neue Version fällig war.
Diese Version enthält vor allem Verbesserungen für den Perl-Port: die Perl-Version läßt sich unter Windows jetzt problemlos kompilieren, auch eine fehlende zlib sollte jetzt i.A. erkannt werden; in dem Fall wird versucht, die mitgelieferte Version zu kompilieren. Die Suchroutinen funktionieren jetzt auch unter Perl.
Hier noch die Änderungen im Einzelnen:
- In der LUT-Datei wurde die Prüfziffermethode der Landessparkasse Schenefeld (Bankleitzahl 222 515 80) ebenfalls auf A2 korrigiert.
- CHECK_MALLOC wird nun defaultmäßig als 0 definiert (es wird an sich nicht mehr benötigt; unter bestimmten Randbedingungen macht es Probleme)
- neue Funktion lut_blz(), die eine Bankleitzahl auf Gültigkeit testet
- neue Funktion pz2str() zur Umwandlung einer numerischen Prüfziffermethode in die String-Version (2-stellig alphanumerisch)
- neue Funktion lut_dir_dump_str(), die das Inhaltsverzeichnis einer LUT-Datei in einen String schreibt
- php/test2.php: Umstellung auf neues API
- konto_check_mini: kein Programmabbruch mehr, falls die LUT-Datei nicht alle Blocks enthält
- Änderungenn für Perl:
- Suchroutinen für Perl komplett neu geschrieben und getestet
- neue Funktionen lut_*1(), die immer in skalarem Kontext arbeiten
- Funktionen retval2txt_*(ret) hinzugefügt (standen im POD, nur nicht im Programmcode)
- lut_info(): zusätzliche Rückgabevariable $lut_dir, in der das Verzeichnis der LUT-Datei zurückgegeben wird
- für die Speicherfreigabe in lut_info() wird die Funktion kc_free() benutzt, da free() in strawberry perl umdefiniert wird und zum Absturz führt.
- Makefile.PL komplett umgeschrieben; es funktioniert nun für Windows, und sollte eine vorhandene (oder nicht vorhandene) zlib besser erkennen
- neue Testdateien t/lut_info.t und t/lut_suche.t
04.06.2010 - Aktualisierte Dateien blz.lut2 und blz.lut2f
Die Bankleitzahlen-Datei blz.lut und blz.lut2f wurden wieder aktualisiert, da die Sparkasse Hennstedt-Wesselburen (Bankleitzahl 218 523 10) und die Sparkasse Hohenwestedt (Bankleitzahl 214 520 30) versehentlich eine falsche Prüfzifferberechnungsmethode (00) an die Bundesbank gemeldet haben. Die korrekte Prüfzifferberechnungsmethode "A2" wird zum nächsten Gültigkeitstermin 06.09.2010 in die Bankleitzahlendatei aufgenommen. Die Prüfziffermethoden der beiden Banken wurden in den LUT-Dateien korrigiert.
26.05.2010 - Version 3.1 von konto_check
Die Version 3.1 von konto_check ist nun von SourceForge erhältlich. Diese Version enthält die Änderungen in den Berechnungsmethoden C6 und D1, die zum 7.6.10 gültig werden sowie die neu definierte Prüfziffermethode D4.
Außerdem wurden einige kleinere Korrekturen eingearbeitet, die zum größten Teil schon im SVN verfügbar waren:
- Das Makefile benutzt jetzt die beiden BLZ-Dateien blz_20091207.txt und blz_20100308.txt; diese beiden Dateien sind auch in der LUT-Datei verwendet.
- falls in einer LUT-Datei beiden Datensätze ungültig sind, wird nun der neuere genommen
- defaultmäßig werden keine alten LUT-Dateien (Version 1.0/1.1) mehr erzeugt; dieses Verhalten läßt sich über den Compilerschalter GENERATE_OLD_LUTFILE in konto_check.h steuern)
- Die Funktion iban_gen() überprüft das BLZ/Konto Paar auf auf
möglicherweise weggelassene Unterkonten. Falls dies der Fall ist (es kann in
den Methoden 13, 26, 50, 63, 76 sowie C7 auftreten), wird ein entsprechender
Rückgabewert generiert:
- OK_UNTERKONTO_ATTACHED:
Warnung: es wurde ein (weggelassenes) Unterkonto angehängt - OK_UNTERKONTO_POSSIBLE:
Die Kontonummer scheint richtig zu sein, könnte jedoch auch ein (nicht angegebenes) Unterkonto enthalten - OK_UNTERKONTO_GIVEN:
wahrscheinlich ok; es wurde ein Unterkonto gefunden
- OK_UNTERKONTO_ATTACHED:
- PHP: neue config-Option --enable-symbolic-retvals. Mit der Option wird gesteuert, ob für PHP auch symbolische Rückgabewerte (als Konstanten) definiert werden; die Voreinstellung ist nein (alte Voreinstellung war ja). In den letzten Versionen wurde FALSE dabei auch definiert (als int(0)); diese Definition wurde jetzt herausgenommen, um die Kollision mit FALSE als bool(0) zu vermeiden; ansonsten funktionieren Tests wie $ret===FALSE nicht mehr (ein Test mit $ret===false wurde nicht tangiert).
- neue PHP-Funktion kto_check_retval(). Diese Funktion gibt ein assoziatives Array zurück, das als Index die Makronamen aus konto_check.h benutzt und den entsprechenden numerischen Wert zurückgibt. Das Array kann gut benutzt werden, wenn man die Makronamen nicht als globale Konstante deklarieren will (Option --enable-symbolic_retvals beim configure-Aufruf).
- die erste ID für User-Blocks wurde von 1000 auf 500 herabgesetzt; 501 wird gleich für den Default-Block (s.u.) benutzt. Einige kleinere Fehler in der Verarbeitung von User-Blocks wurden noch beseitigt.
- neue Funktionen zum Lesen und Schreiben von Default-Blocks in der
LUT-Datei. Diese Funktionen können benutzerspezifische Daten in die LUT-Datei
schreiben (in einem eigenen Block mit der Defaultkennung 501; es sind jedoch
auch andere Kennungen möglich). Die Daten werden als Schlüssel/Daten-Paar
gespeichert. Für den Schlüssel ist ein C-String erlaubt, während in den Daten
auch binäre Daten mit eingebetteten ASCII-NULL-Zeichen erlaubt sind. Die
folgenden Funktionen sind definiert:
- kto_check_init_default(char *lut_name,int block_id)
Default-Block aus der LUT-Datei einlesen - kto_check_default_keys(char ***keys,int *cnt)
die Funktion gibt ein Array mit den aktuellen Schlüsseln zurück - kto_check_set_default(char *key,char *val)
einen Wert (C-String) in der aktuellen Tabelle eintragen. Bei dieser Funktion muß die Stringlänge nicht angegeben werden. Achtung - der Block wird bei dieser Funktion noch nicht gespeichert, sondern verbleibt nur im Speicher!!! Die Funktion initialisiert bei Bedarf die notwendigen Variablen; es ist keine zusätzliche Initialisierung notwendig (wie auch bei der nächsten Funktion). - kto_check_set_default_bin(char *key,char *val,int size)
einen Binärwert in die aktuelle Tabelle eintragen - kto_check_get_default(char *key,char **val,int *size)
einen Wert aus der aktuellen Tabelle lesen. - kto_check_write_default(char *lutfile,int block_id)
die aktuelle Tabelle in die LUT-Datei schreiben.
- kto_check_init_default(char *lut_name,int block_id)
- Es gibt einige zusätzliche Rückgabewerte für den Test von DTAUS-Dateien; der Code dazu ist allerdings noch nicht enthalten (er liegt noch in einer separaten Datei).
- Im Makefile wurde die Compiler-Option -Wall (alle Warnungen einschalten)
aktiviert; dazu mußten noch einige kleinere kosmetische Korrekturen am Code
vorgenommen werden.
26.07.2011 - Version 4.0 von konto_check
Die Version 4.0 enthält einige wesentliche Änderungen in der Suche nach Banken sowie in der Kodierung der Ausgabe. Außerdem wurde in der Funktion iban_gen() noch eine Prüfung hinzugefügt, ob die Bank einer Selbstberechnung der IBAN widersprochen hat. Hier die wichtigsten Änderungen gegenüber der Version 3.6 im Einzelnen:
- Es gibt eine neue Funktion kto_check_encoding(), mit der die Kodierung der Ausgabe (sowohl für Fehlermeldungen als auch die Felder der LUT-Datei (Bankname, Kurzname, Ort) festgelegt werden kann. Die Funktion kto_check_retval2txt() gibt die Ausgabe entsprechend der gewählten Kodierung aus; eine neue Funktion (kto_check_retval2iso()) übernimmt die Rolle der alten Funktion, die immer die Kodierung ISO-8859-1 benutzte.
- Die Sortierungsroutinen wurden umgeschrieben, so daß Umlaute in allen
Kodierungen erkannt werden. Außerdem können die Suchbegriffe jetzt auch in
einer beliebigen Kodierung angegeben werden, sogar mit HTML Entities. Alle
Zeichen werden auf eine interne Repräsentation mit 12 Bit umgesetzt; dabei
werden Groß- und Kleinbuchstaben gleich behandelt und Umlaute sowie
Buchstaben mit Akzenten als eigene Zeichen direkt nach dem entsprechenden
Grundbuchstaben einsortiert. Dies erscheint mir konsistenter als die alte
Version, bei denen diese Zeichen mit den Grundbuchstaben einfach
gleichgesetzt wurden, und auch besser als die Version, z.B Umlaute unter
zu sortieren.
Zwischen den verschiedenen Zeichensätzen gibt es natürlich einige Kollisionen; diese werden so aufgelöst, daß jeweils das Zeichen der aktuellen Kodierung (die mittels encoding() gesetzt wurde) benutzt wird. Die Fälle sind in der Funktion get_sortc() behandelt.- In der alten Version wurde beim ersten Aufruf einer Suchroutine der entsprechende Suchindex jeweils neu generiert. Die Suchindizes sind nun als LUT-Blocks gespeichert und können sehr schnell eingelesen werden. Die benötigte Zeit für den ersten Suchvorgang (in PHP) reduziert bei meinem Laptop dadurch von ca. 35ms (mit Generierung des Index) auf weniger als 1ms (mit vorberechnetem Index-Block aus der LUT-Datei). Alle weiteren Suchvorgänge laufen dann sehr schnell ab (sie benötigen etwa 40 Mikrosekunden); dabei ergibt sich natürlich kein Unterschied zu den Vorversionen.
Ein Indexblock wird erst eingelesen, wenn er auch benötigt wird; dazu wird der Name und das benutzte Set der LUT-Datei gespeichert. Die Information kann auch über die Funktion current_lutfile_name() (s.u.) gelesen werden.
In der SVN-Version 53 ist noch ein Fehler bei der Generierung der Indexblocks enthalten; der Index für die Kurzbezeichnung der Institute wird beim kombinierten Block für Namen und Kurznamen nicht richtig erzeugt. In der aktuellen Version wurde der Fehler berichtigt; der Indexblock der alten LUT-Datei vom 9.7.2011 auf SF.net war allerdings auch fehlerhaft. Die Datei sollte durch die aktuelle Version ersetzt werden.- Falls dem Suchmuster bei Stringsuche ein ! vorangestellt wird, wird eine genaue Suche durchgeführt. Es werden nur die Ergebnisse zurückgeliefert, die genau auf das Suchmuster passen.
- Aufgrund der zusätzlichen Indexblocks (je Set bis zu sechs zusätzliche Blocks) wurde die minimale Slotzahl auf 40 erhöht.
- Für den Parameter set in der Funktion in generate_lut2() sind jetzt auch die Werte 10, 11 und 12 möglich. Sie entsprechen den Werten 0, 1 und 2 des normalen Aufrufs; es werden jedoch keine Indexblocks generiert. Die LUT-Dateien sind dadurch kleiner, allerdings wird bei der Suche mehr Zeit benötigt.
- Es gibt eine neue Funktion current_lutfile_name(); diese liefert den Namen und das für die Initialisierung benutzte set zurück. Sie wurde zunächst für die inkrementelle Initialisierung der Indexblocks benötigt, ist aber auch für andere Aufgaben nützlich.
- Die Funktion iban_gen() wertet jetzt eine Liste von Banken aus, die der IBAN-Berechnung nicht zugestimmt haben. Die Liste ist die Datei CONFIG.INI des SEPA Account Converters; sie kann mit der Funktion lut_keine_iban_berechnung() direkt in eine LUT-Datei geschrieben werden. Der entsprechende Block wird bei der Initialisierung gelesen und von iban_gen() ausgewertet; falls er nicht in der LUT-Datei enthalten ist, erzeugt das allerdings auch keine Warnung.
Alle Banken der Liste erzeugen eine Statusmeldung mit dem Wert OK_UNTERKONTO_ATTACHED, OK_UNTERKONTO_POSSIBLE oder OK_UNTERKONTO_GIVEN. Falls einer dieser Stauswerte zurückgegeben wird, ist somit immer Vorsicht geboten; der generierte IBAN sollte direkt bei dem zugehörigen Institut überprüft werden.Weblinks:
Kurzanleitung zum SEPA-Konverter
Übersicht
Download SEPA-Konverter
- Im AWK-Port wurde die Funktion iban_gen() hinzugefügt
- es wurde der AWK-Port für awk 4.0.0 implementiert. Diese AWK-Version enthält ein komplett neues API; es ist allerdings leichter zu lesen als das alte.
- Es gibt die Beispielsdatei mini.cs für C#.NET, sowie eine Interface-Datei mini1.cs für C#
- Die Änderungen der Prüfzifferberechnungsmethoden B6 und D1 (gültig ab 5.9.11) sind implementiert
- diverse kleinere Änderungen und Bugfixes
- In der alten Version wurde beim ersten Aufruf einer Suchroutine der entsprechende Suchindex jeweils neu generiert. Die Suchindizes sind nun als LUT-Blocks gespeichert und können sehr schnell eingelesen werden. Die benötigte Zeit für den ersten Suchvorgang (in PHP) reduziert bei meinem Laptop dadurch von ca. 35ms (mit Generierung des Index) auf weniger als 1ms (mit vorberechnetem Index-Block aus der LUT-Datei). Alle weiteren Suchvorgänge laufen dann sehr schnell ab (sie benötigen etwa 40 Mikrosekunden); dabei ergibt sich natürlich kein Unterschied zu den Vorversionen.
09.06.2011 - neue LUT-Datei, Ausblick auf Version 3.7
Die Deutsche Bundesbank hat in ihrer Mailingliste (wieder einmal) über eine falsche Prüfziffermethode informiert:
die Alte Leipziger Bauspar AG hat uns darüber informiert, dass in der Bankleitzahlendatei zum Gültigkeitstermin 06.06.2011 zu der Bankleitzahl 500 128 00 versehentlich eine falsche Prüfzifferberechnungsmethode (falsch = 50) gemeldet wurde. Die Alte Leipziger Bauspar AG bittet - soweit technisch möglich - die Datenbestände manuell zu korrigieren und zu der Bankleitzahl 500 128 00 die Prüfzifferberechnungsmethode 09 (keine Prüfzifferberechnung) zu hinterlegen.
Mit freundlichen Grüßen
Deutsche BundesbankIch habe die Änderung in die LUT-Datei eingebaut und eine neue LUT-Datei nach SourceForge hochgeladen. Diese enthält noch einige zusätzliche Felder (mit den IDs 16-22), die erst ab Version 4.0 der Bibliothek benutzt werden; bei älteren Versionen werden sie einfach ignoriert. Sie enthalten vorberechnete Indexblocks zu den Suchfeldern sowie noch einen Block mit Banken, die einer IBAN-Berechnung nicht zugestimmt haben (Quelle: Sparkasse).
Mit den vorberechneten Indexblocks läßt sich die Suche wesentlich beschleunigen. Beim ersten Aufruf einer Suchroutine ist es im Moment noch erforderlich, das entsprechende Feld zu sortieren, was sehr aufwendig ist (bei mir dauert der erste Aufruf etwa 37 ms). Mit den Indexblocks wird der erste Aufruf auf weniger als 1 ms reduziert. Außerdem wurden die Suchroutinen noch dahingehend geändert, daß die Umlaute in allen vier unterstützten Kodierungen konsistent behandelt werden (sie werden - unabhängig von der zugrundeliegenden Kodierung (auch für HTML Entities) - nach den entsprechenden Grundbuchstaben einsortiert. Bei der alten Version war die Suche auf die Kodierung ISO-8859-1 festgelegt; Umlaute in anderen Kodierungen wurden nicht erkannt, bzw. falsch einsortiert.
Eine weitere Neuerung betrifft die Funktion iban_gen(). Bislang wurde immer von einer Selbstberechnung abgeraten; von der Sparkasse gibt es nun ein kleines Programm (SEPA Acoount Converter), bei dem eine Liste der Banken enthalten ist, die einer Selbstberechnung der IBAN nicht zugestimmt haben. Diese Datei läßt sich nun auch in konto_check einlesen und in die LUT-Datei integrieren; falls der Block enthalten ist, wird er automatisch geladen und bei der IBAN-Berechnung ausgewertet. Bei Banken, die einer Selbstberechnung nicht zugestimmt haben, wird dann eine Fehlermeldung generiert und keine Berechnung durchgeführt.
Die neue Version kommt voraussichtlich Ende Juli nach SourceForge. Vielleicht gibt es bald noch ein Update im SVN-Repository; es müssen allerdings noch einige Tests gemacht werden.
Weblinks zum SEPA-Account-Converter:
Kurzanleitung
Downloadseite
Installationsdatei des Account Converters20.05.2011 - Ruby-Version von konto_check
Die Ruby-Version von konto_check ist nun als konto_check-0.1.0.gem von SourceForge erhältlich. Die Version ist (wie die Versionsnummer nahelegt) noch nicht ganz final, aber das API dürfte jetzt stabil bleiben; evl. gibt es noch kleinere Änderungen.
Der Ruby-Port wurde durch Peter Horn initiiert; er schrieb die erste Version und das notwendige Framework. Ich hatte dann einige der Bank-Funktionen hinzugefügt; das Interface war allerdings nicht sehr komfortabel (ähnlich wie jetzt KontoCheckRaw, es war der Vorläufer davon). Jan Schwenzien hatte um die Zeit auch ein wenig an der Bibliothek gearbeitet; er hatte dann die Idee, die Bibliothek in zwei Klassen zu splitten, KontoCheck mit einem mehr ruby-artigem und einfachen Interface, das nur die Werte zurückliefert, die man auch erwartet, sowie KontoCheckRaw, das zusätzlich noch Statusinfos und manches mehr zurückgibt. Er schrieb den Code für die beiden Klassen.
Den beiden sei an dieser Stelle nochmals herzlich gedankt für ihre Arbeit; ohne sie würde es den Ruby-Port nicht geben.
Diese Version ist gegenüber den beiden Versionen auf RubyForge stark erweitert; sie enthält zusätzlich noch die encoding() Funktion, mit dem die Kodierung für die Funktion retval2txt() sowie die Bankdaten (Name, Kurzname, Ort) umgestellt werden kann, sowie eine kurze Dokumentation aller Funktionen (im Source eingebettet; die HTML- sowie rdoc-Dokumentation wird bei der Installation generiert).
Diese Version enthält als C-Code eine etwas erweiterte Version von 3.6 (es wurde noch die encoding() Funktion hinzugefügt; diese wird im nächsten Release auch in den anderen Ports enthalten sein). Der Port enthält eine eigene Dokumentation im rdoc- und HTML-Format.
Die Ruby-Version ist in zwei Klassen aufgeteilt: KontoCheckRaw bildet die direkte Schnittstelle zur C-Bibliothek und ist daher manchmal etwas sperrig; KontoCheck ist dagegen mehr Ruby-artig ausgelegt. KontoCheck gibt meist nur eine Teilmenge von KontoCheckRaw zurück, aber (hoffentlich) die Teile, die man unmittelbar von den jeweiligen Funktionen erwartet. Eine Reihe einfacher Funktionen sind auch in beiden Versionen identisch.
Die encoding() Funktion in Zusammenhang mit der Suche ist noch nicht fertig. Momentan werden die Sucharrays bei einer Änderung der Kodierung verworfen und bei der nächsten Suche dann neu aufgebaut, so daß sie zu der neuen Kodierung passen. Besser wäre es, die Suchindizes (unabhängig von der Kodierung) in eigene Blocks in der LUT-Datei zu speichern und diese automatisch mit den zugehörigen Blocks zu laden; das würde auch die Suche an sich beschleunigen, da beim ersten Suchvorgang nicht immer die zeitaufwendige Sortierung erfolgen müßte. Außerdem sollte die Suche nach Umlaut-Texten nicht von der aktuellen Kodierung abhängen, sondern Umlaute etc. z.B. auf die entsprechenden Grundbuchstaben reduzieren. Diese beiden Features werden voraussichtlich in der nächsten Version implementiert.
13.04.2011 - neue Version von konto_check
Die Version 3.6 von konto_check ist nun von SourceForge erhältlich.
Diese Version enthält die Änderungen der Prüfziffermethoden, die ab 6.6.2011 gültig werden, sowie einige kleinere Fehlerkorrekturen.
Hier die Änderungen im Einzelnen:
- neue Prüfziffermethoden D7 und D8 implementiert (gültig ab 6.6.2011)
- Änderungen für die Prüfziffermethode B8, C6 und D4 (gültig ab 6.6.2011).
- Bugfix in Methode D6 (falls sich in D6a für die Prüfziffer 10 ergab, wurde die Meldung "ungültiges Konto" zurückgegeben, statt mit D6b weiterzutesten).
- Eine Reihe Compilerwarnungen, die sich bei dem neuen Ruby-Port ergaben, wurden beseitigt. Der Ruby-Port ist ziemlig weit fortgeschritten; er wird wahrscheinlich auch bald freigegeben.
06.03.2011 - LUT-Datei korrigiert, Patch für Methode D6
Bei der Generierung der LUT-Dateien hatte sich ein Fehler eingeschlichen (die Dateinamen stimmten mit dem Gültigkeitsdatum nicht überein); der Fehler ist jetzt korrigiert.
Außerdem wurde ein Fehler in der Prüfziffermethode D6 beseitigt (Details finden sich auf dem Sourceforge Bug Tracker). Die neue Version ist im SVN enthalten, bald kommt auch ein neues Release dafür.
12.02.2011 - awk-Version von konto_check
Es gibt nun auch einen awk-Port von konto_check. Es werden zwar nur wenige Funktionen exportiert; dafür sind die awk-Programme jedoch wesentlich kürzer und prägnanter als Programme in anderen Sprachen. Ein Minimaltest läßt sich sogar leicht in einer Zeile implementieren, ohne daß das Programm deshalb schwerer zu lesen wäre. Zwei kleine Demoprogramme sind bei den Beispielsprogrammen verfügbar.
06.01.2011 - neue Version von konto_check
Die Version 3.5 von konto_check ist nun von SourceForge erhältlich.
Diese Version enthält die neue Berechnungsmethode D6 und die Änderung in der Berechnung für die Prüfziffermethode D1 sowie einige kleinere Fehlerkorrekturen.
Hier noch die Änderungen im Einzelnen:
- neue Prüfziffermethode D6 implementiert (gültig ab 7.3.2011)
- neue Berechnung für Prüfziffermethode D1 (gültig ab 7.3.2011). Aktuell benutzt keine Bank die Prüfziffermethode, daher wurde der Compilerswitch METHODE_D1_NEU_2011_03_07 als 1 definiert (und damit die neue Berechnungsmethode schon aktiviert).
- die Variablen lut_set_* enthalten jetzt explizit auch BLZ und Prüfziffer. Normalerweise werden die beiden Blocks implizit eingefügt; u.U. konnte allerdings eine LUT-Datei ohne diese Blocks erzeugt werden, die dann natürlich für die Kontenprüfung unbrauchbar ist.
- Fehler in den *BIC-Routinen beseitigt, der unter NetBSD/64 Bit und Dragonfly/64Bit zum Absturz führte. Der Fehler trat auf, falls für eine BLZ kein BIC definiert ist; bei der Suche nach einem BIC müssen diese zunächst sortiert werden, was dann sofort zum Absturz führte (allerdings nur auf diesen Systemen).
- kleiner Fix für Compilerproblem unter Solaris
- für generate_lut2() wird jetzt eine minimale Anzahl Slots vorgegeben; falls der angegebene Wert kleiner ist, wird er korrigiert. Der Standardwert ist 25; damit ist es möglich, zwei volle Sätze in einer LUT-Datei zu speichern. Das entsprechende Makro ist SLOT_CNT_MIN in konto_check.h.
- kleine Änderungen im Perl-Port:
- einige Testkonten aktualisiert, neue Testwerte eingefügt
- etwas zusätzliche POD-Dokumentation für generate_lut2() in KontoCheck.pm
04.12.2010 - neue Version von konto_check
Die Version 3.4 von konto_check ist nun von SourceForge erhältlich. Sie enthält die neue Prüfziffermethode D5 (gültig ab Dezember 2010), sowie glue code für zusätzliche Kompressionsbibliotheken.
Hier noch die Änderungen im Einzelnen:
- neue Prüfziffermethode D5 implementiert (gültig ab Dezember 2010)
- optional können zusätzlich zu gzip verschiedene andere Kompressions-Bibliotheken (bzip2, lzo, lzma) eingebunden werden. Die Auswahl erfolgt beim Generieren der LUT-Datei über die Funktion set_default_compression(). Die benutzte Kompressionsmethode wird in den Klartext-Header der LUT-Datei geschrieben und bei der Initialisierung ausgewertet; falls die benutzte Kompressionsmethode nicht einkompiliert wurde, gibt es eine Fehlermeldung.
Die Ergebnisse der Tests zeigen eine klare Überlegenheit von gzip in der Gesamtwertung; daher wird es auch das Standardverfahren bleiben. Ausführliche Testergebnisse finden sich in der Datei 0test_compression auf SourceForge.net. - kleinere Korrekturen in der Initialisierung
- Code etwas aufgeräumt, check_malloc Routinen herausgenommen (sie werden nicht mehr benötigt)
- neue Option -vx (in main.c) und Makro VERBOSE_DEBUG; dies ist für erweiterte Debug-Routinen bei verzwickten Problemen. Die Option ist allerdings wohl etwas esoterisch ;-)
20.06.2010 - neue Version von konto_check
Die Version 3.3 von konto_check ist nun von SourceForge erhältlich. Es gab bereits am 13.6. die Version 3.2; allerdings zeigte sich, daß in den Suchroutinen ein Fehler war, der sich nur auf 64 Bit Plattformen bemerkbar machte, so daß schon nach kurzer Zeit noch eine neue Version fällig war.
Diese Version enthält vor allem Verbesserungen für den Perl-Port: die Perl-Version läßt sich unter Windows jetzt problemlos kompilieren, auch eine fehlende zlib sollte jetzt i.A. erkannt werden; in dem Fall wird versucht, die mitgelieferte Version zu kompilieren. Die Suchroutinen funktionieren jetzt auch unter Perl.
Hier noch die Änderungen im Einzelnen:
- In der LUT-Datei wurde die Prüfziffermethode der Landessparkasse Schenefeld (Bankleitzahl 222 515 80) ebenfalls auf A2 korrigiert.
- CHECK_MALLOC wird nun defaultmäßig als 0 definiert (es wird an sich nicht mehr benötigt; unter bestimmten Randbedingungen macht es Probleme)
- neue Funktion lut_blz(), die eine Bankleitzahl auf Gültigkeit testet
- neue Funktion pz2str() zur Umwandlung einer numerischen Prüfziffermethode in die String-Version (2-stellig alphanumerisch)
- neue Funktion lut_dir_dump_str(), die das Inhaltsverzeichnis einer LUT-Datei in einen String schreibt
- php/test2.php: Umstellung auf neues API
- konto_check_mini: kein Programmabbruch mehr, falls die LUT-Datei nicht alle Blocks enthält
- Änderungenn für Perl:
- Suchroutinen für Perl komplett neu geschrieben und getestet
- neue Funktionen lut_*1(), die immer in skalarem Kontext arbeiten
- Funktionen retval2txt_*(ret) hinzugefügt (standen im POD, nur nicht im Programmcode)
- lut_info(): zusätzliche Rückgabevariable $lut_dir, in der das Verzeichnis der LUT-Datei zurückgegeben wird
- für die Speicherfreigabe in lut_info() wird die Funktion kc_free() benutzt, da free() in strawberry perl umdefiniert wird und zum Absturz führt.
- Makefile.PL komplett umgeschrieben; es funktioniert nun für Windows, und sollte eine vorhandene (oder nicht vorhandene) zlib besser erkennen
- neue Testdateien t/lut_info.t und t/lut_suche.t
04.06.2010 - Aktualisierte Dateien blz.lut2 und blz.lut2f
Die Bankleitzahlen-Datei blz.lut und blz.lut2f wurden wieder aktualisiert, da die Sparkasse Hennstedt-Wesselburen (Bankleitzahl 218 523 10) und die Sparkasse Hohenwestedt (Bankleitzahl 214 520 30) versehentlich eine falsche Prüfzifferberechnungsmethode (00) an die Bundesbank gemeldet haben. Die korrekte Prüfzifferberechnungsmethode "A2" wird zum nächsten Gültigkeitstermin 06.09.2010 in die Bankleitzahlendatei aufgenommen. Die Prüfziffermethoden der beiden Banken wurden in den LUT-Dateien korrigiert.
26.05.2010 - Version 3.1 von konto_check
Die Version 3.1 von konto_check ist nun von SourceForge erhältlich. Diese Version enthält die Änderungen in den Berechnungsmethoden C6 und D1, die zum 7.6.10 gültig werden sowie die neu definierte Prüfziffermethode D4.
Außerdem wurden einige kleinere Korrekturen eingearbeitet, die zum größten Teil schon im SVN verfügbar waren:
- Das Makefile benutzt jetzt die beiden BLZ-Dateien blz_20091207.txt und blz_20100308.txt; diese beiden Dateien sind auch in der LUT-Datei verwendet.
- falls in einer LUT-Datei beiden Datensätze ungültig sind, wird nun der neuere genommen
- defaultmäßig werden keine alten LUT-Dateien (Version 1.0/1.1) mehr erzeugt; dieses Verhalten läßt sich über den Compilerschalter GENERATE_OLD_LUTFILE in konto_check.h steuern)
- Die Funktion iban_gen() überprüft das BLZ/Konto Paar auf auf
möglicherweise weggelassene Unterkonten. Falls dies der Fall ist (es kann in
den Methoden 13, 26, 50, 63, 76 sowie C7 auftreten), wird ein entsprechender
Rückgabewert generiert:
- OK_UNTERKONTO_ATTACHED:
Warnung: es wurde ein (weggelassenes) Unterkonto angehängt - OK_UNTERKONTO_POSSIBLE:
Die Kontonummer scheint richtig zu sein, könnte jedoch auch ein (nicht angegebenes) Unterkonto enthalten - OK_UNTERKONTO_GIVEN:
wahrscheinlich ok; es wurde ein Unterkonto gefunden
- OK_UNTERKONTO_ATTACHED:
- PHP: neue config-Option --enable-symbolic-retvals. Mit der Option wird gesteuert, ob für PHP auch symbolische Rückgabewerte (als Konstanten) definiert werden; die Voreinstellung ist nein (alte Voreinstellung war ja). In den letzten Versionen wurde FALSE dabei auch definiert (als int(0)); diese Definition wurde jetzt herausgenommen, um die Kollision mit FALSE als bool(0) zu vermeiden; ansonsten funktionieren Tests wie $ret===FALSE nicht mehr (ein Test mit $ret===false wurde nicht tangiert).
- neue PHP-Funktion kto_check_retval(). Diese Funktion gibt ein assoziatives Array zurück, das als Index die Makronamen aus konto_check.h benutzt und den entsprechenden numerischen Wert zurückgibt. Das Array kann gut benutzt werden, wenn man die Makronamen nicht als globale Konstante deklarieren will (Option --enable-symbolic_retvals beim configure-Aufruf).
- die erste ID für User-Blocks wurde von 1000 auf 500 herabgesetzt; 501 wird gleich für den Default-Block (s.u.) benutzt. Einige kleinere Fehler in der Verarbeitung von User-Blocks wurden noch beseitigt.
- neue Funktionen zum Lesen und Schreiben von Default-Blocks in der
LUT-Datei. Diese Funktionen können benutzerspezifische Daten in die LUT-Datei
schreiben (in einem eigenen Block mit der Defaultkennung 501; es sind jedoch
auch andere Kennungen möglich). Die Daten werden als Schlüssel/Daten-Paar
gespeichert. Für den Schlüssel ist ein C-String erlaubt, während in den Daten
auch binäre Daten mit eingebetteten ASCII-NULL-Zeichen erlaubt sind. Die
folgenden Funktionen sind definiert:
- kto_check_init_default(char *lut_name,int block_id)
Default-Block aus der LUT-Datei einlesen - kto_check_default_keys(char ***keys,int *cnt)
die Funktion gibt ein Array mit den aktuellen Schlüsseln zurück - kto_check_set_default(char *key,char *val)
einen Wert (C-String) in der aktuellen Tabelle eintragen. Bei dieser Funktion muß die Stringlänge nicht angegeben werden. Achtung - der Block wird bei dieser Funktion noch nicht gespeichert, sondern verbleibt nur im Speicher!!! Die Funktion initialisiert bei Bedarf die notwendigen Variablen; es ist keine zusätzliche Initialisierung notwendig (wie auch bei der nächsten Funktion). - kto_check_set_default_bin(char *key,char *val,int size)
einen Binärwert in die aktuelle Tabelle eintragen - kto_check_get_default(char *key,char **val,int *size)
einen Wert aus der aktuellen Tabelle lesen. - kto_check_write_default(char *lutfile,int block_id)
die aktuelle Tabelle in die LUT-Datei schreiben.
- kto_check_init_default(char *lut_name,int block_id)
- Es gibt einige zusätzliche Rückgabewerte für den Test von DTAUS-Dateien; der Code dazu ist allerdings noch nicht enthalten (er liegt noch in einer separaten Datei).
- Im Makefile wurde die Compiler-Option -Wall (alle Warnungen einschalten)
aktiviert; dazu mußten noch einige kleinere kosmetische Korrekturen am Code
vorgenommen werden.
26.04.2010 - neue Version im SVN
Im SVN wurden einige Dateien aktualisiert:
- Methode D4 implementiert
- Änderungen in den Methoden C6 und D1 implementiert; diese Änderungen werden zum 7.6.10 gültig und sind momentan noch per Compilerswitch auskommentiert.
- Falls in einer LUT-Datei beide Datensätze ungültig sind, wird der jüngere Datensatz benutzt
- Defaultmäßig werden keine alten LUT-Dateien (mit den Versionen 1.0 oder 1.1) mehr erzeugt; diese Dateien bieten keinerlei Vorteile (eher Nachteile) und waren nur noch für die Rückwärtskompatibilität enthalten.
In der Header-Datei sind noch einige Konstanten für die Prüfung von DTAUS-Dateien enthalten. Die entsprechenden Routinen sind jedoch noch nicht in dieser Version enthalten, da noch einige weitere Tests erforderlich sind (der Code ist zum größten Teil schon geschrieben).
21.04.2010 - mini.php auf der Testseite
Die Testseite enthält jetzt auch das Beispielsprogramm mini.php, das eine minimale PHP-Anwendung von konto_check darstellt. Das Programm wird in einem iframe ausgeführt; so bleibt die Navigation erhalten.
04.03. und 05.03.2010 - Server nicht erreichbar
Aufgrund umfangreicher Umstellungsarbeiten an der Netzwerk-Infrastruktur ist der Server am 4. und 5.3.2010 nicht erreichbar.
25.02.2010 - Aktualisierte Datei blz.lut2f
Die Bankleitzahlen-Datei blz.lut2f wurde wieder aktualisiert, da von der Bundesbank eine neue Version der Bankleitzahlentabelle herausgegeben wurde (die Zweigstellen der Bayer Hypo- und Vereinsbank wurden umbenannt auf UniCredit Bank - HypoVereinsbank).
20.02.2010 - kleinere Aktualisierungen im SVN
im SVN wurden einige kleinere Aktualisierungen eingespielt:
- PHP: neue config-Option --enable-symbolic-retvals. Mit der Option wird gesteuert, ob für PHP auch symbolische Rückgabewerte (als Konstanten) definiert werden; die Voreinstellung ist nein (alte Voreinstellung war ja). In den letzten Versionen wurde FALSE dabei auch definiert (als int(0)); diese Definition wurde jetzt herausgenommen, um die Kollision mit FALSE als bool(0) zu vermeiden; ansonsten funktionieren Tests wie $ret===FALSE nicht mehr (ein Test mit $ret===false wurde nicht tangiert).
- Im Makefile wurde die Compiler-Option -Wall (alle Warnungen einschalten) aktiviert; dazu mußten noch einige kleinere kosmetische Korrekturen am Code vorgenommen werden.
- Das Makefile benutzt jetzt die beiden BLZ-Dateien blz_20091207.txt und blz_20100308.txt.
- Es gibt einige zusätzliche Rückgabewerte für DTAUS-Dateien; der Code dazu ist allerdings noch nicht enthalten (er liegt noch in einer separaten Datei).
11.02.2010 - Aktualisierte Datei blz.lut2f
Die Bankleitzahlen-Datei blz.lut2f wurde aktualisiert; sie enthält jetzt die beiden Datensätze der Bundesbankdateien mit dem Gültigkeitszeitraum vom 7.12.2009 bis 7.3.2010 sowie vom 8.3.2010 bis 6.6.2010. Die alte LUT-Datei enthielt aufgrund eines Fehlers im makefile in Datensatz 2 die Daten der letzten Gültigkeitsperiode.
10.02.2010 - Aktualisierte Datei blz.lut2f
Die Bankleitzahlen-Datei blz.lut2f wurde aktualisiert; sie enthält jetzt die beiden Datensätze der Bundesbankdateien mit dem Gültigkeitszeitraum vom 7.12.2009 bis 7.3.2010 sowie vom 83.2010 bis 6.6.2010.
12.01.2010 - Korrektur der Suchroutinen für Perl
Die Suchroutinen für Perl wurden korrigiert, da in der alten Version ein Speicherleck auftrat. Die Routinen wurden in jeweils drei Funktionen aufgeteilt; die Version ist zwar nicht so elegant, aber dafür tritt kein Speicherleck mehr auf :-).
Außerdem wurden noch kleinere Änderungen an Makerfile.PL gemacht.
03.01.2010 - Perl-Version im SVN, Suchfunktionen in Perl
Das SVN enthält jetzt auch die Perl-Version von konto_check; in Per werden jetzt auch die Suchfunktionen unterstützt.
24.11.2009 - Neue Webseite für konto_check
Nach langer Zeit kommt konto_check in neuem Gewand – die alte Seite war etwas spartanisch und enthielt manche Altlasten. Die neue Webseite bietet mehr Informationen und ist gleichzeitig viel übersichtlicher. Kritik und Anregungen sind natürlich immer willkommen – ich freue mich über eine email.
Hier finden sich auch noch einige Nachrichten, die schon älter sind, aber dennoch aktuell. Sie sind chronologisch einsortiert.
24.11.2009 - Fehler im PHP-Code korrigiert
Im PHP-Code trat eine NULL-Pointer Dereferenzierung auf, falls die LUT-Datei nur die Hauptstellen enthielt und bei einer Suchfunktion der letzte Parameter (Zweigstellenindex) angegeben wurde. Das Problem ist jetzt im SVN korrigiert (in der Datei php/konto_check.c, Rev. 21).
Die Probleme mit PHP 5.3, die zunächst bei XAMPP aufgefallen waren, tauchen jetzt auch nicht mehr auf; scheinbar war es derselbe Fehler. Da ich meist mit der vollständigen Version der LUT-Datei arbeite, war es am Entwicklungsrechner nicht aufgefallen.
Die neue PHP-Version erlaubt außerdem, bei der Ausgabe der Beschreibungen vor jede Zeile einen beliebigen Präfix voranzustellen; dieser wird als zusätzlicher optionaler Parameter der Funktion lut_methode_txt() übergeben. Falls dieser Parameter nicht angegeben ist, wird das alte Verhalten (drei Leerzeichen am Zeilenanfang) benutzt.
Hier einige direkte Links zu der korrigierten Datei:
Verzeichnis
Diff zur Vorversion
Direkter Download der Datei16.11.2009 - alte Version von konto_check_mini.exe
In den ZIP-Dateien seit 2.93 hatte sich ein Fehler eingeschlichen: die Datei konto_check_mini.exe wurde bei der Erstellung der ZIP-Dateien nicht aktualisiert, sondern es wurde immer wieder dieselbe alte Version (vom 10.6.2008) mit eingepackt. Dadurch wurden natürlich auch die Fehlerkorrekturen und neuen Prüfziffermethoden in diesem Programm nicht berücksichtigt. Der Fehler ist jetzt behoben; auf sourceforge.net liegt eine aktualisierte Version des Programms sowie eine berichtigte ZIP-Datei konto_check_dos-3.0a.zip.
31.10.2009 - Version 3.0 freigegeben
Die Version 3.0 von konto_check ist wurde nun freigegeben. Sie enthält einige kritische Bugfixes im Bereich der Speicherverwaltung für den PHP-Port (deshalb wurde die Datei auch schon auf den Server gelegt, und nicht gleichzeitig mit der neuen Web-Präsenz veröffentlicht, wie es ursprünglich geplant war.
Außerdem sind jetzt auch einige Suchroutinen implementiert. Banken können nach verschiedenen Kriterien gesucht werden: Bankleitzahl, Prüfziffer, Postleitzahl, Ort, Bankname (Kurz- oder Langform) sowie BIC. Bei den rein numerischen Werten kann nach einem Bereich gesucht werden (z.B. Bankleitzahlen im PLZ-Bereich 67000 bis 68000); bei den anderen Werten kann der Wortanfang angegeben werden, und es wird eine Liste der Banken zurückgegeben, auf die das Kriterium zutrifft (z.B. findet eine Suche nach Banken mit dem Ort "Aa" alle Banken in Aach, Aachen, Aalen und Aarbergen).