| Business-KontoCheck documentation | Contained in the Business-KontoCheck distribution. |
Business::KontoCheck - Perl extension for checking German and Austrian Bank Account Numbers
Because the module is for use mainly in Germany, the following documentation language is german too.
use Business::KontoCheck;
use Business::KontoCheck qw( kto_check lut_name lut_blz lut_ort %kto_retval [...] );
$retval=lut_init([$lut_name[,$required[,$set]]]);
$retval=kto_check_init($lut_name[,$required[,$set[,$incremental]]]);
$retval=kto_check($blz,$kto,$lut_name);
$retval=kto_check_str($blz,$kto,$lut_name);
$retval=kto_check_blz($blz,$kto)
$retval=kto_check_pz($pz,$blz,$kto)
$retval=generate_lut($inputname,$outputname,$user_info,$lut_version);
$retval=generate_lut2($inputname,$outputname[,$user_info[,$gueltigkeit[,$felder[,$filialen[,$slots[,$lut_version[,$set]]]]]]]);
[$@]retval=lut_blz($blz[,$offset])
[$@]retval=lut_info($lut_name)
[$@]retval=lut_filialen($blz[,$offset])
[$@]retval=lut_name($blz[,$offset])
[$@]retval=lut_name_kurz($blz[,$offset])
[$@]retval=lut_plz($blz[,$offset])
[$@]retval=lut_ort($blz[,$offset])
[$@]retval=lut_pan($blz[,$offset])
[$@]retval=lut_bic($blz[,$offset])
[$@]retval=lut_pz($blz[,$offset])
[$@]retval=lut_aenderung($blz[,$offset])
[$@]retval=lut_loeschung($blz[,$offset])
[$@]retval=lut_nachfolge_blz($blz[,$offset])
$retval=lut_valid()
$ret=pz2str($pz[,$ret])
[$@]bic=lut_suche_bic($bic[,$retval])
[$@]namen=lut_suche_namen($namen[,$retval])
[$@]namen_kurz=lut_suche_namen_kurz($namen_kurz])
[$@]ort=lut_suche_ort($ort[,$retval])
[$@]blz=lut_suche_blz($blz1[,$blz2[,$retval]])
[$@]pz=lut_suche_pz($pz1[,$pz2[,$retval]])
[$@]plz=lut_suche_plz($plz1[,$plz2[,$retval]])
$retval=copy_lutfile($old_name,$new_name,$new_slots)
$retval=dump_lutfile($outputname,$felder)
$retval=lut_cleanup()
$retval=iban_check(iban)
$retval=iban2bic(iban)
$retval=iban_gen(blz,kto)
$retval=retval2txt($retval)
$retval=retval2txt_short($retval)
$retval=retval2html($retval)
$retval=retval2utf8($retval)
$retval=retval2dos($retval)
$retval=kto_check_retval2txt($retval)
$retval=kto_check_retval2txt_short($retval)
$retval=kto_check_retval2html($retval)
$retval=kto_check_retval2utf8($retval)
$retval=kto_check_retval2dos($retval)
$retval_txt=$kto_retval{$retval};
$retval=kto_check_at($blz,$kto,$lut_name);
$retval=kto_check_at_str($blz,$kto,$lut_name);
$retval=generate_lut_at($inputname,$outputname,$plain_name,$plain_format);
Dies ist Business::KontoCheck, ein Programm zum Testen der Prüfziffern von deutschen und österreichischen Bankkonten. Dies ist die Perl- Version der C-Library (als XSUB Modul).
Es werden defaultmäßig die Funkionen kto_check und kto_check_str, (aus dem deutschen Modul), kto_check_at, kto_check_at_str (aus dem österreichischen Modul) sowie die Variable %kto_retval (für beide Module) exportiert.
Optional können auch eine Reihe weiterer Funktionen exportiert werden; diese müssen dann in der use Klausel anzugeben werden.
Funktion: kto_check()
kto_check_str()
Aufgabe: Testen eines Kontos
Aufruf: $retval=kto_check($blz,$kto,$lut_name);
$retval=kto_check_str($blz,$kto,$lut_name);
Parameter:
$blz: falls 2- oder 3-stellig: Prüfziffermethode
(evl. mit Untermethode a, b, c... oder 1, 2, 3)
falls 8-stellig: Bankleitzahl
$kto: Kontonummer (wird vor der Berechnung
linksbündig mit Nullen auf 10 Stellen
aufgefüllt)
$lut_name: Dateiname der Lookup-Tabelle mit Bankleitzahlen.
Falls NULL oder ein leerer String übergeben wird,
wird der Dateiname blz.lut benutzt.
Diese Datei enthält die Prüfziffermethoden für die
einzelnen Bankleitzahlen; sie kann mit der Funktion
generate_lut() aus der Bundesbanktabelle generiert
werden.
Rückgabewerte:
Die Funktion kto_check gibt einen numerischen Wert zurück,
während die Funktion kto_check_str einen kurzen String
zurückgibt.
Mittels des assoziativen Arrays %kto_retval lassen sich die
numerischen Rückgabewerte in einen etwas ausführlicheren
Rückgabetext umwandeln:
$retval_txt=$kto_retval{$retval};
-------------------------------------------------------------------------
Funktion: generate_lut() (LUT-Version 1.0 oder 1.1; obsolet)
generate_lut2() (LUT-Version 1.0, 1.1 oder 2.0)
Aufgabe: LUT-Datei generieren
Aufruf: $retval=generate_lut($inputname,$outputname,$user_info,$lut_version);
$retval=generate_lut2($inputname,$outputname[,$user_info[,$gueltigkeit
[,$felder[,$filialen[,$slots[,$lut_version[,$set]]]]]]]);
Parameter:
inputname: Name der Bankleitzahlendatei der Deutschen
Bundesbank (z.B. blz0303pc.txt)
outputname: Name der Zieldatei (z.B. blz.lut)
user_info: Info-Zeile, die zusätzlich in die LUT-Datei
geschrieben wird. Diese Zeile wird von der
Funktion get_lut_info() in zurückgegeben,
aber ansonsten nicht ausgewertet.
lut_version: Format der LUT-Datei. Mögliche Werte:
1: altes Format (1.0)
2: altes Format (1.1) mit Infozeile
3: neues Format (2.0).
Die Werte 1 und 2 werden defaultmäßig nicht mehr
unterstützt, da sie komplett obsolet sind; falls
jemand eine Datei im alten Format generieren will,
muß in konto_check.h das Makro GENERATE_OLD_LUTFILE
auf 1 gesetzt werden. Andernfalls wird immer eine
Datei im neuen Format generiert.
Die folgenden Parameter gelten nur für generate_lut2():
gueltigkeit: Gültigkeitsbereich der LUT-Datei, im Format
JJJJMMTT-JJJJMMTT, z.B. 20071203-20080302
felder: (Integer, 0-9) Felder, die in die LUT-Datei
aufgenommen werden sollen. Folgende Felder werden
in die Datei aufgenommen (nicht aufgeführt, aber
immer dabei sind Infoblock, BLZ und Prüfziffer).
Name+Kn. steht dabei für einen Block, der Name und
Kurzname der Bank enthält; dieser läßt sich besser
komprimieren, als wenn die beiden Blocks getrennt
sind. Lfd.Nr. ist die laufende Nr. in der BLZ-Datei;
praktisch wird sie wohl nicht benötigt, ist aber zur
Vollständigkeit mit enthalten.
0: (nur die drei Defaultblocks) (3 Slots)
1: Name+Kn. (4 Slots)
2: Name+Kn.,BIC (5 Slots)
3: Name,PLZ,Ort (6 Slots)
4: Name,PLZ,Ort,BIC (7 Slots)
5: Name+Kn.,PLZ,Ort,BIC (7 Slots)
6: Name+Kn.,PLZ,Ort,BIC,Nachfolge-BLZ (8 Slots)
7: Name+Kn.,PLZ,Ort,BIC,Nachfolge-BLZ,Änderung (9 Slots)
8: Name+Kn.,PLZ,Ort,BIC,Nachfolge-BLZ,Änderung,Löschung (10 Slots)
9: Name+Kn.,PLZ,Ort,BIC,Nachfolge-BLZ,Änderung,Löschung,PAN,Lfd.Nr. (12 Slots)
filialen: Flag (0 oder 1), ob die Filialdaten ebenfalls
aufgenommen werden sollen.
slots: Anzahl Slots (mögliche Verzeichniseinträge) der
LUT-Datei. Für einen vollen Datensatz (felder=9)
werden 12 Slots benötigt; falls die Datei zwei
Datensätze enthalten soll, braucht man mindestens
24 Slots.
In konto_check.h ist das Makro SLOT_CNT_MIN
definiert, das die minimale Anzahl Slots angibt.
Falls beim Aufruf dieser Funktion weniger Slots
angegeben werden, erhält man den Rückgabewert
OK_SLOT_CNT_MIN_USED, und die Anzahl der Slots wird
auf den Minimalwert gesetzt. Falls nicht genügend
Slots verfügbar sind, um die Datei zu generieren,
wird der (Fehler-)Wert LUT2_NO_SLOT_FREE zurückgegeben.
set: (Integer, 0, 1 oder 2) Angabe, ob das primäre Set (0
bzw. 1) oder sekundäre Datensatz (2) geschrieben
werden soll. Falls für set 0 angegeben wird, wird
eine neue Datei angelegt, bei 1 und 2 wird der
Datensatz an eine vorhandene LUT-Datei angehängt.
Das setzt natürlich voraus, daß noch genügend
Verzeichnisslots vorhanden sind, um alle Blocks
schreiben zu können. Bei Bedarf kann mittels
copy_lutfile() die Anzahl der Verzeichnisslots auch
erhöht werden.
-------------------------------------------------------------------------
Funktion: lut_blz()
lut_filialen()
lut_name()
lut_name_kurz()
lut_plz()
lut_ort()
lut_pan()
lut_bic()
lut_pz()
lut_aenderung()
lut_loeschung()
lut_nachfolge_blz()
Aufgabe: Bestimmung von Feldern der BLZ-Datei
Aufruf: [$@]ret=lut_blz($blz[,$filiale[,$ret]])
[$@]ret=lut_name($blz[,$filiale[,$ret]])
[$@]ret=lut_name_kurz($blz[,$filiale[,$ret]])
[$@]ret=lut_plz($blz[,$filiale[,$ret]])
[$@]ret=lut_ort($blz[,$filiale[,$ret]])
[$@]ret=lut_pan($blz[,$filiale[,$ret]])
[$@]ret=lut_bic($blz[,$filiale[,$ret]])
[$@]ret=lut_pz($blz[,$filiale[,$ret]])
[$@]ret=lut_aenderung($blz[,$filiale[,$ret]])
[$@]ret=lut_loeschung($blz[,$filiale[,$ret]])
[$@]ret=lut_nachfolge_blz($blz[,$filiale[,$ret]])
$ret=pz2str($pz[,$ret])
Die Funktionen bestimmen die diversen Felder der BLZ-Datei zu einer
gegebenen BLZ. Falls der optionale Parameter $filiale angegeben
wird, wird der Wert für eine Filiale bestimmt, ansonsten (und bei
$filiale==0) der Wert der Hauptstelle. Die Anzahl der Filialen zu
einer BLZ läßt sich mittels der Funktion $cnt=lut_filialen($blz)
bestimmen.
Die Funktion pz2str() wandelt eine numerische Prüfziffermethode
(wie sie z.B. von lut_pz() zurückgegeben wird) in einen
zweistelligen String um.
Alle Funktionen (außer pz2str) lassen sich sowohl im skalaren als
auch im Array-Kontext aufrufen. Bei Aufruf in skalarem Kontext wird
der jeweilige Wert zurückgegeben; bei Aufruf im Array-Kontext wird
außerdem noch der Rückgabestatus der Funktion als Zahl, String
(lang) und String (kurz) zurückgegeben. Beispiel:
$ret=lut_name("66090800") liefert für $ret den Wert "BBBank",
@ret=lut_name("66090800") liefert ein Array mit den Werten
@ret=("BBBank",1,"ok","OK")
der Aufruf
@ret=lut_name("660908") liefert ein Array mit den Werten
@ret=("",-5,"die Bankleitzahl ist nicht achtstellig","INVALID_BLZ_LENGTH")
Falls der Aufruf im Array-Kontext nicht gewünscht ist, gibt es noch
alternative Funktionen, die nur in skalarem Kontext arbeiten:
-------------------------------------------------------------------------
Funktion: lut_blz1()
lut_filialen1()
lut_name1()
lut_name_kurz1()
lut_plz1()
lut_ort1()
lut_pan1()
lut_bic1()
lut_pz1()
lut_aenderung1()
lut_loeschung1()
lut_nachfolge_blz1()
Aufgabe: Bestimmung von Feldern der BLZ-Datei (skalarer Kontext)
Aufruf: $ret=lut_blz1($blz[,$filiale[,$ret]])
$ret=lut_name1($blz[,$filiale[,$ret]])
$ret=lut_name_kurz1($blz[,$filiale[,$ret]])
$ret=lut_plz1($blz[,$filiale[,$ret]])
$ret=lut_ort1($blz[,$filiale[,$ret]])
$ret=lut_pan1($blz[,$filiale[,$ret]])
$ret=lut_bic1($blz[,$filiale[,$ret]])
$ret=lut_pz1($blz[,$filiale[,$ret]])
$ret=lut_aenderung1($blz[,$filiale[,$ret]])
$ret=lut_loeschung1($blz[,$filiale[,$ret]])
$ret=lut_nachfolge_blz1($blz[,$filiale[,$ret]])
$ret=pz2str1($pz[,$ret])
Die Funktionen entsprechen den Funktionen ohne die angehängte "1";
allerdings arbeiten sie ausschließlich im skalaren Kontext. Das ist
z.B. vorteilhaft, wenn man den Rückgabewert der Funktion in einem
anderen Funktionsaufruf benutzen will. Der Rückgabewert der
Funktion kann mittels des optionalen Parameters $ret bestimmt
werden.
-------------------------------------------------------------------------
Funktion: lut_suche_blz()
lut_suche_bic()
lut_suche_namen()
lut_suche_namen_kurz()
lut_suche_ort()
lut_suche_pz()
lut_suche_plz()
Aufgabe: Suche von Banken (nach Feldern der BLZ-Datei)
Aufruf: [$@]ret=lut_suche_bic($bic[,$retval])
[$@]ret=lut_suche_namen($namen[,$retval])
[$@]ret=lut_suche_namen_kurz($namen_kurz[,$retval])
[$@]ret=lut_suche_ort($ort[,$retval])
[$@]ret=lut_suche_blz($blz1[,$blz2[,$retval]])
[$@]ret=lut_suche_pz($pz1[,$pz2[,$retval]])
[$@]ret=lut_suche_plz($plz1[,$plz2[,$retval]])
Mit diesen Funktionen lassen sich Banken suchen, die bestimmte
Kriterien erfüllen. Bei alphanumerischer Suche (BIC, Name,
Kurzname, Ort) kann ein vollständiger Name oder Namensanfang
angegeben werden. So findet z.B. eine Suche lut_suche_ort("aa") die
Banken in in Aach, Aachen, Aalen und Aarbergen, während eine Suche
wie lut_suche_ort("aac") nur die Banken in Aach und Aachen findet.
Bei numerischer Suche (BLZ, Prüfziffer oder PLZ) kann ein Bereich
spezifiziert werden. Falls der zweite Suchparameter nicht angegeben
wird (oder 0 ist), werden Banken gesucht, die genau auf den
Parameter passen.
Diese Funktionen können sowohl in skalarem als auch im
Listenkontext aufgerufen werden. Bei Aufruf in skalarem Kontext
geben sie eine Referenz auf ein Array mit Bankleitzahlen zurück,
die die Kriterien erfüllen; bei Aufruf im Listenkontext werden (bis
zu) drei Array-Referenzen sowie der Rückgabewert der Funktion
zurückgegeben. Die erste zeigt auf das Array mit Bankleitzahlen,
die zweite auf ein Array mit Indizes der jeweiligen Zweigstellen
und die dritte auf ein Array mit den jeweiligen Werten des
gesuchten Feldes.
In dem optionalen Parameter $retval wird ebenfalls der numerischer
Rückgabewert der Funktion (wie im 4. Parameter bei Array-Kontext; 1
bei Erfolg, oder negative Statusmeldung) zurückgeliefert.. Mittels
des assoziativen Arrays %kto_retval{$retval} können diese
Rückgabewerte in Klartext konvertiert werden.
Beispiele:
$blz_p=lut_suche_ort("mannheim",$retval);
@blz=@$blz_p; # Array mit allen Banken in Mannheim
# $retval enthält den Rückgabestatus der Funktion
($blz_p,$idx_p)=lut_suche_ort("mannheim");
@blz=@$blz_p; # Array mit allen Banken in Mannheim
@idx=@$idx_p; # Array der Zweigstellen
($blz_p,$idx_p,$ort_p)=lut_suche_ort("aa");
@blz=@$blz_p; # Array mit Banken in Städten, die mit "aa" beginnen
@idx=@$idx_p; # Array der Zweigstellen
@ort=@$ort_p; # Array der jeweiligen Orte
($blz_p,$idx_p,$ort_p,$retval)=lut_suche_ort("aa");
@blz=@$blz_p; # Array mit Banken in Städten, die mit "aa" beginnen
@idx=@$idx_p; # Array der Zweigstellen
@ort=@$ort_p; # Array der jeweiligen Orte
# $retval enthält den Rückgabestatus der Funktion
-------------------------------------------------------------------------
Funktion: kto_check_at()
kto_check_at_str()
Aufgabe: Testen eines österreichischen Kontos
Aufruf: $retval=kto_check_at($blz,$kto,$lut_name);
$retval=kto_check_at_str($blz,$kto,$lut_name);
Parameter:
$blz: BLZ (5-stellig) oder Prüfparameter (mit vorangestelltem p)
Falls der BLZ ein - vorausgestellt wird, werden auch gelöschte
Bankleitzahlen geprüft.
Falls der BLZ ein p vorausgestellt wird, wird der folgende
Teil (bis zum Blank/Tab) als Prüfparameter angesehen.
$kto: Kontonummer
$lut_name: Name der Lookup-Datei oder Leerstring
Falls für $lut_name ein Leerstring angegeben wird, versucht
die Funktion, die Datei blz-at.lut zu lesen.
-------------------------------------------------------------------------
Funktion: generate_lut_at()
Aufgabe: LUT-Datei für das österreichische Modul generieren
Aufruf: $retval=generate_lut_at($inputname,$outputname,$plain_name,$plain_format);
Parameter:
$inputname: Name der INPAR-Datei (nur komplett, nicht inkrementell!)
$outputname: Name der Zieldatei (z.B. blz-at.lut)
$plain_name: (optional) Name einer Ausgabedatei für die Klartextausgabe.
$plain_format: Format der Klartextausgabe (s.u.)
Bugs:
Diese Funktion sollte nicht von einem Programm aufgerufen werden,
das zum Testen von Kontoverbindungen benutzt wird, da teilweise
dieselben Variablen benutzt werden, und so falsche Ergebnisse
erzeugt werden können.
Die Funktion generate_lut_at() generiert aus der Institutsparameter-
Datenbankdatei (5,3 MB) eine kleine Datei (8,3 KB), in der nur die
Bankleitzahlen und Prüfziffermethoden gespeichert sind. Um die Datei
klein zu halten, wird der größte Teil der Datei binär gespeichert.
Falls der Parameter plain_name angegeben wird, wird zu jeder INPAR-
Eintrag außerdem (in einem frei wählbaren Format) noch in eine Klartext-
datei geschrieben. Das Format der Datei wird durch den 4. Parameter
($plain_format) bestimmt. Es sind die folgenden Felder und Escape-
Sequenzen definiert (der Sortierparameter muß als erstes Zeichen
kommen!):
@i Sortierung nach Identnummern
@b Sortierung nach Bankleitzahlen (default)
%b Bankleitzahl
%B Bankleitzahl (5-stellig, links mit Nullen aufgefüllt)
%f Kennzeichen fiktive Bankleitzahl
%h Kennzeichen Hauptstelle/Zweigstelle
%i Identnummer der Österreichischen Nationalbank
%I Identnummer der Österreichischen Nationalbank (7-stellig)
%l Löschdatum (DD.MM.YYYY falls vorhanden, sonst nichts)
%L Löschdatum (DD.MM.YYYY falls vorhanden, sonst 10 Blanks)
%n1 Erster Teil des Banknamens
%n2 Zweiter Teil des Banknamens
%n3 Dritter Teil des Banknamens
%N kompletter Bankname (alle drei Teile zusammengesetzt)
%p Kontoprüfparameter
%t Name der Prüftabelle
%z zugeordnete BLZ (nur bei fiktiver BLZ, sonst nichts)
%Z zugeordnete BLZ (5-stellig bei fiktiver BLZ, sonst 5 Blanks)
%% das % Zeichen selbst
\n Zeilenvorschub
\r CR (für M$DOS)
\t Tabulatorzeichen
\\ ein \
@i (bzw. @b) muß am Anfang des Formatstrings stehen; falls keine
Sortierung angegeben wird, wird @b benutzt.
Nicht definierte Felder und Escape-Sequenzen werden (zumindest momentan
noch) direkt in die Ausgabedatei übernommen. D.h., wenn man %x schreibt,
erscheint in der Ausgabedatei auch ein %x, ohne daß ein Fehler gemeldet
wird. Ob dies ein Bug oder Feature ist, sei dahingestellt; momentan
scheint es eher ein Feature zu sein ;-))).
Falls kein plain_format angegeben wird, wird "@B%I %B %t %N"
benutzt. Die Datei ist (anders als die INPAR-Datei) nach
Bankleitzahlen sortiert. Nähres zur Sortierung findet sich in der
Einleitung zur Funktion cmp_blz().
Die Funktion ist **nicht** threadfest, da dies aufgrund der gewählten
Implementierung nur schwer zu machen wäre, und auch nicht sehr sinnvoll
ist (sie wird nur benötigt, um die blz-at.lut Datei zu erstellen).
-------------------------------------------------------------------------
Eine ausführliche Beschreibung der Prüfziffermethoden und das Format der LUT-Datei findet sich im C-Quellcode. Ein Link zur offiziellen Beschreibung der Prüfziffermethoden u.a. (von der Deutschen Bundesbank) findet sich auf der Webseite zu konto_check unter http://www.informatik.hs-mannheim.de/konto_check/konto_check.php?ausgabe=3
Auf SourceForge.net gibt es unter http://sourceforge.net/mail/?group_id=199719 auch eine Mailingliste. Der Traffic ist sehr gering, maximal meist ein bis zwei Emails/Monat.
Die aktuelle Version findet sich auf CPAN unter http://search.cpan.org/~michel/Business-KontoCheck oder auf Sourceforge unter http://sourceforge.net/projects/kontocheck/develop Dort ist auch ein SVN Repository, in dem die neuesten Versionen und Bugfixes zu finden sind.
Michael Plugge, <m.plugge@hs-mannheim.de>
Copyright (C) 2007-2011 by Michael Plugge
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available (perl and glue code).
The C library is covered by the GNU Lesser General Public License:
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
| Business-KontoCheck documentation | Contained in the Business-KontoCheck distribution. |
#vim:tw=70:ft=perl:si package Business::KontoCheck; use 5.006000; use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw( kto_check kto_check_str kto_check_blz kto_check_pz generate_lut generate_lut2 lut_cleanup lut_valid lut_init kto_check_init copy_lutfile lut_multiple lut_filialen lut_blz lut_name lut_name_kurz lut_plz lut_ort lut_pan lut_bic lut_pz lut_aenderung lut_loeschung lut_nachfolge_blz lut_blz1 lut_name1 lut_name_kurz1 lut_plz1 lut_ort1 lut_pan1 lut_bic1 lut_pz1 lut_aenderung1 lut_loeschung1 lut_nachfolge_blz1 lut_info iban2bic pz2str iban_gen check_iban ipi_check ipi_gen set_verbose_debug set_default_compression retval2txt retval2txt_short retval2utf8 retval2html retval2dos kto_check_retval2txt kto_check_retval2txt_short kto_check_retval2utf8 kto_check_retval2html dump_lutfile kto_check_retval2dos lut_suche_blz lut_suche_pz lut_suche_plz lut_suche_bic lut_suche_namen lut_suche_namen_kurz lut_suche_ort konto_check_at kto_check_at_str generate_lut_at %kto_retval %kto_retval_kurz ); our @EXPORT = qw( lut_init kto_check kto_check_blz kto_check_at %kto_retval ); our $VERSION = '3.6'; require XSLoader; XSLoader::load('Business::KontoCheck', $VERSION); # Preloaded methods go here. sub lut_info { my $lut_name; my $ret=1; my $info1; my $info2; my $valid1; my $valid2; my $lut_dir; my $args; if(scalar(@_)==1){ $lut_name=$_[0]; $args=0; } else{ $lut_name=""; $args=-2; } if(wantarray()){ $ret=lut_info_i($lut_name,1+$args,$info1,$valid1,$info2,$valid2,$lut_dir); return ($ret,$info1,$valid1,$info2,$valid2,$lut_dir); } else{ $ret=lut_info_i($lut_name,$args,$info1,$valid1,$info2,$valid2,$lut_dir); return $ret; } } sub lut_multiple { my $blz; my $filiale; my $cnt; my $name; my $name_kurz; my $plz; my $ort; my $pan; my $bic; my $pz; my $nr; my $aenderung; my $loeschung; my $nachfolge_blz; my $id; my $ret; if(scalar(@_)<1){ #keine BLZ angegeben, leere Liste zurück return (); } if(scalar(@_)<2){ #keine Filiale angegeben, Hauptstelle nehmen $filiale=0; } else{ $filiale=$_[1]; } $blz=$_[0]; $cnt=$name=$name_kurz=$plz=$ort=$pan=$bic=$pz=$nr=$aenderung=$loeschung=$nachfolge_blz=0; $ret=lut_multiple_i($blz,$filiale,$cnt,$name,$name_kurz,$plz,$ort,$pan,$bic,$pz,$nr,$aenderung,$loeschung,$nachfolge_blz); if(wantarray()){ return ($ret,$cnt,$name,$name_kurz,$plz,$ort,$pan,$bic,$pz,$nr,$aenderung,$loeschung,$nachfolge_blz); } else{ return $ret; } } sub ipi_gen { my $r; my $zweck; my $retval; my $papier; if(scalar(@_)==0){ return ""; } else{ $zweck=$_[0]; } $r=ipi_gen_i($zweck,$retval,$papier); if(wantarray()){ return ($retval,$papier,$r); } else{ return $retval; } } sub lut_filialen { my $r=1; my $v; $v=lut_filialen_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_suche_bic { if(wantarray()){ return lut_suche_c(1,1,@_); } else{ return lut_suche_c(0,1,@_); } } sub lut_suche_namen { if(wantarray()){ return lut_suche_c(1,2,@_); } else{ return lut_suche_c(0,2,@_); } } sub lut_suche_namen_kurz { if(wantarray()){ return lut_suche_c(1,3,@_); } else{ return lut_suche_c(0,3,@_); } } sub lut_suche_ort { if(wantarray()){ return lut_suche_c(1,4,@_); } else{ return lut_suche_c(0,4,@_); } } sub lut_suche_blz { if(wantarray()){ return lut_suche_i(1,1,@_); } else{ return lut_suche_i(0,1,@_); } } sub lut_suche_pz { if(wantarray()){ return lut_suche_i(1,2,@_); } else{ return lut_suche_i(0,2,@_); } } sub lut_suche_plz { if(wantarray()){ return lut_suche_i(1,3,@_); } else{ return lut_suche_i(0,3,@_); } } sub lut_blz { my $r; $r=lut_blz_i(@_); if(wantarray()){ return ($r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $r; } } sub lut_blz1 { return lut_blz_i(@_); } sub lut_name { my $r=1; my $v; $v=lut_name_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_name1 { my $r=1; return lut_name_i($r,@_); } sub lut_name_kurz { my $r=1; my $v; $v=lut_name_kurz_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_name_kurz1 { my $r=1; return lut_name_kurz_i($r,@_); } sub lut_plz { my $r=1; my $v; $v=lut_plz_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_plz1 { my $r=1; return lut_plz_i($r,@_); } sub lut_ort { my $r=1; my $v; $v=lut_ort_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_ort1 { my $r=1; return lut_ort_i($r,@_); } sub lut_pan { my $r=1; my $v; $v=lut_pan_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_pan1 { my $r=1; return lut_pan_i($r,@_); } sub lut_bic { my $r=1; my $v; $v=lut_bic_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_bic1 { my $r=1; return lut_bic_i($r,@_); } sub lut_pz { my $r=1; my $v; $v=lut_pz_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_pz1 { my $r=1; return lut_pz_i($r,@_); } sub lut_aenderung { my $r=1; my $v; $v=lut_aenderung_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_aenderung1 { my $r=1; return lut_aenderung_i($r,@_); } sub lut_loeschung { my $r=1; my $v; $v=lut_loeschung_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_loeschung1 { my $r=1; return lut_loeschung_i($r,@_); } sub lut_nachfolge_blz { my $r=1; my $v; $v=lut_nachfolge_blz_i($r,@_); if(wantarray()){ return ($v,$r,$Business::KontoCheck::kto_retval{$r},$Business::KontoCheck::kto_retval_kurz{$r}); } else{ return $v; } } sub lut_nachfolge_blz1 { my $r=1; return lut_nachfolge_blz_i($r,@_); } %Business::KontoCheck::kto_retval = ( -112 => 'die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden', -111 => 'der angegebene Wert für die Default-Kompression ist ungültig', -110 => 'wahrscheinlich OK; es wurde allerdings ein (weggelassenes) Unterkonto angefügt', -109 => 'Ungültige Signatur im Default-Block', -108 => 'Die maximale Anzahl Einträge für den Default-Block wurde erreicht', -107 => 'Es wurde noch kein Default-Block angelegt', -106 => 'Der angegebene Schlüssel wurde im Default-Block nicht gefunden', -105 => 'Beide Datensätze sind nicht mehr gültig; dieser ist aber jünger als der andere', -104 => 'Die Auftraggeber-Kontonummer des C-Datensatzes unterscheidet sich von der des A-Satzes', -103 => 'Die Auftraggeber-Bankleitzahl des C-Datensatzes unterscheidet sich von der des A-Satzes', -102 => 'Die DTA-Datei enthält (unzulässige) Zeilenvorschübe', -101 => 'ungültiger Typ bei einem Erweiterungsblock eines C-Datensatzes', -100 => 'Es wurde ein C-Datensatz erwartet, jedoch ein E-Satz gefunden', -99 => 'Es wurde ein C-Datensatz erwartet, jedoch ein E-Satz gefunden', -98 => 'Es wurde ein C-Datensatzerweiterung erwartet, jedoch ein C-Satz gefunden', -97 => 'Es wurde ein C-Datensatzerweiterung erwartet, jedoch ein E-Satz gefunden', -96 => 'Die Anzahl Erweiterungen paßt nicht zur Blocklänge', -95 => 'Ungültige Zeichen in numerischem Feld', -94 => 'Ungültige Zeichen im Textfeld', -93 => 'Die Währung des DTA-Datensatzes ist nicht Euro', -92 => 'In einem DTA-Datensatz wurde kein Betrag angegeben', -91 => 'Ungültiger Textschlüssel in der DTA-Datei', -90 => 'Für ein (alphanumerisches) Feld wurde kein Wert angegeben', -89 => 'Die Startmarkierung des A-Datensatzes wurde nicht gefunden', -88 => 'Die Startmarkierung des C-Datensatzes wurde nicht gefunden', -87 => 'Die Startmarkierung des E-Datensatzes wurde nicht gefunden', -86 => 'Die Satzlänge eines C-Datensatzes muß zwischen 187 und 622 Byte betragen', -85 => 'Die Satzlänge eines A- bzw. E-Satzes muß 128 Byte betragen', -84 => 'als Währung in der DTA-Datei ist nicht Euro eingetragen', -83 => 'das Ausführungsdatum ist zu früh oder zu spät (max. 15 Tage nach Dateierstellung)', -82 => 'das Datum ist ungültig', -81 => 'Formatfehler in der DTA-Datei', -80 => 'die DTA-Datei enthält Fehler', -79 => 'ungültiger Suchbereich angegeben (unten>oben)', -78 => 'Die Suche lieferte kein Ergebnis', -77 => 'BAV denkt, das Konto ist falsch (konto_check hält es für richtig)', -76 => 'User-Blocks müssen einen Typ > 500 haben', -75 => 'für ein LUT-Set sind nur die Werte 0, 1 oder 2 möglich', -74 => 'Ein Konto kann kann nur für deutsche Banken geprüft werden', -73 => 'Der zu validierende strukturierete Verwendungszweck muß genau 20 Zeichen enthalten', -72 => 'Im strukturierten Verwendungszweck dürfen nur alphanumerische Zeichen vorkommen', -71 => 'Die Länge des IPI-Verwendungszwecks darf maximal 18 Byte sein', -70 => 'Es wurde eine LUT-Datei im Format 1.0/1.1 geladen', -69 => 'Bei der Kontoprüfung fehlt ein notwendiger Parameter (BLZ oder Konto)', -68 => 'Die Funktion iban2bic() arbeitet nur mit deutschen Bankleitzahlen', -67 => 'Die Prüfziffer der IBAN stimmt, die der Kontonummer nicht', -66 => 'Die Prüfziffer der Kontonummer stimmt, die der IBAN nicht', -65 => 'Es sind nur maximal 500 Slots pro LUT-Datei möglich (Neukompilieren erforderlich)', -64 => 'Initialisierung fehlgeschlagen (init_wait geblockt)', -63 => 'Ein inkrementelles Initialisieren benötigt einen Info-Block in der LUT-Datei', -62 => 'Ein inkrementelles Initialisieren mit einer anderen LUT-Datei ist nicht möglich', -61 => 'Die Funktion ist nur in der Debug-Version vorhanden', -60 => 'Kein Datensatz der LUT-Datei ist aktuell gültig', -59 => 'Der Datensatz ist noch nicht gültig', -58 => 'Der Datensatz ist nicht mehr gültig', -57 => 'Im Gültigkeitsdatum sind Anfangs- und Enddatum vertauscht', -56 => 'Das angegebene Gültigkeitsdatum ist ungültig (Soll: JJJJMMTT-JJJJMMTT)', -55 => 'Der Index für die Filiale ist ungültig', -54 => 'Die Bibliothek wird gerade neu initialisiert', -53 => 'Das Feld BLZ wurde nicht initialisiert', -52 => 'Das Feld Filialen wurde nicht initialisiert', -51 => 'Das Feld Bankname wurde nicht initialisiert', -50 => 'Das Feld PLZ wurde nicht initialisiert', -49 => 'Das Feld Ort wurde nicht initialisiert', -48 => 'Das Feld Kurzname wurde nicht initialisiert', -47 => 'Das Feld PAN wurde nicht initialisiert', -46 => 'Das Feld BIC wurde nicht initialisiert', -45 => 'Das Feld Prüfziffer wurde nicht initialisiert', -44 => 'Das Feld NR wurde nicht initialisiert', -43 => 'Das Feld Änderung wurde nicht initialisiert', -42 => 'Das Feld Löschung wurde nicht initialisiert', -41 => 'Das Feld Nachfolge-BLZ wurde nicht initialisiert', -40 => 'die Programmbibliothek wurde noch nicht initialisiert', -39 => 'der Block mit der Filialenanzahl fehlt in der LUT-Datei', -38 => 'es wurden nicht alle Blocks geladen', -37 => 'Buffer error in den ZLIB Routinen', -36 => 'Memory error in den ZLIB-Routinen', -35 => 'Datenfehler im komprimierten LUT-Block', -34 => 'Der Block ist nicht in der LUT-Datei enthalten', -33 => 'Fehler beim Dekomprimieren eines LUT-Blocks', -32 => 'Fehler beim Komprimieren eines LUT-Blocks', -31 => 'Die LUT-Datei ist korrumpiert', -30 => 'Im Inhaltsverzeichnis der LUT-Datei ist kein Slot mehr frei', -29 => 'Die (Unter)Methode ist nicht definiert', -28 => 'Der benötigte Programmteil wurde beim Kompilieren deaktiviert', -27 => 'Die Versionsnummer für die LUT-Datei ist ungültig', -26 => 'ungültiger Prüfparameter (erste zu prüfende Stelle)', -25 => 'ungültiger Prüfparameter (Anzahl zu prüfender Stellen)', -24 => 'ungültiger Prüfparameter (Position der Prüfziffer)', -23 => 'ungültiger Prüfparameter (Wichtung)', -22 => 'ungültiger Prüfparameter (Rechenmethode)', -21 => 'Problem beim Initialisieren der globalen Variablen', -20 => 'Prüfsummenfehler in der blz.lut Datei', -19 => 'falsch (die BLZ wurde außerdem gelöscht)', -18 => 'ok, ohne Prüfung (die BLZ wurde allerdings gelöscht)', -17 => 'ok (die BLZ wurde allerdings gelöscht)', -16 => 'die Bankleitzahl wurde gelöscht', -15 => 'Fehler in der blz.txt Datei (falsche Zeilenlänge)', -14 => 'undefinierte Funktion; die library wurde mit THREAD_SAFE=0 kompiliert', -13 => 'schwerer Fehler im Konto_check-Modul', -12 => 'ein Konto muß zwischen 1 und 10 Stellen haben', -11 => 'kann Datei nicht schreiben', -10 => 'kann Datei nicht lesen', -9 => 'kann keinen Speicher allokieren', -8 => 'die blz.txt Datei wurde nicht gefunden', -7 => 'die blz.lut Datei ist inkosistent/ungültig', -6 => 'die blz.lut Datei wurde nicht gefunden', -5 => 'die Bankleitzahl ist nicht achtstellig', -4 => 'die Bankleitzahl ist ungültig', -3 => 'das Konto ist ungültig', -2 => 'die Methode wurde noch nicht implementiert', -1 => 'die Methode ist nicht definiert', 0 => 'falsch', 1 => 'ok', 2 => 'ok, ohne Prüfung', 3 => 'ok; für den Test wurde eine Test-BLZ verwendet', 4 => 'Der Datensatz ist aktuell gültig', 5 => 'Der Datensatz enthält kein Gültigkeitsdatum', 6 => 'Die Datei ist im alten LUT-Format (1.0/1.1)', 7 => 'ok; es wurde allerdings eine LUT-Datei im alten Format (1.0/1.1) generiert', 8 => 'In der DTAUS-Datei wurden kleinere Fehler gefunden', 9 => 'ok; es wurde allerdings eine LUT-Datei im Format 2.0 generiert (Compilerswitch)', 10 => 'ok; der Wert für den Schlüssel wurde überschrieben', 11 => 'wahrscheinlich ok; die Kontonummer kann allerdings (nicht angegebene) Unterkonten enthalten', 12 => 'wahrscheinlich ok; die Kontonummer enthält eine Unterkontonummer', 13 => 'ok; die Anzahl Slots wurde auf SLOT_CNT_MIN hochgesetzt', 'KTO_CHECK_UNSUPPORTED_COMPRESSION' => 'die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden', 'KTO_CHECK_INVALID_COMPRESSION_LIB' => 'der angegebene Wert für die Default-Kompression ist ungültig', 'OK_UNTERKONTO_ATTACHED' => 'wahrscheinlich OK; es wurde allerdings ein (weggelassenes) Unterkonto angefügt', 'KTO_CHECK_DEFAULT_BLOCK_INVALID' => 'Ungültige Signatur im Default-Block', 'KTO_CHECK_DEFAULT_BLOCK_FULL' => 'Die maximale Anzahl Einträge für den Default-Block wurde erreicht', 'KTO_CHECK_NO_DEFAULT_BLOCK' => 'Es wurde noch kein Default-Block angelegt', 'KTO_CHECK_KEY_NOT_FOUND' => 'Der angegebene Schlüssel wurde im Default-Block nicht gefunden', 'LUT2_NO_LONGER_VALID_BETTER' => 'Beide Datensätze sind nicht mehr gültig; dieser ist aber jünger als der andere', 'DTA_SRC_KTO_DIFFERENT' => 'Die Auftraggeber-Kontonummer des C-Datensatzes unterscheidet sich von der des A-Satzes', 'DTA_SRC_BLZ_DIFFERENT' => 'Die Auftraggeber-Bankleitzahl des C-Datensatzes unterscheidet sich von der des A-Satzes', 'DTA_CR_LF_IN_FILE' => 'Die DTA-Datei enthält (unzulässige) Zeilenvorschübe', 'DTA_INVALID_C_EXTENSION' => 'ungültiger Typ bei einem Erweiterungsblock eines C-Datensatzes', 'DTA_FOUND_SET_A_NOT_C' => 'Es wurde ein C-Datensatz erwartet, jedoch ein E-Satz gefunden', 'DTA_FOUND_SET_E_NOT_C' => 'Es wurde ein C-Datensatz erwartet, jedoch ein E-Satz gefunden', 'DTA_FOUND_SET_C_NOT_EXTENSION' => 'Es wurde ein C-Datensatzerweiterung erwartet, jedoch ein C-Satz gefunden', 'DTA_FOUND_SET_E_NOT_EXTENSION' => 'Es wurde ein C-Datensatzerweiterung erwartet, jedoch ein E-Satz gefunden', 'DTA_INVALID_EXTENSION_COUNT' => 'Die Anzahl Erweiterungen paßt nicht zur Blocklänge', 'DTA_INVALID_NUM' => 'Ungültige Zeichen in numerischem Feld', 'DTA_INVALID_CHARS' => 'Ungültige Zeichen im Textfeld', 'DTA_CURRENCY_NOT_EURO' => 'Die Währung des DTA-Datensatzes ist nicht Euro', 'DTA_EMPTY_AMOUNT' => 'In einem DTA-Datensatz wurde kein Betrag angegeben', 'DTA_INVALID_TEXT_KEY' => 'Ungültiger Textschlüssel in der DTA-Datei', 'DTA_EMPTY_STRING' => 'Für ein (alphanumerisches) Feld wurde kein Wert angegeben', 'DTA_MARKER_A_NOT_FOUND' => 'Die Startmarkierung des A-Datensatzes wurde nicht gefunden', 'DTA_MARKER_C_NOT_FOUND' => 'Die Startmarkierung des C-Datensatzes wurde nicht gefunden', 'DTA_MARKER_E_NOT_FOUND' => 'Die Startmarkierung des E-Datensatzes wurde nicht gefunden', 'DTA_INVALID_SET_C_LEN' => 'Die Satzlänge eines C-Datensatzes muß zwischen 187 und 622 Byte betragen', 'DTA_INVALID_SET_LEN' => 'Die Satzlänge eines A- bzw. E-Satzes muß 128 Byte betragen', 'DTA_WAERUNG_NOT_EURO' => 'als Währung in der DTA-Datei ist nicht Euro eingetragen', 'DTA_INVALID_ISSUE_DATE' => 'das Ausführungsdatum ist zu früh oder zu spät (max. 15 Tage nach Dateierstellung)', 'DTA_INVALID_DATE' => 'das Datum ist ungültig', 'DTA_FORMAT_ERROR' => 'Formatfehler in der DTA-Datei', 'DTA_FILE_WITH_ERRORS' => 'die DTA-Datei enthält Fehler', 'INVALID_SEARCH_RANGE' => 'ungültiger Suchbereich angegeben (unten>oben)', 'KEY_NOT_FOUND' => 'Die Suche lieferte kein Ergebnis', 'BAV_FALSE' => 'BAV denkt, das Konto ist falsch (konto_check hält es für richtig)', 'LUT2_NO_USER_BLOCK' => 'User-Blocks müssen einen Typ > 500 haben', 'INVALID_SET' => 'für ein LUT-Set sind nur die Werte 0, 1 oder 2 möglich', 'NO_GERMAN_BIC' => 'Ein Konto kann kann nur für deutsche Banken geprüft werden', 'IPI_CHECK_INVALID_LENGTH' => 'Der zu validierende strukturierete Verwendungszweck muß genau 20 Zeichen enthalten', 'IPI_INVALID_CHARACTER' => 'Im strukturierten Verwendungszweck dürfen nur alphanumerische Zeichen vorkommen', 'IPI_INVALID_LENGTH' => 'Die Länge des IPI-Verwendungszwecks darf maximal 18 Byte sein', 'LUT1_FILE_USED' => 'Es wurde eine LUT-Datei im Format 1.0/1.1 geladen', 'MISSING_PARAMETER' => 'Bei der Kontoprüfung fehlt ein notwendiger Parameter (BLZ oder Konto)', 'IBAN2BIC_ONLY_GERMAN' => 'Die Funktion iban2bic() arbeitet nur mit deutschen Bankleitzahlen', 'IBAN_OK_KTO_NOT' => 'Die Prüfziffer der IBAN stimmt, die der Kontonummer nicht', 'KTO_OK_IBAN_NOT' => 'Die Prüfziffer der Kontonummer stimmt, die der IBAN nicht', 'TOO_MANY_SLOTS' => 'Es sind nur maximal 500 Slots pro LUT-Datei möglich (Neukompilieren erforderlich)', 'INIT_FATAL_ERROR' => 'Initialisierung fehlgeschlagen (init_wait geblockt)', 'INCREMENTAL_INIT_NEEDS_INFO' => 'Ein inkrementelles Initialisieren benötigt einen Info-Block in der LUT-Datei', 'INCREMENTAL_INIT_FROM_DIFFERENT_FILE' => 'Ein inkrementelles Initialisieren mit einer anderen LUT-Datei ist nicht möglich', 'DEBUG_ONLY_FUNCTION' => 'Die Funktion ist nur in der Debug-Version vorhanden', 'LUT2_INVALID' => 'Kein Datensatz der LUT-Datei ist aktuell gültig', 'LUT2_NOT_YET_VALID' => 'Der Datensatz ist noch nicht gültig', 'LUT2_NO_LONGER_VALID' => 'Der Datensatz ist nicht mehr gültig', 'LUT2_GUELTIGKEIT_SWAPPED' => 'Im Gültigkeitsdatum sind Anfangs- und Enddatum vertauscht', 'LUT2_INVALID_GUELTIGKEIT' => 'Das angegebene Gültigkeitsdatum ist ungültig (Soll: JJJJMMTT-JJJJMMTT)', 'LUT2_INDEX_OUT_OF_RANGE' => 'Der Index für die Filiale ist ungültig', 'LUT2_INIT_IN_PROGRESS' => 'Die Bibliothek wird gerade neu initialisiert', 'LUT2_BLZ_NOT_INITIALIZED' => 'Das Feld BLZ wurde nicht initialisiert', 'LUT2_FILIALEN_NOT_INITIALIZED' => 'Das Feld Filialen wurde nicht initialisiert', 'LUT2_NAME_NOT_INITIALIZED' => 'Das Feld Bankname wurde nicht initialisiert', 'LUT2_PLZ_NOT_INITIALIZED' => 'Das Feld PLZ wurde nicht initialisiert', 'LUT2_ORT_NOT_INITIALIZED' => 'Das Feld Ort wurde nicht initialisiert', 'LUT2_NAME_KURZ_NOT_INITIALIZED' => 'Das Feld Kurzname wurde nicht initialisiert', 'LUT2_PAN_NOT_INITIALIZED' => 'Das Feld PAN wurde nicht initialisiert', 'LUT2_BIC_NOT_INITIALIZED' => 'Das Feld BIC wurde nicht initialisiert', 'LUT2_PZ_NOT_INITIALIZED' => 'Das Feld Prüfziffer wurde nicht initialisiert', 'LUT2_NR_NOT_INITIALIZED' => 'Das Feld NR wurde nicht initialisiert', 'LUT2_AENDERUNG_NOT_INITIALIZED' => 'Das Feld Änderung wurde nicht initialisiert', 'LUT2_LOESCHUNG_NOT_INITIALIZED' => 'Das Feld Löschung wurde nicht initialisiert', 'LUT2_NACHFOLGE_BLZ_NOT_INITIALIZED' => 'Das Feld Nachfolge-BLZ wurde nicht initialisiert', 'LUT2_NOT_INITIALIZED' => 'die Programmbibliothek wurde noch nicht initialisiert', 'LUT2_FILIALEN_MISSING' => 'der Block mit der Filialenanzahl fehlt in der LUT-Datei', 'LUT2_PARTIAL_OK' => 'es wurden nicht alle Blocks geladen', 'LUT2_Z_BUF_ERROR' => 'Buffer error in den ZLIB Routinen', 'LUT2_Z_MEM_ERROR' => 'Memory error in den ZLIB-Routinen', 'LUT2_Z_DATA_ERROR' => 'Datenfehler im komprimierten LUT-Block', 'LUT2_BLOCK_NOT_IN_FILE' => 'Der Block ist nicht in der LUT-Datei enthalten', 'LUT2_DECOMPRESS_ERROR' => 'Fehler beim Dekomprimieren eines LUT-Blocks', 'LUT2_COMPRESS_ERROR' => 'Fehler beim Komprimieren eines LUT-Blocks', 'LUT2_FILE_CORRUPTED' => 'Die LUT-Datei ist korrumpiert', 'LUT2_NO_SLOT_FREE' => 'Im Inhaltsverzeichnis der LUT-Datei ist kein Slot mehr frei', 'UNDEFINED_SUBMETHOD' => 'Die (Unter)Methode ist nicht definiert', 'EXCLUDED_AT_COMPILETIME' => 'Der benötigte Programmteil wurde beim Kompilieren deaktiviert', 'INVALID_LUT_VERSION' => 'Die Versionsnummer für die LUT-Datei ist ungültig', 'INVALID_PARAMETER_STELLE1' => 'ungültiger Prüfparameter (erste zu prüfende Stelle)', 'INVALID_PARAMETER_COUNT' => 'ungültiger Prüfparameter (Anzahl zu prüfender Stellen)', 'INVALID_PARAMETER_PRUEFZIFFER' => 'ungültiger Prüfparameter (Position der Prüfziffer)', 'INVALID_PARAMETER_WICHTUNG' => 'ungültiger Prüfparameter (Wichtung)', 'INVALID_PARAMETER_METHODE' => 'ungültiger Prüfparameter (Rechenmethode)', 'LIBRARY_INIT_ERROR' => 'Problem beim Initialisieren der globalen Variablen', 'LUT_CRC_ERROR' => 'Prüfsummenfehler in der blz.lut Datei', 'FALSE_GELOESCHT' => 'falsch (die BLZ wurde außerdem gelöscht)', 'OK_NO_CHK_GELOESCHT' => 'ok, ohne Prüfung (die BLZ wurde allerdings gelöscht)', 'OK_GELOESCHT' => 'ok (die BLZ wurde allerdings gelöscht)', 'BLZ_GELOESCHT' => 'die Bankleitzahl wurde gelöscht', 'INVALID_BLZ_FILE' => 'Fehler in der blz.txt Datei (falsche Zeilenlänge)', 'LIBRARY_IS_NOT_THREAD_SAFE' => 'undefinierte Funktion; die library wurde mit THREAD_SAFE=0 kompiliert', 'FATAL_ERROR' => 'schwerer Fehler im Konto_check-Modul', 'INVALID_KTO_LENGTH' => 'ein Konto muß zwischen 1 und 10 Stellen haben', 'FILE_WRITE_ERROR' => 'kann Datei nicht schreiben', 'FILE_READ_ERROR' => 'kann Datei nicht lesen', 'ERROR_MALLOC' => 'kann keinen Speicher allokieren', 'NO_BLZ_FILE' => 'die blz.txt Datei wurde nicht gefunden', 'INVALID_LUT_FILE' => 'die blz.lut Datei ist inkosistent/ungültig', 'NO_LUT_FILE' => 'die blz.lut Datei wurde nicht gefunden', 'INVALID_BLZ_LENGTH' => 'die Bankleitzahl ist nicht achtstellig', 'INVALID_BLZ' => 'die Bankleitzahl ist ungültig', 'INVALID_KTO' => 'das Konto ist ungültig', 'NOT_IMPLEMENTED' => 'die Methode wurde noch nicht implementiert', 'NOT_DEFINED' => 'die Methode ist nicht definiert', 'FALSE' => 'falsch', 'OK' => 'ok', 'OK_NO_CHK' => 'ok, ohne Prüfung', 'OK_TEST_BLZ_USED' => 'ok; für den Test wurde eine Test-BLZ verwendet', 'LUT2_VALID' => 'Der Datensatz ist aktuell gültig', 'LUT2_NO_VALID_DATE' => 'Der Datensatz enthält kein Gültigkeitsdatum', 'LUT1_SET_LOADED' => 'Die Datei ist im alten LUT-Format (1.0/1.1)', 'LUT1_FILE_GENERATED' => 'ok; es wurde allerdings eine LUT-Datei im alten Format (1.0/1.1) generiert', 'DTA_FILE_WITH_WARNINGS' => 'In der DTAUS-Datei wurden kleinere Fehler gefunden', 'LUT_V2_FILE_GENERATED' => 'ok; es wurde allerdings eine LUT-Datei im Format 2.0 generiert (Compilerswitch)', 'KTO_CHECK_VALUE_REPLACED' => 'ok; der Wert für den Schlüssel wurde überschrieben', 'OK_UNTERKONTO_POSSIBLE' => 'wahrscheinlich ok; die Kontonummer kann allerdings (nicht angegebene) Unterkonten enthalten', 'OK_UNTERKONTO_GIVEN' => 'wahrscheinlich ok; die Kontonummer enthält eine Unterkontonummer', 'OK_SLOT_CNT_MIN_USED' => 'ok; die Anzahl Slots wurde auf SLOT_CNT_MIN hochgesetzt', ); %Business::KontoCheck::kto_retval_kurz = ( -112 => 'KTO_CHECK_UNSUPPORTED_COMPRESSION', -111 => 'KTO_CHECK_INVALID_COMPRESSION_LIB', -110 => 'OK_UNTERKONTO_ATTACHED', -109 => 'KTO_CHECK_DEFAULT_BLOCK_INVALID', -108 => 'KTO_CHECK_DEFAULT_BLOCK_FULL', -107 => 'KTO_CHECK_NO_DEFAULT_BLOCK', -106 => 'KTO_CHECK_KEY_NOT_FOUND', -105 => 'LUT2_NO_LONGER_VALID_BETTER', -104 => 'DTA_SRC_KTO_DIFFERENT', -103 => 'DTA_SRC_BLZ_DIFFERENT', -102 => 'DTA_CR_LF_IN_FILE', -101 => 'DTA_INVALID_C_EXTENSION', -100 => 'DTA_FOUND_SET_A_NOT_C', -99 => 'DTA_FOUND_SET_E_NOT_C', -98 => 'DTA_FOUND_SET_C_NOT_EXTENSION', -97 => 'DTA_FOUND_SET_E_NOT_EXTENSION', -96 => 'DTA_INVALID_EXTENSION_COUNT', -95 => 'DTA_INVALID_NUM', -94 => 'DTA_INVALID_CHARS', -93 => 'DTA_CURRENCY_NOT_EURO', -92 => 'DTA_EMPTY_AMOUNT', -91 => 'DTA_INVALID_TEXT_KEY', -90 => 'DTA_EMPTY_STRING', -89 => 'DTA_MARKER_A_NOT_FOUND', -88 => 'DTA_MARKER_C_NOT_FOUND', -87 => 'DTA_MARKER_E_NOT_FOUND', -86 => 'DTA_INVALID_SET_C_LEN', -85 => 'DTA_INVALID_SET_LEN', -84 => 'DTA_WAERUNG_NOT_EURO', -83 => 'DTA_INVALID_ISSUE_DATE', -82 => 'DTA_INVALID_DATE', -81 => 'DTA_FORMAT_ERROR', -80 => 'DTA_FILE_WITH_ERRORS', -79 => 'INVALID_SEARCH_RANGE', -78 => 'KEY_NOT_FOUND', -77 => 'BAV_FALSE', -76 => 'LUT2_NO_USER_BLOCK', -75 => 'INVALID_SET', -74 => 'NO_GERMAN_BIC', -73 => 'IPI_CHECK_INVALID_LENGTH', -72 => 'IPI_INVALID_CHARACTER', -71 => 'IPI_INVALID_LENGTH', -70 => 'LUT1_FILE_USED', -69 => 'MISSING_PARAMETER', -68 => 'IBAN2BIC_ONLY_GERMAN', -67 => 'IBAN_OK_KTO_NOT', -66 => 'KTO_OK_IBAN_NOT', -65 => 'TOO_MANY_SLOTS', -64 => 'INIT_FATAL_ERROR', -63 => 'INCREMENTAL_INIT_NEEDS_INFO', -62 => 'INCREMENTAL_INIT_FROM_DIFFERENT_FILE', -61 => 'DEBUG_ONLY_FUNCTION', -60 => 'LUT2_INVALID', -59 => 'LUT2_NOT_YET_VALID', -58 => 'LUT2_NO_LONGER_VALID', -57 => 'LUT2_GUELTIGKEIT_SWAPPED', -56 => 'LUT2_INVALID_GUELTIGKEIT', -55 => 'LUT2_INDEX_OUT_OF_RANGE', -54 => 'LUT2_INIT_IN_PROGRESS', -53 => 'LUT2_BLZ_NOT_INITIALIZED', -52 => 'LUT2_FILIALEN_NOT_INITIALIZED', -51 => 'LUT2_NAME_NOT_INITIALIZED', -50 => 'LUT2_PLZ_NOT_INITIALIZED', -49 => 'LUT2_ORT_NOT_INITIALIZED', -48 => 'LUT2_NAME_KURZ_NOT_INITIALIZED', -47 => 'LUT2_PAN_NOT_INITIALIZED', -46 => 'LUT2_BIC_NOT_INITIALIZED', -45 => 'LUT2_PZ_NOT_INITIALIZED', -44 => 'LUT2_NR_NOT_INITIALIZED', -43 => 'LUT2_AENDERUNG_NOT_INITIALIZED', -42 => 'LUT2_LOESCHUNG_NOT_INITIALIZED', -41 => 'LUT2_NACHFOLGE_BLZ_NOT_INITIALIZED', -40 => 'LUT2_NOT_INITIALIZED', -39 => 'LUT2_FILIALEN_MISSING', -38 => 'LUT2_PARTIAL_OK', -37 => 'LUT2_Z_BUF_ERROR', -36 => 'LUT2_Z_MEM_ERROR', -35 => 'LUT2_Z_DATA_ERROR', -34 => 'LUT2_BLOCK_NOT_IN_FILE', -33 => 'LUT2_DECOMPRESS_ERROR', -32 => 'LUT2_COMPRESS_ERROR', -31 => 'LUT2_FILE_CORRUPTED', -30 => 'LUT2_NO_SLOT_FREE', -29 => 'UNDEFINED_SUBMETHOD', -28 => 'EXCLUDED_AT_COMPILETIME', -27 => 'INVALID_LUT_VERSION', -26 => 'INVALID_PARAMETER_STELLE1', -25 => 'INVALID_PARAMETER_COUNT', -24 => 'INVALID_PARAMETER_PRUEFZIFFER', -23 => 'INVALID_PARAMETER_WICHTUNG', -22 => 'INVALID_PARAMETER_METHODE', -21 => 'LIBRARY_INIT_ERROR', -20 => 'LUT_CRC_ERROR', -19 => 'FALSE_GELOESCHT', -18 => 'OK_NO_CHK_GELOESCHT', -17 => 'OK_GELOESCHT', -16 => 'BLZ_GELOESCHT', -15 => 'INVALID_BLZ_FILE', -14 => 'LIBRARY_IS_NOT_THREAD_SAFE', -13 => 'FATAL_ERROR', -12 => 'INVALID_KTO_LENGTH', -11 => 'FILE_WRITE_ERROR', -10 => 'FILE_READ_ERROR', -9 => 'ERROR_MALLOC', -8 => 'NO_BLZ_FILE', -7 => 'INVALID_LUT_FILE', -6 => 'NO_LUT_FILE', -5 => 'INVALID_BLZ_LENGTH', -4 => 'INVALID_BLZ', -3 => 'INVALID_KTO', -2 => 'NOT_IMPLEMENTED', -1 => 'NOT_DEFINED', 0 => 'FALSE', 1 => 'OK', 2 => 'OK_NO_CHK', 3 => 'OK_TEST_BLZ_USED', 4 => 'LUT2_VALID', 5 => 'LUT2_NO_VALID_DATE', 6 => 'LUT1_SET_LOADED', 7 => 'LUT1_FILE_GENERATED', 8 => 'DTA_FILE_WITH_WARNINGS', 9 => 'LUT_V2_FILE_GENERATED', 10 => 'KTO_CHECK_VALUE_REPLACED', 11 => 'OK_UNTERKONTO_POSSIBLE', 12 => 'OK_UNTERKONTO_GIVEN', 13 => 'OK_SLOT_CNT_MIN_USED', ); END{ lut_cleanup(); } 1; __END__