Konto_check

Bibliothek zum Test deutscher Bankkonten

Überblick Testseite Download BLZ-Daten Beispiele Programme
Konto_check BeispieleBeispiel in C#

Bibliothek zum Test deutscher Bankkonten

Anwendung von konto_check in C#.NET

Dies ist das mini.cs Programm in C#. Ab Version 4.0 von konto_check ist auch das vollständige Interface für C# in der Windows-Distribution enthalten. Dieses ist wesentlich umfangreicher (Überladungen für alle Funktionen mit diversen Parametern) und enthält auch die Schnittstelle zu den Such- und IBAN-Routinen.


/* Dies ist ein kleines Programm das eine Liste von BLZ/Kontonummer-Paaren (durch Blank getrennt)
 * einliest, auf Gültigkeit testet und das Ergebnis in eine Ausgabedatei schreibt. Es ist nur als
 * kleines Beispiel für die Anwendung der konto_check Bibliothek unter C# gedacht; das komplette
 * Interface für die Bibliothek ist natürlich einiges größer und mächtiger.
 */

using System;
using System.IO;
using System.Runtime.InteropServices;

namespace mini
{
   class Program
   {
#region Externals
      [DllImport("konto_check.cdecl.dll", EntryPoint = "kto_check_init_p", CallingConvention = CallingConvention.Cdecl)]
         private static extern Int32 kto_check_init_i(String lutName, Int32 required, Int32 set, Int32 incremental);

      [DllImport("konto_check.cdecl.dll", EntryPoint = "kto_check_blz", CallingConvention = CallingConvention.Cdecl)]
         private static extern Int32 kto_check_blz(String blz, String kto);

      [DllImport("konto_check.cdecl.dll", EntryPoint = "kto_check_retval2txt", CallingConvention=CallingConvention.Cdecl)]
         private static extern IntPtr kto_check_retval2txt(Int32 retval);

      [DllImport("konto_check.cdecl.dll", EntryPoint = "lut_name", CallingConvention = CallingConvention.Cdecl)]
         private static extern IntPtr lut_name(String blz, Int32 zweigstelle, out Int32 retval);

      [DllImport("konto_check.cdecl.dll", EntryPoint = "lut_ort", CallingConvention = CallingConvention.Cdecl)]
         private static extern IntPtr lut_ort(String blz, Int32 zweigstelle, out Int32 retval);

      [DllImport("konto_check.cdecl.dll", EntryPoint = "lut_plz", CallingConvention = CallingConvention.Cdecl)]
         private static extern Int32 lut_plz(String blz, Int32 zweigstelle, out Int32 retval);

      [DllImport("konto_check.cdecl.dll", EntryPoint = "cleanup_kto", CallingConvention=CallingConvention.Cdecl)]
         private static extern void cleanup_kto();
#endregion

#region kc_defs
      static Int32 kto_check_init()
      {
         return kto_check_init_i("", 7, 0, 0);
      }

      static String bank_name(String blz)
      {
         Int32 rv;
         return Marshal.PtrToStringAnsi(lut_name(blz, 0, out rv));
      }

      static Int32 bank_plz(String blz)
      {
         Int32 rv;
         return lut_plz(blz, 0, out rv);
      }

         /* Das Interface ist für alle Funktionen auf die notwendigen Parameter
          * reduziert; man kann es natürlich (mittels Überladung) wesentlich
          * ausführlicher gestalten. Hier als Beispiel noch die Version der
          * Funktion bank_ort() mit allen Parametern.
          */
      static String bank_ort(String blz, Int32 zweigstelle, out Int32 retval)
      {
         return Marshal.PtrToStringAnsi(lut_ort(blz, zweigstelle, out retval));
      }

      static String bank_ort(String blz)
      {
         Int32 rv;
         return Marshal.PtrToStringAnsi(lut_ort(blz, 0, out rv));
      }

      static String retval2txt(Int32 retval)
      {
         return Marshal.PtrToStringAnsi(kto_check_retval2txt(retval));
      }

      static void kto_check_free()
      {
         cleanup_kto();
      }
#endregion

      static void Main(string[] args)
      {
         Int32 retval;
         String blz,kto,s,retval_txt;
         string[] s2;

         if (args.Length < 2){
            Console.WriteLine("Aufruf: mini <eingabedatei> <ausgabedatei>");
            Console.ReadLine();
            return;
         }

         kto_check_init();
         StreamReader input = new StreamReader(args[0]);
         StreamWriter output = new StreamWriter(args[1]);

         while ((s = input.ReadLine()) != null) {
            s2 = s.Split(' ');
            blz = s2[0];
            kto = s2[1];
            retval = kto_check_blz(blz, kto);
            retval_txt=retval2txt(retval);
            if (retval >= 0)
               output.WriteLine(blz+" "+kto+": "+retval_txt+"; "
                     + bank_name(blz)
                     + ", " + bank_plz(blz).ToString()
                     + " " + bank_ort(blz));
            else
               output.WriteLine(blz+" "+kto+": "+retval_txt);
         }
         input.Close();
         output.Close();
         kto_check_free();
      }
   }
}