Compiler-Fehler Iban prüfen

Newbie2

Mitglied
Guten Abend,

ich muss ein Alghorythmus für das prüfen einer Iban entwickeln.
mein Problem ist, die Eingabe erfolgt über Parameter und ich schaffe es auch das die Konsole die Iban auch hintereinander ausgibt.

Java:
public class IbanPruef
{

    public static void main(String[] args)
    {
        String landerkennung = (args[0]);
        String pruefziffer = (args[1]);
        String bban = (args[2]+args[3]+args[4]+args[5]+args[6]);
        int landerkennung1 = 1314;
        String bban2;
        long bban3, bban4;
       
        if (landerkennung == "DE")
        {
            landerkennung = String.valueOf(landerkennung1);
        }
       
        bban2 = bban + landerkennung1 + pruefziffer;
    }

}

bis hierhin ist soweit so gut, nun müsste ich den String bban2 in ein int bzw long umwandeln um damit MOD 97 zu rechnen

Java:
    bban3 = Long.parseLong(bban2);
       
        bban4 =(long) (bban3 % 97);
       
        System.out.println("Die IBAN ist " + bban3);
    }

}

bekommen aber den Fehler
Code:
Exception in thread "main" java.lang.NumberFormatException: For input string: "700901001234567890131408"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Long.parseLong(Unknown Source)
    at java.lang.Long.parseLong(Unknown Source)
    at IbanPruef.main(IbanPruef.java:21)
 
Java:
java.math.BigInteger bban3 = new java.math.BigInteger(bban2);

da zeigt er mir kein fehler mehr an, aber der Operator % soll undefiniert sein
 
Der modulo operator % ist halt nur für primitive, numerische typen definiert.
BigInteger ist aber ein Objekt. Glücklicherweise bietet BigInteger eine passende MEthode an:
bigInt3 = bigInt1.mod(bigInt2)
 
muss der modulo im if zweig sein? oder außerhalb?
eigentlich außerhalb oder? aber dann erscheint bei mir der else Zweig obwohl die Iban modulo 97 = 1 ergibt

Java:
import java.math.BigInteger;
public class IbanPruef
{

    public static void main(String[] args)
    {
    
  String landerkennung = (args[0]);
     String pruefziffer = (args[1]);
     String bban = (args[2]+args[3]+args[4]+args[5]+args[6]);
     int landerkennung1 = 1314;
     String bban2;
     BigInteger bban4 = new BigInteger ("97");
     BigInteger bban5 = new BigInteger ("");
    
     if (landerkennung == "DE")
     {
       landerkennung = String.valueOf(landerkennung1);
     }
    
     bban2 = bban + landerkennung1 + pruefziffer;
    
    
     BigInteger bban3 = new BigInteger(bban2);
    
     bban5 = bban3.mod(bban4);
  
        if (bban5.compareTo(bban4) == 1)
        {
            System.out.println("Die IBAN ist richtig");
        }else{
            System.out.println("Die IBAN ist falsch");
        }
    }

}
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

also das
Java:
landerkennung == "DE"

vergleicht nur die Referenzen und nicht ob der String identisch ist.
Strings vergleich man mit equals.

Dann würde ich dir empfehlen einfach mal pruefziffer, bban und landerkennung1 mit System.out.print auszugeben.

Grüße
 
jetzt hab ich einen neuen String landerkennung2 = "DE"
um die beiden Strings zu vergleichen.

nach dieser Taktik müsste ich doch auch einen neuen BigInteger machen?

BigInteger bban5 = new BigInteger ("1");

um zu überprüfen ob bban3 nach Mod gleich 1 ist?
Java:
import java.math.BigInteger;
public class IbanPruef
{
   public static void main(String[] args)
   {
     String landerkennung = (args[0]);
     String landerkennung2 = "DE";
     String pruefziffer = (args[1]);
     String bban = (args[2]+args[3]+args[4]+args[5]+args[6]);
     int landerkennung1 = 1314;
     String bban2;
     BigInteger bban4 = new BigInteger ("97");
     BigInteger bban5 = new BigInteger ("1");
    
     if (landerkennung.equals(landerkennung2))
     {
       landerkennung = String.valueOf(landerkennung1);
     }
    
     bban2 = bban + landerkennung1 + pruefziffer;
    
     System.out.println("Die IBAN lautet: " + bban2);
    
     BigInteger bban3 = new BigInteger(bban2);
    
     bban3 = bban3.mod(bban4);
    
     if (bban3.equals(bban5))
  {
  System.out.println("Die IBAN ist richtig");
  }else{
  System.out.println("Die IBAN ist falsch");
  }
   }
}


PS: hab jetzt mal die gleiche IF Anweisung wie bei den Strings genommen und siehe da es klappt 🙂
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben