Java IBAN Überprüfen?
Hallo. Ich bin im "Urlaub", mir ist langweilig und jetzt mache ich Coding Challenges. Die Jetzige verstehe ich allerdings nicht so ganz bzw würde mir dazu auch nur in Python mit einem Dictionary eine halbwegs vernünftige Lösung einfallen. Hier mal kurz die Aufgabenstellung:
Wie man sieht, soll ich Zahlen verschieben und und und. Nur hab ich jetzt nicht sooo viel Ahnung von Java bzw was Strings Cutten etc angeht. Könntet ihr mir evt auf die Sprünge helfen? Schritt 1 kann ich aber Schritt 2 ist ... Schwer zu verstehen. Danke im Voraus!
Falls das jetzt unverständlich war: Die Challenge ist in Java.
2 Antworten
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.
Ich habe es auch über String Replace gemacht. Nichts unelegantes wie ich finde...
Pack mal das CodeSnippet dazu, welches die Exception auslöst.
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);
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();
}
}
Ich danke dir. Versuche ich morgen gleich mal
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!");
}
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.
Danke sehr, ich Versuche es gleich. Kurz zum verstehen, a.renainder Nacht das geteilt durch 97 oder?
Es ist quasi das Modulo für BigInteger und liefert den Rest.
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
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.
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?