Business::KontoCheck - Perl extension for checking German and Austrian Bank Account Numbers


Business-KontoCheck documentation  | view source Contained in the Business-KontoCheck distribution.

Index


NAME

Top

Business::KontoCheck - Perl extension for checking German and Austrian Bank Account Numbers

NOTE

Top

Because the module is for use mainly in Germany, the following documentation language is german too.

SYNOPSIS

Top

   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);

DESCRIPTION

Top

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).

EXPORT

Top

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.

DESCRIPTION

Top

  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).

-------------------------------------------------------------------------

SEE ALSO

Top

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.

AUTHOR

Top

Michael Plugge, <m.plugge@hs-mannheim.de>

COPYRIGHT AND LICENSE

Top


Business-KontoCheck documentation  | view source Contained in the Business-KontoCheck distribution.