Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   IBAN Prüfsumme (https://www.delphipraxis.net/177842-iban-pruefsumme.html)

Willie1 30. Nov 2013 18:24

IBAN Prüfsumme
 
Hallo Leute,
ich will die 2-stellige Prüfzahl für das neue SEPA-Überweisungssystem in der der IBAN ermitteln.
Das sieht so aus:
DEppbbbbbbbbkkkkkkkkkk

DE = Deutschland
pp = zu ermittelnde Prüfzahl
b... = 8-stellige (alte) Bankleitzahl
k... = 10-stellige Kontonummer evt. von links mit 0 auffüllen.

Hie Methode findet ihr hier: http://www.pruefziffernberechnung.de/I/IBAN.shtml

Hier ist mein Quelltext:
Delphi-Quellcode:
procedure TForm1.btmBerechneClick(Sender: TObject);
var
  IBAN, Ps: string;
  IBANint64: int64;
  Rest: Integer;

  function LCinZahl(LC: string): string;
  var
    i: Integer;
  begin
    Result:='';
    for i:=1 to 2 do Result:=Result + IntToStr(Ord(LC[i])-55);
  end;

begin
  if (Length(ledLC.Text) < 2) or (Length(ledBLZ.Text) < 8) or (Length(ledKTN.Text) < 10) then
  begin
    beep;
    ledLC.SetFocus;
  end;
  Ps:=LCinZahl(ledLC.Text);
  IBAN:=ledBLZ.Text + ledKTN.Text + Ps + '00';
  IBANint64:=StrToInt64(IBAN);
  Rest:=IBANint64 mod 97;
  Rest:=98 - 10;
  Ps:=IntToStr(Rest); if Rest < 10 then Ps:='0'+Ps;
  IBAN:=ledLC.Text + Ps + ledBLZ.Text + ledKTN.Text;
  ledIBAN.Text:=IBAN;
end;
Das Ganze scheitert an der viel zu großen Zahl IBANint64, die selbst für 64-Bit zu groß ist!
Wie komme ich witer, wie errechnen die Banken die Prüfzahl?

Gruß Willie.

Mathematiker 30. Nov 2013 18:33

AW: IBAN Prüfsumme
 
Hallo,
folgende Funktion ermöglicht die Konstruktion einer deutschen IBAN.
Delphi-Quellcode:
//BankCode ... Bankleitzahl
//Account ... Kontonummer
FUNCTION CreateGermanIBAN(Const BankCode,Account:String):String;
var cs, i,cc:integer; s:string;
begin
    if (Length(BankCode)<>8) or (Length(Account)<>10) then
    begin
      result:='';
      Exit;
    end;
    s:=BankCode+Account+'131400'; // 131400 = 'DE00'
    cs:=0;
    for i:=1 to Length(s) do begin
       cs:=(cs*10+Ord(s[i])-Ord('0')) mod 97;
    end;
    cc:=98-cs;
    if cc<2 then inc(cc,97); // 00-->97, 01--> 98
    result:='DE00';
    result[3]:=Chr(cc div 10+Ord('0'));
    result[4]:=Chr(cc mod 10+Ord('0'));
    result:=result+BankCode+Account;
end;
Ist Account kürzer als 10 Zeichen, müssen führende Nullen angefügt werden.

Beste Grüße
Mathematiker

Willie1 30. Nov 2013 18:52

AW: IBAN Prüfsumme
 
Vielen Dank an den Mathematiker. Ich habe es sofort mit den eigenen Kontonummern gechekt.

Schönen Abend
Willie.

dataspider 30. Nov 2013 19:18

AW: IBAN Prüfsumme
 
Zitat:

Zitat von Mathematiker (Beitrag 1238002)
Ist Account kürzer als 10 Zeichen, müssen führende Nullen angefügt werden.

Nur am Rande...
Die häufigste Abweichung bei den Prüfziffer - Verfahren

13 - Commerzbank, SEB...
63 Deutsche Bank...
C7 Norisbank

Hier sind 7 - stellige Kontonummern Unterkonten und erhalten nur eine führende Null und 2 am Ende.

Die anderen 1000 Regeln spar ich mir, da hat sich ja schon jemand hier im Forum die Arbeit gemacht!

Frank

arnof 30. Nov 2013 21:23

AW: IBAN Prüfsumme
 
Zitat:

Zitat von dataspider (Beitrag 1238008)
Zitat:

Zitat von Mathematiker (Beitrag 1238002)
Ist Account kürzer als 10 Zeichen, müssen führende Nullen angefügt werden.

Nur am Rande...
Die häufigste Abweichung bei den Prüfziffer - Verfahren

13 - Commerzbank, SEB...
63 Deutsche Bank...
C7 Norisbank

Hier sind 7 - stellige Kontonummern Unterkonten und erhalten nur eine führende Null und 2 am Ende.

Die anderen 1000 Regeln spar ich mir, da hat sich ja schon jemand hier im Forum die Arbeit gemacht!

Frank

Ja, wenn man die Werbung der Bundesbank zur SEPA Umstellung und zur IBAN Berechnung sieht, dann kann ich auch nur noch lächeln :pale:

Sir Rufo 30. Nov 2013 21:53

AW: IBAN Prüfsumme
 
Zitat:

Zitat von Willie1 (Beitrag 1238000)
...
Hie Methode findet ihr hier: http://www.pruefziffernberechnung.de/I/IBAN.shtml
...
Das Ganze scheitert an der viel zu großen Zahl IBANint64, die selbst für 64-Bit zu groß ist!
Wie komme ich witer, wie errechnen die Banken die Prüfzahl?

Hast du dir deinen Link selber auch mal angesehen?
Zitat:

Da viele Programme und Rechner nicht mit max. 36-stelligen Zahlen rechnen können, kann eine Hilfsmethode zur Restbestimmung verwendet werden, bei der die Zahlenfolge in Teile zu je 9 oder 18 Stellen aufgeteilt wird:
<jetzt folgt eine Beschreibung wie>
:roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz