[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2009
    Beiträge
    131

    IBAN prüfen / berechnen

    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?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Hier ist die Definition und der Aufbau:
    https://www.iban.de/iban-pruefsumme.html

    Stichwort Modulo 97.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jan 2003
    Beiträge
    746
    Code:
    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

  4. #4
    Registriert seit
    Jun 2009
    Beiträge
    131
    Hallo zusammen,

    vielen Dank für die sehr hilfreichen Antworten!

Similar Threads

  1. qcmdexc prüfen
    By dibe in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 14-09-16, 14:59
  2. Prüfen ob Subsystem aktiv ist
    By msost in forum IBM i Hauptforum
    Antworten: 13
    Letzter Beitrag: 03-09-15, 16:42
  3. Datum berechnen mit CL
    By j.k. in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 15-11-10, 16:31
  4. TCP/IP Port prüfen
    By wdom in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 19-05-03, 13:58
  5. TCP/IP FTP prüfen ob Rechner an ist
    By malzusrex in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 23-07-02, 10:07

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •