Java IBAN Überprüfen?


10.06.2022, 22:28

Falls das jetzt unverständlich war: Die Challenge ist in Java.

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das wäre mein Ansatz:

public class IbanTwister {
    public static void main(String args[]) {
        String iban = "DE80500105175408332501";
        //hier höngen wir die ersten 4 Zeichen hinten dran
        iban += iban.substring(0,4);
        //hier entfernen wir vorne die ersten 4 Zeichen
        iban = iban.substring(4,iban.length());
        //Array mit allen Zeichen die wir ersetzen wollen
        String[] buchstaben = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
        //Jetzt durchlaufen wir das Array und ersetzen einfach jedes Zeichen mit der gewünschten Zahl.
        //A soll mit 10 ersetzt werden, B mit 11 usw. A ist im array an 0. Stelle, also ersetzen wir jedes Zeichen mit i+10 in der Schleife
        for (int i=0; i<buchstaben.length; i++) {
            iban = iban.replace(buchstaben[i], ""+(i+10));
            iban = iban.replace(buchstaben[i].toLowerCase(), ""+(i+10));
        }
        //Und jetzt bestaunen wir unsere Arbeit.
        System.out.println(iban);
    }
}

Sollte größtenteils selbsterklärend sein, habe aber auch einiges an Kommentaren beigepackt. Ob es effizienter oder eleganter geht? Möglich. Aber das ist eine Lösung die genau das tut, was sie soll.

iNeedHelp961 
Fragesteller
 10.06.2022, 23:12

Erstmal: Danke. Ich hab das (Trauriger weiße) einfach mit Replace gemacht ... Ich weiß aua. Aber jetzt hab ich ein anderes Problem. Wenn ich Integer.valueOf mache kriege ich ne Exception (java.lang.NumberFormatException). Verstehst du die?

0
GuteAntwort2021  10.06.2022, 23:16
@iNeedHelp961

Ich habe es auch über String Replace gemacht. Nichts unelegantes wie ich finde...

Pack mal das CodeSnippet dazu, welches die Exception auslöst.

0
iNeedHelp961 
Fragesteller
 10.06.2022, 23:18
@GuteAntwort2021
                iban += iban.substring(0,4);
                //hier entfernen wir vorne die ersten 4 Zeichen
                iban = iban.substring(4,iban.length());
                //Array mit allen Zeichen die wir ersetzen wollen
                String[] buchstaben = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
                //Jetzt durchlaufen wir das Array und ersetzen einfach jedes Zeichen mit der gewünschten Zahl.
                //A soll mit 10 ersetzt werden, B mit 11 usw. A ist im array an 0. Stelle, also ersetzen wir jedes Zeichen mit i+10 in der Schleife
                for (int i=0; i<buchstaben.length; i++) {
                    iban = iban.replace(buchstaben[i], ""+(i+10));
                    iban.replace(buchstaben[i].toUpperCase(), ""+(i+10));
                }
                int ciban = Integer.valueOf(iban);
0
GuteAntwort2021  10.06.2022, 23:28
@iNeedHelp961

Die Zahl ist schlicht zu groß um als Integer gespeichert zu werden. Dafür wirst du ein BigInteger brauchen.

import java.math.BigInteger;
public class IbanTwister {
  ...
  try {
    BigInteger ciban = new BigInteger(iban);
    System.out.println(ciban);
  } catch (NumberFormatException ex) {
    ex.printStackTrace();
  }
}
1
GuteAntwort2021  10.06.2022, 23:40
@iNeedHelp961

Um damit also den dritten Teil zu bearbeiten, wäre mein Ansatz so:

try {
  BigInteger a, b, c;
  a = new BigInteger(iban);
  b = new BigInteger("97");
  c = a.remainder(b);
  int check = BigInteger.intValue(c)
  if (check==1)
    System.out.println("Check passed");
  else
    System.out.println("Check NOT passed");
} catch (NumberFormatException ex) {
  System.out.println("Something went wrong!");
}
0
GuteAntwort2021  10.06.2022, 23:47
@iNeedHelp961

Oh wait, das funktioniert so nicht. Versuch es hiermit:

try {
  BigInteger a, b, c;
  a = new BigInteger(iban);
  b = new BigInteger("97");
  c = a.remainder(b);
  if (c.toString().equals("1"))
    System.out.println("Check passed");
  else
    System.out.println("Check NOT passed");
} catch (NumberFormatException ex) {
  System.out.println("Something went wrong!");
}

Das sollte klappen.

1
iNeedHelp961 
Fragesteller
 11.06.2022, 09:44
@GuteAntwort2021

Danke sehr, ich Versuche es gleich. Kurz zum verstehen, a.renainder Nacht das geteilt durch 97 oder?

0

also sorry, aber kp was du für nh antwort erwartest, weil eig. hast du ja selbst gesagt du hast nh idee wie der algorithmus aussehen würde in python

der rest ist eig nur anschauen welche java funktionen du zur entsprechenden string manipulation brauchst

sonst könnte dir das theoretisch jmd vorprogrammieren

und ich weiß das ist nur hobbymäßig aber wieso musst du unbedingt nh coding challenge in java machen wenn du vertrauter bist mit python? klar kannst du andere sprachen kennenlernen und viel draus lernen, aber beherrsche 1 sprache gut dann wirst du wenig probleme haben mit anderen

iNeedHelp961 
Fragesteller
 10.06.2022, 23:08

Ich hab das ja jetzt alles in Java gemacht. An sich kann ich Java ETWAS. Ich beziehe mich hier auf das etwas haha. Als Antwort habe ich hier eher erwartet das jemand mir die 2 Erklärt.

0