Thema: IBANs

Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#16

AW: IBANs

  Alt 14. Jun 2013, 19:07
Einen Fehler glaube ich gefunden zu haben (oder ich stelle mich zu doof an):
Wenn ich IBANS erstellen lasse wird neben der (korrekten) IBAN irgendwie immer ein falscher Bankname/BIC ermittelt?

Kann das jemand nachvollziehen? Ich möchte hier keine BSP-Daten nennen...

P.S.
Die gleiche BLZ in der Suche führt zur richtigen Bank
Würde ich ja gern prüfen, aber ohne irgendeinen weiteren Hinweis, bei welcher Konstellation der Fehler auftritt, ist das kaum möglich.
Was ich brauche, ist die BLZ, bei der der Fehler auftritt, die Kontonummer ist hier irrelevant, weil die BLZ-Daten ausschließlich über die BLZ zugeordnet werden.
Da alle BLZ veröffentlicht werden, kann die ja nicht so fürchterlich geheim sein, oder?

Also nenne doch bitte die BLZ, dann gehe ich dem gerne nach.


Hat sich schon erledigt.
Background:
Die BLZ-Datei enthält zur Zeit 19340 Datensätze, aber "nur" 4069 verschiedene BLZ; es werden also viele BLZ mehrfach genannt.
Außerdem sind in der BLZ-Date alle Daten als Text enthalten. Die Suche nach einer bestimmten BLZ ist deshalb recht "unperformant".
Aus diesem Grund erstelle ich bei Programmstart ein Array of TBankInfoIndex, wobei TBankInfoIndex so definiert ist:
Delphi-Quellcode:
   TBankInfoIndex=Record
      BankCode:integer; // BLZ
      First:integer; // Erster Eintrag für BLZ in BLZ-Datei
      Last:integer; // Letzter Eintrag für BLZ in BLZ-Datei
      Lead:integer; // Der "führende" Eintrag für BLZ (Mark=1)
      FUNCTION Bank:String; // "BLZ = Name, Plz, Ort, Anzahl Stellen"
      FUNCTION CFIndex:integer; // Prüfmethode für Kontonummern
   End;
Dieses Array hat nur 4069 Einträge und enthält die BLZ in numerischer Form.
Die Funktion BankCodeIndex findet in diesem Array jede BLZ mit maximal 12 Zugriffen.

Der Fehler war, dass ich bei der Zuordung der bankbezogenen Daten mit dem Index in dieses Array auf die BLZ-Datei zugegriffen habe. Richtig wäre, zunächst aus TBankInfoIndex[Index] entweder Lead, First, Last oder einen zwischen First und Last liegenden Index zu holen, und mit diesem auf die BLZ Datei zuzugreifen.

Ich habe das korrigiert und ordne jetzt die bankbezogenen Daten via "Lead", also der führenden Stelle einer Bank zu.

An dieser Stelle (mir ist das auch erst jetzt aufgefallen) sei gesagt, dass eine eindeutige Zuordung über die BLZ nicht möglich ist.
Was ich implementieren kann und werde, ist, den Anwender wählen zu lassen, ob er die Daten aus der führenden Stelle oder dem erst- oder letztgenannten Eintrag haben möchte, oder aus allen Einträgen. Letzteres ergibt dann für viele BLZ mehrere Resultate, aber ich sehe im Moment keine Lösung einer eindeutigen Datenzuordnung.

Die Änderung werde ich im Laufe des Abends durchführen und die neue Version hochladen.

NormanNG: Danke für den Hinweis.

Delphi-Quellcode:
FUNCTION BankCodeIndex(blz:integer):integer; overload;
var first,last:integer; p:TPBankInfoIndex;
begin
   first:=0;
   last:=High(BankInfoIndex);
   if last>=0 then
      repeat
         result:=(last+first) shr 1;
         p:=@BankInfoIndex[result];
         if p.BankCode<blz then first:=result+1
            else if p.BankCode>blz then last:=result-1
               else exit;
      until (first>last);
   result:=-1;
end;

FUNCTION BankCodeIndex(const blz:string):integer; overload;
var n:integer;
begin
   if TryStrToInt(blz,n) then result:=BankCodeIndex(n) else result:=-1;
end;

Neue Version in #1
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....

Geändert von Amateurprofi (14. Jun 2013 um 23:11 Uhr) Grund: Hinweis, dass neue Version hochgeladen, hinzugefügt
  Mit Zitat antworten Zitat