vim:cindent:ft=txt:tw=75 ######################################################################## # PRÜFZIFFERBERECHNUNG VON KONTONUMMERN # # C-Library # ######################################################################## # # # Autor : Michael Plugge # # Version : 2.92 (3.0 Beta 2) # # Datum : 23.08.2008 # # # ######################################################################## Das Modul errechnet anhand von Kontonummer, Bankleitzahl und Prüfziffermethode ob eine angegebene Kontonummer plausibel ist (Prüfzifferverfahren). Diese Datei bezieht sich vor allem auf die C-Library; in der Perl-Version gibt es kleine Unterschiede, besonders in der Paketliste. Für die Perl- Version ist sie mehr als Zusatzinfo gedacht. Diese Datei ist noch von der Version 2.7; für 3.0 ist sie ziemlig veraltet. Für die neue Version ist eine ausführliche Beschreibung aller Funktionen in Arbeit. 1. Paketliste ============ 00liesmich.txt : diese Datei 0_history.txt : Versionsgeschichte blz.lut : Lookup-Table für Bankleitzahlen konto_check.c : C-Datei (komplettes Prüfziffermodul) konto_check.h : Header-Datei mit public interface lgpl.txt : GNU Lesser General Public Lizenz lgpl-ger.html : deutsche Übersetzung der LGPL main.c : Beispielsprogramm makefile : für Faulenzer (Unix) testkonten.txt : diverse Testkonten 2. Installation =============== Alle benötigten Funktionen sind in der Datei konto_check.c enthalten. Die Datei kann mit einem anderen Programm gelinkt werden. Als API werden drei die Funktionen kto_check(), cleanup_kto() und generate_lut() sowie die zwei Variablen kto_check_msg und pz_methode global definiert; alles andere ist static oder lokal deklariert. Eine eigentliche Installation ist nicht erforderlich, sie kann jedoch bei Bedarf (z.B. als shared library) erfolgen. 3. Benutzung =============== Zum Test eines Kontos wird die Funktion int kto_check(char *pz_or_blz,char *kto,char *lut_name) benutzt. Der erste Parameter ist die Prüfziffermethode (zweistellig) oder Bankleitzahl, der zweite Parameter das zu testende Konto und der dritte Parameter Name und Pfad der Lookup-Datei blz.lut. Falls für die Datei der Defaultwert genommen werden soll (DEFAULT_LUT_NAME), kann für den dritten Parameter auch NULL übergeben werden. Die Funktion hat folgende Rückgabewerte: FATAL_ERROR : schwerer (nicht näher spezifizierter) Fehler INVALID_KTO_LENGTH : Kontolänge ungültig FILE_WRITE_ERROR : Schreibfehler bei Dateien FILE_READ_ERROR : Lesefehler bei Dateien ERROR_MALLOC : Fehler beim Anfordern von Speicher NO_BLZ_FILE : keine blz.txt Datei (zur Generierung von blz.lut) INVALID_LUT_FILE : Fehler in der Datei blz.lut NO_LUT_FILE : Die Datei blz.lut konnte nicht geöffnet werden INVALID_BLZ : Die Bankleitzahl ist ungültig INVALID_KTO : Das Konto ist ungültig (nicht nur falsch!!) NOT_IMPLEMENTED : die Prüfziffermethode ist nicht implementiert NOT_DEFINED : die Prüfziffermethode ist nicht definiert (Methode 12) FALSE : Die Prüfziffer ist falsch OK : Die Prüfziffer ist richtig OK_NO_CHK : Das Konto wird ohne Prüfung als richtig angesehen Sowohl Kontonummer als auch Bankleitzahl sind als strings zu übergeben. Zu jedem Rückgabewert wird außerdem eine Klartextmeldung in der Variablen kto_check_msg gesetzt. Die Library benutzt für die Prüfziffermethoden eigenes (komprimiertes) Dateiformat. Eine Datei mit den aktuellen Prüfziffern (vom März 2008) liegt bei; sie kann jedoch auch mit der Funktion ret=generate_lut(char *inputname,char *outputname) aus der Datei der Deutschen Bundesbank generiert werden. Die Funktion hat die folgenden Rückgabewerte: FATAL_ERROR (-9) Ausgabedatei blz.lut kann nicht geschrieben werden NO_BLZ_FILE (-8) BLZ-Datei (blz.txt) nicht gefunden OK (1) erfolgreich Die Funktion generate_lut() setzt auch die Variable kto_check_msg. 4. ANMERKUNGEN ZUR VERSION ========================== Die aktuelle Version (2.x) wurde (mittels eines Profilers auf Basis des RDTSC Zählers) stark auf Geschwindigkeit hin optimiert; das Beispielsprogramm läuft jetzt mehr als doppelt so schnell wie in Version 1.1. Außerdem wurden die neuen Prüfmethoden implementiert; es werden alle 130 definierten Prüfmethoden unterstützt (00 bis C9). Das Beispielsprogramm kann auch als Filterapplikation verwendet werden. Mit dem Befehl koto_check -h wird eine kleine Online-Hilfe ausgegeben. Näheres zu den Optionen ist in den Sourcen (vor allem main.c) zu finden. Das Eingabe- und Ausgabeformat wurde etwas geändert, so daß eine Eingabezeile immer an die Ausgabedatei weitergereicht wird, und (falls eine Bankleitzahl und Kontonummer gefunden wurde) noch das Testergebnis angehängt wird. Dieses kann vom Eingangstext durch ein frei wählbares Trennzeichen (Option -s) getrennt werden. Bei Benutzung von Prüfziffermethoden ist bei der Berechnung der Methoden 52, 53, B6 und C0 auch noch die Bankleitzahl von Bedeutung. Die aktuelle Bankleitzahltabelle wird veröffentlicht von der Deutschen Bundesbank: http://www.bundesbank.de/zahlungsverkehr/zahlungsverkehr_bankleitzahlen_download.php Dabei ist die Datei blzJJMMpc.exe herunterzuladen und auszupacken (ist ein ZIP-Archiv, JJ steht für das Jahr, MM für den Monat, also z.B. blz0303pc.exe). Die daraus benötigte Datei ist blzJJMMpc.txt. Die Aktualisierung erfolgt ca. alle 3 Monate. Die aktuellen Prüfziffermethoden werden ebenfalls von der Deutschen Bundesbank veröffentlicht: http://www.bundesbank.de/zahlungsverkehr/zahlungsverkehr_pruefziffernberechnung.php Allgemeine Informationen und Links gibt es vom Bundesverband deutscher Banken unter http://www.bdb.de/verband/Intern.htm Bugs und Anregungen bitte an m.plugge@hs-mannheim.de 5. BEKANNTE FEHLER ================== Momentan sind in den Prüfziffermethoden keine Fehler bekannt (was nicht heißt, daß keine da sind!). Falls Sie einen Fehler finden, würde ich mich sehr freuen, davon zu hören ;-))). Ein Schwachpunkt 2.7er Version ist noch immer die Threadfestigkeit; sie ist in der nächsten Version implementiert. Es gibt zwar für die meisten Funktionen threadfeste Varianten, aber die sind doch mehr ein übler Hack. Stattdessen werden die globalen Variablen komplett verbannt und durch lokale Variablen ersetzt (der dadurch verursachte kleine Geschwindigkeits- nachteil dürfte kein Problem sein, da das Programm so schon sehr schnell ist). Für Serveranwendungen und Perl ist auch eine Methode wünschenswert, die aktuelle Prüfziffertabelle durch eine neue zu ersetzen; dies ist ebenfalls in der (parallel erscheinenden) Version 3.0 (bzw. Betaversion 2.92) möglich. In der Version sind die LUT2 Routinen integriert, etliche Altlasten beseitigt, und alle globalen R/W Variablen entfernt; die Prüfziffertabelle kann durch eine neue Version ersetzt werden; außerdem lassen sich zu einer gegebenen Bankleitzahl alle Felder der Bundesbankdatei bestimmen. Die Daten werden komprimiert gespeichert; die vollständige Datei ist 256KB groß, eine Datei mit Bankleitzahl, Bankname, PLZ, Ort und Prüfziffer der Hauptstellen benötigt 53KB. Außerdem lassen sich auch zwei Versionen der Bankleitzahlendatei in derselben LUT-Datei unterbringen; das vereinfacht die Umstellung der LUT-Datei am Aktualisierungsdatum (kann automatisch erfolgen). 6. Technische Informationen ============================ Die Bankleitzahl ist immer 8-stellig. Die Länge der Kontonummer ist variabel und wird auf 10 Stellen gesetzt, indem führenden Nullen ergänzt werden. Die Datei testkonten.txt ist eine Testdatei mit knapp 600 Kontonummern und Bankleitzahlen Einige sind reale Kontonummern, andere sind Testkonten, die von der Deutschen Bundesbank zur Verfügung gestellt werden. Feld 1 -> Bankleitzahl oder Prüfziffer Feld 2 -> Kontonummer. Die Bibliothek wurde mit allen Testkontonummern der Dokumentation der Prüfziffernberechnungmethoden der Deutschen Bundesbank (Stand Mai 2007) erfolgreich getestet. Außerdem wurden etliche Millionen Testkontonummern generiert (für jede Methode bzw. Teilmethode ca. 50000...100000) und mit dem Perl-Programm konto122.pl von Andreas Butzko sowie teilweise mit anderen Programmen getestet. 7. GESCHWINDIGKEIT ================== Die library wurde für die Versin 2.0 stark auf Geschwindigkeit hin optimiert. Bei den Tests wurde (unter Linux) eine Datei mit 5.000.000 Kontonummern in 1,1s geprüft (auf einem 3,4 GHz Pentium 4; Kompilierung mit eingeschalteter Optimierung, ohne Debuginfo; Aufruf ./konto_check -f testkto.blz testkto.out. Ohne Optimierung, mit -f werden etwa 1,7s benötigt, ohne Optimierung und ohne -f etwa 2,6s). 8. VERSIONEN ============ 01.05.02 : Version 0.1 13.06.02 : Version 0.2 10.07.02 : Version 0.3 13.09.02 : Version 1.0 10.10.02 : Version 1.0.1 06.11.02 : Version 1.0.2 04.02.03 : Version 1.0.3 13.03.03 : Version 1.1.0 16.04.03 : Version 1.1.1 25.06.03 : Version 1.1.2 16.01.04 : Version 1.1.3 12.10.04 : Version 1.1.4 16.12.04 : Version 1.1.5 16.01.04 : Version 2.0-Alpha-1 12.10.04 : Version 2.0-Beta-1 16.12.04 : Version 2.0-Beta-2 06.08.05 : Version 2.0 final 01.12.05 : Version 2.0.1 26.05.06 : Version 2.0.2 23.08.06 : Version 2.0.3 20.11.06 : Version 2.0.4 13.03.07 : Version 2.0.5 26.05.07 : Version 2.1 21.08.07 : Version 2.2 25.08.07 : Version 2.3 (nur für Perl, Bugfix release) 13.11.07 : Version 2.4 16.02.08 : Version 2.5 10.04.08 : Version 2.6 23.04.08 : Version 2.91 23.08.08 : Version 2.7 23.08.08 : Version 2.92 9. COPYRIGHT ============ Copyright (C) 2002-2008 Michael Plugge. Diese library ist freie Software; Sie dürfen sie unter den Bedingungen der GNU Lesser General Public License, wie von der Free Software Foundation veröffentlicht, weiterverteilen und/oder modifizieren; entweder gemäß Version 2.1 der Lizenz oder (nach Ihrer Option) jeder späteren Version. Die GNU LGPL ist weniger infektiös als die normale GPL; Code, der von Ihnen hinzugefügt wird, unterliegt nicht der Offenlegungspflicht (wie bei der normalen GPL); außerdem müssen Programme, die diese Bibliothek benutzen, nicht (L)GPL lizensiert sein, sondern können beliebig kommerziell verwertet werden. Die Offenlegung des Sourcecodes bezieht sich bei der LGPL *nur* auf geänderten Bibliothekscode. Diese library wird in der Hoffnung weiterverbreitet, daß sie nützlich sein wird, jedoch OHNE IRGENDEINE GARANTIE, auch ohne die implizierte Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Mehr Details finden Sie in der GNU Lesser General Public License. Sie sollten eine Kopie der GNU Lesser General Public License zusammen mit dieser Bibliothek erhalten haben; falls nicht, schreiben Sie an die Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. 10. STANDARD DISCLAIMERS ======================== This library is intended for general use and no warranty is implied for suitability to any given task. I hold no responsibility for your setup or any damage done while using/installing/modifing this library.