vim:tw=80:ai Version 0.1 (13.7.06, initiale Version) ============================== - Prüffunktionalität komplett - die Datei blz-at.lut wird von einem externen Programm generiert Version 0.2 (20.7.06): ====================== - einige VIM-Faltungen eingefügt - exit in etlichen Funktionen durch return mit Fehlercode ersetzt - kto_check_msg herausgenommen wegen Kollision mit der deutschen Version, funktional ersetzt durch kto_check_retval2txt(). - kleine Änderungen der main() Routine - falls eine BLZ als erstes Zeichen ein - enthält, wird das Konto auch getestet, falls die BLZ gelöscht ist; die Rückgabewerte sind in dem Fall dann OK_GELOESCHT, OK_NO_CHK_GELOESCHT oder FALSE_GELOESCHT. - Geschwindigkeitsoptimierungen: * search_blz() für die Methodensuche ersetzt durch Array, in dem die Methoden gespeichert sind * atoi() zur Umwandlung der BLZ in Integer ersetzt durch eigene Funktion. Eine Arrayvariante zur Umwandlung bringt keinen Geschwindigkeitsvorteil. * l_datum (globale Variable) ersetzt durch Array (binär); das Löschdatum erhält man nun über die Funktion get_loesch_datum() Die beiden ersten Funktionen waren im Vergleich zur insgesamt benötigten Zeit unverhältnismäßig langsam. Daher wurde die zugehörige Prüftabelle und die Information, ob eine Bankleitzahl gelöscht ist, in zwei Byte-Arrays mit jeweils 100.000 Elementen transferiert; die Arrayabfrage ist natürlich wesentlich schneller als der Funktionsaufruf. Durch diese Umstellung wird die Variable l_datum nicht mehr gesetzt; falls man setzen wollte, müßte der Index für jede Bankleitzahl gespeichert werden. In diesem Fall müßte man für das Array für das Löschdatum ein Integer-Array (4 Byte Integer) benutzen; da das Löschdatum aber wohl nicht oft benötigt wird, wird es nicht mehr in jedem Fall bestimmt, sondern nur noch durch den Funktionsaufruf. - Fehlerkorrekturen: * im Makro ZIFFERNSUMME_7: if(pz1>59)pz1-=56; ersetzt durch if(pz1>59)pz1-=54; (falsche Ziffer eingefügt => Ziffernsumme wird falsch) * in der Funktion kto_check_at (Rechenvorgang der Prüfziffer): methode=*ptr++-'0'; ersetzt durch methode=char2num[*ptr++]; (die alte Variante stimmt nur für einen Rechenvorgang bis 9) * in der Funktion kto_check_at (Array-Version, nach Rechenvorgang der Prüfziffer): wichtung-='0'; ersetzt durch wichtung=char2num[wichtung]; stelle_1-='1'; ersetzt durch stelle_1=char2num[stelle_1]-1; (die alte Variante stimmt nur für Werte bis 9) Version 1.0 (1.9.06): ===================== - weitere Tests mit realen Konten, noch keine weiteren Fehler gefunden - einige Kommentare eingefügt - noch einige VIM-Faltungen eingefügt - CRC-Test für die lut-Datei (mit adler32 als Prüfsumme) - optional bei generate_lut_at(): Ausgabe der Bankdaten auch als plain-Datei in frei wählbarem Format - neue Funktion dump_lutfile(), die den Inhalt einer lut-Datei als Klartext ausgibt (Ausgabefelder: BLZ, Löschdatum, Prüftabelle/-parameter). - Funktion generate_lut_at in die Library integriert; inpar2lut.c ist dadurch obsolet geworden (bzw. nur noch für spezielle Prüfzwecke relevant), und daher aus der Distribution herausgenommen. Die Umlaute werden von CP 850 auf iso-8859-1 umgesetzt (aktuell nur für die plain Ausgabe; es ist jedoch für eine spätere Erweiterung der lut-Datei auf zusätzliche Ausgabefelder relevant). - das Präprozessor-Makro HTML_UMLAUTE in kto_check_retval2txt() ist jetzt obsolet; stattdessen gibt es eine zusätzliche Funktion kto_check_retval2html(), die HTML-Umlaute liefert. - kleine Änderungen in der Sortier-Routine für generate_lut. Dadurch ändern sich für einige Bankleitzahlen der lut-Datei das Löschdatum, da nun Hauptstellen vor Zweigstellen sortiert werden (es wird nur eine Bank pro BLZ in die lut-Datei aufgenommen; manchmal werden allerdings laut der Bankleitzahlendatei Hauptstellen vor Zweigstellen gelöscht - schwer verständlich, aber so steht es da). Ansonsten ist die lut-Datei mit der alten Version identisch (läßt sich leicht mittels dump_lutfile() überprüfen ;-) ). - die library ist jetzt threadfest (sogar ohne Sonderfunktionen wie bei der deutschen Variante). - beim Lesen und Schreiben der lut-Datei ist der Modus auf rb bzw. wb gesetzt (das Programm war noch nicht unter Windows getestet). - die Prüfroutinen liefern denselben Wert wie Version 0.2 (getestet mit einer Spezialversion, die die Prüfziffer noch vor der Bildung des Modulus berücksichtigt). Ein Problem ist nur die BLZ 00001: in der inporwo.txt finden sich für die BLZ 00001 die folgenden Einträge: - 53791 00001 00032 GELOESCHT - BANKHAUS CARL SPAENGLER & CO. - 53813 00001 00032 BANKKOMMANDITGESELLSCHAFT ANTONI, HACKER & CO. + 76040 00001 00032 VORARLBERGER LANDESBANK-HOLDING + 116408 00001 00013 ANTEILSVERWALTUNGSSPARKASSE STOCKERAU + 163902 00001 00000 GELOESCHT - BANK AUSTRIA TREUHAND & BETEILIGUNGSFONDS AKTIENGESELLSCHAFT - 166286 00001 00032 Kathrein & Co. Bankkommanditgesellschaft - 184195 00001 00032 BANKHAUS SCHELHAMMER & SCHATTERA - 196053 00001 00032 GELOESCHT - Bankhaus Krentschker & Co. Zweigniederlassung Wien - 267511 00001 00032 GELOESCHT - RAIFFEISENBANK HARD REG.GEN.M.B.H. - 1337939 00001 00032 GELOESCHT - SECURITY KAPITAL-ANLAGEGESELLSCHAFT M.B.H. - 4888804 00001 00032 Verwaltungsgenossenschaft der vbankdirekt AG reg.Gen.m.b.H. Die drei Einträge mit einem + in der ersten Spalte werden in die blz-at.lut Datei übernommen; falls eine BLZ 00001 auftaucht, wird allerdings der Eintrag mit der ID 163902 (Tabelle 0, immer ok) benutzt. In der Version 0.2 wurde stattdessen der Eintrag mit der ID 76040 (Tabelle 32) benutzt (aufgrund der geänderten Sortierroutine). Die BLZ scheint allerdings keine reale BLZ zu sein, sondern nur ein Testfall, da die Banken auf den ersten Blick nichts miteinander zu tun haben und drei verschiedene Prüfverfahren (0, 13 und 32) angegeben sind. Version 1.1 (8.9.06): ======================= Diese Version enthält einige kleine Änderungen, die sich für das cgi-Programm als nützlich erwiesen haben, sowie zwei Bugfixes: - falls in kto_check_at() für den Parameter lut_name NULL übergeben wird, werden nur die Arrays initialisiert, aber keine lut-Datei geladen. Dies ist nützlich, falls statt einer Bankleitzahl direkt die Prüfparameter angegeben werden (mit vorgestelltem p). Falls für den Parameter lut_name ein Leerstring übergeben wird, wird versucht, die Datei DEFAULT_LUT_NAME zu lesen. - der Filedeskriptor trace ist jetzt als globale Variable (in der DLL auch exportiert) deklariert; damit kann die trace-Datei auch aus einem anderen Modul initialisiert werden. Die Trace-Version ist natürlich nicht threadfest, aber sie wird ja nur zur Fehlersuche benötigt. - in der Funktion generate_lut_at werden einige große Array-Variablen allokiert (ca. 3,5 MB bei MAX_BLZ_CNT_AT=30000); sie sind jetzt als static deklariert, da ansonsten unter Windows das Programm beim Generieren einer lut-Datei mit einer Schreibschutzverletzung abstürzt. - die Funktion dump_lutfile() lieferte keine vernünftigen Werte, da während der Entwicklung (kurzzeitig) die Arrays per malloc allokiert wurden, und später wieder als Arrays deklariert wurden; in der Funktion war noch die malloc-Version, und die Adressierung ging schief. - kleine Änderungen in der main() Routine - die Fehlermeldungen die von kto_check_retval2txt() geliefert werden, sind jetzt reine Fehlermeldungen, ohne in ### eingeschlossen zu sein Version 1.2 (11.9.06): ======================= - kleiner Fehler in der Trace-Version: falls trace==NULL war, wurden einige Berechnungen nicht gemacht, und das Ergebnis meist als richtig angesehen (dies betrifft nur die Trace-Version, nicht die normale; wurde beim cgi-Programm entdeckt). - Die Dateien mit dem INPAR Handbuch und -Vertrag werden nach Rücksprache mit First Data (H. Krickel) nicht mehr in das Paket aufgenommen, sondern sollten direkt bei First Data (Andreas.Krickl@firstdata.at) angefragt, bzw. von der Website von First Data Austria heruntergeladen werden (näheres in der Datei 00liesmich unter Punkt 4. Prüfparameter).