EAN-Prüfziffer Java Programmierung?
/
Die Prüfziffer der EAN ist die letzte Ziffer.
Sie errechnet sich, indem die einzelnen Ziffern von rechts nach links,
beginnend mit der vorletzten, abwechselnd mit 3 und 1 multipliziert
und anschließend diese Produkte addiert werden.
Die Prüfziffer ergänzt diese Summe dann zum nächsten Vielfachen von 10.
Beispiel: EAN=5449000096241
43 + 21 + 63 + 91 + 03 + 01 + 03 + 01 + 93 + 41 + 43 + 51
= 12 + 2 + 18 + 9 + 0 + 0 + 0 + 0 + 27 + 4 + 12 + 5
= 89
Das nächste Vielfache von 10 ist 90, die Prüfziffer damit 90 - 89 = 1
Ich soll das jetzt mit: 7322540786989, 4042448035950 und 978-3-86681-483-7... testen
Das Programm soll jeweils ausgeben, ob die EAN gültig ist oder nicht.
/
public class EAN {
public static void main(String[] args) {
String ean = IO.readString("EAN:7322540786989");
ean = ean.replace("-", "");
char[] zeichen = ean.toCharArray();
// Der Ausdruck zeichen[i] - '0' liefert eine Ziffer.
...
}
}
Das wurde uns bereit gegeben sitze aber mit meinem Kollegen in der Uni und haben keinerlei Ansätze bzw. einen Plan wie wir das hinbekommen könnten. Wäre super wenn Ihr uns helfen könntet
3 Antworten
Über alle Zeichen iterieren bis auf die Prüfziffer.
Position mit Modulo 2, damit man weiss ob man mit 1 oder 3 multiplizieren muss.
Während der Iteration Summe bilden.
Die Gesamtsumme am Ende mit Modulo 10. Das ergibt die erwartete Prüfziffer.
Die erwartete Prüfziffer mit der tatsächlichen Prüfziffer vergleichen.
Fertig.
Multiplizieren bedeutet aber was anderes...
Beispiel: EAN=5449000096241
43 + 21 + 63 + 91 + 03 + 01 + 03 + 01 + 93 + 41 + 43 + 51
= 12 + 2 + 18 + 9 + 0 + 0 + 0 + 0 + 27 + 4 + 12 + 5
= 89
5*1 = 5
4*3 = 12
4*1 = 4
also 5+12+4+...
Wie kommst du auf 43?
PS: Ich kenne/kann das nicht, wollte aber immer mal schauen wie das klappt. Danke schön xD
Also erst einmal
// Der Ausdruck zeichen[i] - '0' liefert eine Ziffer.
Autsch! Das war mal zu C-Zeiten so. Nicht umsonst gibt es die Integer.valueOf()-Methode! Also Finger weg von solch althergebrachtem Blödsinn.
Außerdem geht es bei der Berechnung nicht um den Zahlenwert, sondern um den ASCII-Code des Zeichens. Somit bringt diese Information auch nichts.
Du musst jetzt eben einfach die einzelnen Zeichen durchlaufen und entsprechend aufsummieren:
int prüfsumme = 0;
boolean byThree = true;
for (int i = zeichen.length - 2; i >= 0; i++)
{
byte ascii = (byte)zeichen[i];
if (byThree)
{
prüfsumme += ascii * 3;
byThree = false;
}
else
{
prüfsumme += ascii;
byThree = true;
}
}
int prüfZiffer = 10 - (prüfsumme % 10);
Jetzt musst Du nur noch prüfen, ob das letzte Zeichen im EAN-Code prüfZiffer.toString() entspricht.