IBAN Rechner
Hallo.
Ich möchte in meiner PKV Datenbank einen IBAN Rechner aus Kontonummer und BLZ einbauen und dann die erzeugte IBAN in meine Rechnungsmaske übertragen.
Wie stelle ich das an?
Ich weiß, dass die IBAN einmal aus der Länderkennung (DE für Deutschland), dann aus einer zweistelligen Prüfziffer, der BLZ und der Kontonummer mit führenden Nullen besteht. Am Ende sind es 22 Stellen.
Hat jemand die Idee, wie man dafür in Ninox ein Script erstellen kann und einem FX-Feld zuordnen kann?
LG
Peer
12 Antworten
-
Ich habe gerade noch recherchiert, dass die Länge Länderabhängig ist. Mist.
Versuchen wir es erstmal für Deutschland.
Ich habe die Kontonummer zu allererst mit einen "Hilfs"FXFeld mit führenden Nullen erzeugt [format(IBAN,"0000000000")]
-
Ich habe im Bezug zu der Prüfziffer folgenden Link gefunden.
https://www.sparkonto.org/manuelles-berechnen-der-iban-pruefziffer-sepa/
Bis jetzt habe ich in einem FX-Feld gemacht ...
let myPruf := "00"; 'Anfangsprüfvariable
let Code1 := substr('Länderkürzel', 0, 1);
let Code2 := substr('Länderkürzel', 1, 2);
let myPrufZiff := BLZ + 'Voll-Kontonummer' + Code1 + Code2 + myPruf;
myPrufZiff 'Ausgabe der Variable zum Prüfen des Ergebnisses
-
Inzwischen habe ich die Lösung gefunden.
Sie ist zwar kein Meisterwerk der Programmierkunst, erfüllt aber erstmal den Zweck.
Sicher kann man es schöner und einfacher schreiben und ich bin dankbar für jeden Tipp.
let myPruf := "00";
let Code1 := substr('Länderkürzel', 0, 1);
let Code2 := substr('Länderkürzel', 1, 2);
let Code3 := "1314";
let myPrufZiff := BLZ + 'Voll-Kontonummer' + Code3 + myPruf;
let Block1 := number(substr(myPrufZiff, 0, 9));
let modBlock1 := Block1 % 97;
let Block2 := modBlock1 + substr(myPrufZiff, 9, 7);
let numbBlock2 := number(Block2);
let modBlock2 := numbBlock2 % 97;
let Block3 := modBlock2 + substr(myPrufZiff, 16, 7);
let numbBlock3 := number(Block3);
let modBlock3 := numbBlock3 % 97;
let Block4 := modBlock3 + substr(myPrufZiff, 23, 1);
let numbBlock4 := number(Block4);
let modBlock4 := numbBlock4 % 97;
let PrZiff := 98 - modBlock4;
PrZiffLG
Peer
-
Hallo.
Ich hoffe, das ich hier nicht AlleinUúnterhalter bin. ;-)
Ich habe in diesem Projekt ein weiteres Problem, dass für die meisten hier kein Kopfzerbrechen auslösen wird, aber ich komme aktuell nicht weiter, weil die NX Programmiersprache und ich noch nicht miteinander klar kommen.
Ich habe eine importierte Tabelle mit allen deutschen BLZ unteranderem mit den Spalten 'Bankleitzahl', 'BIC' und 'Bezeichnung'. Und ich habe eine Tabelle 'IBAN-Rechner'. Beide Tabellen sind nicht miteinander verknüpft.
Nun möchte ich bei Eingabe der 'BLZ' in 'IBAN-Rechner' die Bankleitzahl aus 'BLZ.csv' suchen lassen und die dazugehörige 'Bezeichnung' ins Fx-Feld 'Bank' bzw. 'BIC' von IBAN-Rechner eintragen lassen.
Ich denke, ich brauche eine Select-Anweisung, komme aber aktuell nicht drauf, wie?
LG Peer
-
Hallo Peer,
---
let myBLZ:=BLZ;
first(select 'BLZ.csv' ['Bankleitzahl'=myBLZ])
---
Leo
-
let myBLZ:=BLZ;
(first(select 'BLZ.csv' ['Bankleitzahl'=myBLZ])).Bezeichnung
-
Hallo Leo.
Vielen Dank für deine schnelle Hilfe.
Ich probiere die ganze Zeit mit dieser Syntax, aber wahrscheinlich stehe ich auf dem Schlauch.
Zum Verständnis...
Zweiter Post ist Korretur?
LG
Peer
-
Hallo Peer,
Ja, ich habe vergessen die Bezeichnung hinzufügen
-
Halo, ich habe das mit der IBAN-Berechnung auch mal so ähnlich gemacht (das Ergebnis allerdings in ein Datenfeld geschrieben, damit die Prozedur nicht immer wieder durchgeführt werden muss):
let myRest := "";
let myPZ := "00";
let myLK := substr(upper(trim(LK)), 0, 2);
let myLKZ := "1314";
let myBLZ := replacex(BLZ, "\D", "");
let myKTO := replacex(KTO, "\D", "");
if length(myKTO) < 10 then
myKTO := lpad(myKTO, 10, "0");
end;
let Mod97 := myBLZ + myKTO + myLKZ + myPZ;
let Mod97_1 := number(substr(Mod97, 0, 9));
myRest := format(Mod97_1 % 97, "00");
let Mod97_2 := myRest + substr(Mod97, 9, 7);
myRest := format(number(Mod97_2) % 97, "00");
let Mod97_3 := myRest + substr(Mod97, 16, 7);
myRest := format(number(Mod97_3) % 97, "00");
let Mod97_4 := myRest + substr(Mod97, 23, 7);
myRest := format(number(Mod97_4) % 97, "00");
let myPS := format(98 - number(myRest), "00");
IBAN := myLK + myPS + myBLZ + myKTO
PROBLEM: Bei Einführung der IBAN wurde festgelegt, dass die Nummern nur von den Banken selbst generiert werden dürfen, weil diese zum Teil unterschiedliche Verfahren zur Positionierung der Kontonummer nutzen und sich dadurch die Prüfsummen ändern. Man bekommt nach dem Standard-Schema in Einzelfällen also falsche Ergebnisse.
Auch eine Datei mit allen deutschen BLZ würde also m. E. nur dann helfen, wenn dort das jeweilige Verfahren zum Generieren der IBAN dokumentiert wäre, so dass man obige Berechnung ggf. anpassen könnte. Um nur den Namen des jeweiligen Instituts auszulesen, wie Leo es in seinem Beispiel zeigt, ginge es aber natürlich.
Zum 100-prozentig sicheren Ermitteln der IBAN anhand von BLZ und Kontonummer hilft wahrscheinlich nur eine API-Abfrage entsprechender Web-Services.
-
@Leo.
Danke.
@Copytexter
Ich habe das auch gelesen und ich gebe dir recht. Leider gibt es keine "offizielle" API. Und die BLZ werden alle 3 Monate geändert (gelöscht, angepasst usw.)
Zum Lernen war es aber durchaus hilfreich.
Und deine Zeilen sind meinen ähnlich, nur professioneller.
LG
Peer
-
@ Leo
Die Klammer am Anfang und am Ende kann man auch weglassen. Sie ist nicht nötig, oder?
-
Unter dem Rahmenbedingung, dass sich die häufigsten Bankverbindungen nicht so schnell ändern ist die Wahrscheinlichkeit, dass sich ein Fehler bei der Berechnung einschleicht, verhältnismäßig klein. Es kommt im Zweifel darauf an, welche Bedeutung die IBAN hat. Ich möchte die Berechnung der IBAN dazu nutzen, um meine Eingabe der IBAN des Kunden zu überprüfen. Im Zweifel ergibt sich ein "wahr"-Wert, der eine separate Überprüfung über die im Internet verfügbaren Überprüfungstools erübrigt. Ergibt die Überprüfung jedoch einen "nicht wahr"-Wert, kann der (sonst übliche) Überprüfung erfolgen.
Bankleitzahlentabelle mit 15.000 BLZ sowie Hinweisen zur Prüfziffernberechnung Link
Prüfziffernberechnungsmethoden: Link
Content aside
- vor 2 JahrenZuletzt aktiv
- 12Antworten
- 3043Ansichten
-
1
Folge bereits