
import java.math.*;

class IBAN
{ static SimpleInput in;
  static String kontoNr;
  static String blz;
  static String laendercode;
  static char laendercodeBuchstabe1, laendercodeBuchstabe2;
  static int  laendercodeBuchstabe1nr, laendercodeBuchstabe2nr;
  static String bban;
  static String laenderkennung; // "131400";  // DE  A=1 D=4 , 4+9 = 13
  static String pruefwert;
  static BigInteger big, bigrest;
  static int rest, subergebnis, endergebnis;
  static String pruefziffern;
  static String iban;
  
  public static boolean enthaeltNurZiffern(String s)
  { boolean erg = true;
    for (int i =0; i<s.length() ; i++) {
         if (!Character.isDigit(s.charAt(i))) {
            erg = false;
         } // end of if
    } // end of for
    return erg;
  }
  
  public static boolean enthaeltNurBuchstaben(String s)
  { boolean erg = true;
    for (int i =0; i<s.length() ; i++) {
         if (!Character.isLetter(s.charAt(i))) {
            erg = false;
         } // end of if
    } // end of for
    return erg;
  }
  
  public static void main(String[] arg) 
  {
    in = new SimpleInput();
    
    do 
         laendercode     = in.getString("Laenderkennung (DE fuer Deutschland) eingeben!");
    while (laendercode.length() != 2 || !enthaeltNurBuchstaben(laendercode));
    
    laendercodeBuchstabe1 = Character.toUpperCase(laendercode.charAt(0));
    laendercodeBuchstabe2 = Character.toUpperCase(laendercode.charAt(1));
    laendercodeBuchstabe1nr = (int)laendercodeBuchstabe1 - 64; // A --> 1 
    laendercodeBuchstabe2nr = (int)laendercodeBuchstabe2 - 64; // A --> 1 
    laendercodeBuchstabe1nr = laendercodeBuchstabe1nr + 9;     // + 9 macht zweistellig 
    laendercodeBuchstabe2nr = laendercodeBuchstabe2nr + 9;     //      " 
    laenderkennung = "" + laendercodeBuchstabe1nr + laendercodeBuchstabe2nr + "00";
    
    do 
         blz     = in.getString("BLZ eingeben!");
    while (blz.length() != 8 || !enthaeltNurZiffern(blz)); 
    
    do
         kontoNr = in.getString("Konto-Nr. eingeben!");
    while (kontoNr.length() > 10 || !enthaeltNurZiffern(kontoNr)); 
    
    while (kontoNr.length() < 10) { 
         kontoNr = "0" + kontoNr;
    } // end of while
    
    bban    = blz + kontoNr;
    pruefwert = bban + laenderkennung;
    big = new BigInteger(pruefwert);
    bigrest = big.remainder(new BigInteger("97"));
    rest = bigrest.intValue();
    System.out.println("Der Rest ist " + rest + ".");
    subergebnis = 98 - rest;
    System.out.println("Subtrahiert von 98 ergibt sich " + subergebnis + ".");
    if (subergebnis < 10) 
         pruefziffern = "0" + subergebnis;
    else 
         pruefziffern = "" + subergebnis;
    System.out.println("Die Pruefziffern sind " + pruefziffern + ".");
         
    iban = "" + laendercodeBuchstabe1 + laendercodeBuchstabe2 + 
           " " + pruefziffern + " " + blz + " " + kontoNr;
    System.out.println("Die IBAN ist " + iban + ".");
          
      
          
  }
}
