Da es hier schon lange kein Rätse mehr gab; hier ein kleines von meiner Seite,...
Es geht um die Berechnung einer Kreditkarten-Quersumme nach dem Module-10-Algorithmus. Wir hatten mal die Anforderung, eine Karte unseres Loyaltysystems zu validieren. Das war ja eher ein ge-copy-paste aus dem Internet. Die nächste Anforderung war, die nächste gültige Nummer zu bekommen.
Die Aufgabe darin besteht eine möglichst elegante/einfache Möglichkeit zur Berechnung der nächsten gültigen Nummer zu formulieren
Hier die Source:
Ausgabe:
Is 1009 valid? true
Is 1018 the next number? false
Und wehe, es macht jemand einfach return "1018"
hf
slowy
Es geht um die Berechnung einer Kreditkarten-Quersumme nach dem Module-10-Algorithmus. Wir hatten mal die Anforderung, eine Karte unseres Loyaltysystems zu validieren. Das war ja eher ein ge-copy-paste aus dem Internet. Die nächste Anforderung war, die nächste gültige Nummer zu bekommen.
Die Aufgabe darin besteht eine möglichst elegante/einfache Möglichkeit zur Berechnung der nächsten gültigen Nummer zu formulieren
Hier die Source:
Code:
package test;
public class CheckSum {
public static boolean validateCheckSum(String inData) {
char[] c = null;
char[] d = null;
int sum = 0;
int checksum = 0;
StringBuffer digits = new StringBuffer();
// isolate digits
c = inData.toCharArray();
for (int i = 0; i < c.length; i++) {
if (Character.isDigit(c[i])) {
digits.append(c[i]);
}
}
// calculate sum
int nr = 0;
d = digits.toString().toCharArray();
for (int i = 0; i < d.length - 1; i++) {
nr = i + 1;
if (nr % 2 == 0) {
sum += Character.digit(d[i], 10) * 3;
} else {
sum += Character.digit(d[i], 10);
}
}
// validate check sum
if ((10 - (sum % 10)) == 10) {
checksum = 0;
} else {
checksum = 10 - (sum % 10);
}
if (checksum == Character.digit(c[(d.length - 1)], 10)) {
return true;
}
return false;
}
public static String getNextNumber(String inLatest) {
// your approach here
return null;
}
public static void main(String[] args) {
String latestNumber = "1009";
System.out.println("Is " + latestNumber + " valid? " + validateCheckSum(latestNumber));
System.out.println("Is 1018 the next number? " + "1018".equals(getNextNumber(latestNumber)));
}
}
Ausgabe:
Is 1009 valid? true
Is 1018 the next number? false
Und wehe, es macht jemand einfach return "1018"
hf
slowy
Zuletzt bearbeitet: