PDA

View Full Version : IBAN prüfen / berechnen



msost
16-09-20, 13:34
Hallo zusammen,

ich möchte IBAN-Prüfung und ggf. -Berechnung in ein Programm einbauen. Bevorzugt mit RPGLE oder SQL.

Hat jemand Beispielcode zur Hand?

Welchen (möglichst kostenlosen) Webservice kann man nutzen?

Fuerchau
16-09-20, 14:18
Hier ist die Definition und der Aufbau:
https://www.iban.de/iban-pruefsumme.html

Stichwort Modulo 97.

RobertMack
16-09-20, 15:53
D $Letters S 26A INZ('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
D $LrgNbr S 63S 0 Maximum des Systems
D $Rest S 2S 0
D $PrfZif S 2S 0
D $Pos S 2S 0
D $In S 10I 0
D $Out S 10I 0
D $KTO S 15A
D $NumKto S 15S 0
D $BLZA S 8A
D $STRG S 34A
D $STML S 70A IBAN mit Leerstellen
D DS
D $String1 1 70
D $St1 1 70 DIM(70)
D DS
D $String2 1 70
D $St2 1 70 DIM(70)

C *ENTRY PLIST
C PARM $LR 1
C PARM $IBAN 34 IBAN aus Bildschirm
C PARM $STRG 34 IBAN ohne Leerstel.
C PARM $COMP 1 Ind. IBAN falsch

/Free

//---------------------------------------------------------------------
// P R Ü F R O U T I N E I B A N
//---------------------------------------------------------------------

If $IBAN <> *Blanks;

// Die übergebene IBAN wird links ausgerichtet und ggf. von
// Leerstellen befreit (diverse Schreibweisen, z.B. 'DE12 3456 ...')
$String1 = %Trim($IBAN);
$String2 = *Blanks;
$Out = 1;
For $In = 1 to 34;
If $St1($In) <> *Blank;
$St2($Out) = $St1($In);
$Out += 1;
EndIf;
EndFor;
$STRG = %Trim($String2);

// Erster Schritt: die ersten vier Stellen ans Ende stellen
$String1 = %Trim(%Subst($STRG:5:30)) + %Trim(%Subst($STRG:1:4));

// Zweiter Schritt: Buchstaben durch Ziffern ersetzen
$Out = 1;
For $In = 1 to 34;
Select;
When $St1($In) >= '0' and $St1($In) <= '9';
// Ziffern werden einfach übertragen
$St2($Out) = $St1($In);
$Out += 1;
When $St1($In) >= 'A' and $St1($In) <= 'Z';
// Position des Buchstaben im Alphabet suchen
$Pos = %Scan($St1($In):$Letters:1);
// Position + 9 = Wert (A=10, B=11; Z=35)
$Pos += 9;
// den zweistelligen Wert in zwei Schritten übertragen
$St2($Out) = %Subst(%EditC($Pos:'X'):1:1);
$Out += 1;
$St2($Out) = %Subst(%EditC($Pos:'X'):2:1);
$St2($Out) = %Subst(%EditC($Pos:'X'):2:1);
$Out += 1;
Other;
// Leerstellen und alles andere ignorieren
EndSl;
EndFor;

// Dritter Schritt: Ziffernfolge in numerisches Feld stellen
$LrgNbr = %Dec(%Trim($String2):63:0);

// Vierter Schritt: Rest 1 aus der Division durch 97 = IBAN gültig
If (%Rem($LrgNbr:97)) <> 1;
$COMP = *On;
EndIf;

// Fünfter Schritt: IBAN in Papierform aufbereiten
$STML = %Subst($STRG:1:4)+' '+%Subst($STRG:5:4)+' '+
%Subst($STRG:9:4)+' '+%Subst($STRG:13:4)+' '+
%Subst($STRG:17:4)+' '+%Subst($STRG:21:4)+' '+
%Subst($STRG:25:4)+' '+%Subst($STRG:29:4);

// Letzter Schritt: IBAN je nach Länge ohne Aufbereitung übernehmen
If %Len(%Trim($STML)) < 35;
$IBAN = $STML;
EndIf;

EndIf;

*InLr = $LR;
Return;

/End-Free

msost
17-09-20, 07:50
Hallo zusammen,

vielen Dank für die sehr hilfreichen Antworten!