Luhm Algorythmus

Lucaaa

Bekanntes Mitglied
Hey!
Wollte den Luhm Altogythmus programmieren. bekomme aber irgendwie falsche Ergebnisse ???

Java:
public class Main {
 
 public static void main(String[] args) {
  new Main();
 }
 
 public Main() {
  int number = 123456;
  System.out.println(luhm(number));
  
 }
 
 private int luhm(int number) {
  int[] numbers = numberToNumbers(number);
  int sum = 0;
  
  for (int i =0; i<numbers.length; i++) {
   int n = numbers[numbers.length-1 -i]; 
   if(i % 2 == 1) 
    n *= 2;
   sum += n <=9 ? n : n-9;
  }
  return sum%10; 
 }
 
 private int[] numberToNumbers(int number) {
  String s = Integer.toString(number);
  int[] numbers = new int[s.length()];
  
  for(int i=0; i<s.length(); i++) {
   numbers[i] = s.charAt(i) - '0';
  }
  
  return numbers;
 }
}
 
K

kneitzel

Gast
Also der Luhn Algorithmus ist nun tatsächlich nicht ganz so eindeutig wie man zuerst meint. Denn die Kernfrage ist aus meiner Sicht doch: Was genau wird berechnet?

Generell dient der Algorithmus der Berechnung einer Checksumme, welche zu der Zahl gehört. Die Zahl ist gültig, wenn beim Luhm Algorithmus 0 heraus kommt.

Nun ist aber die Frage: Was ist die "123456"? Ist das eine Zahl, die geprüft werden soll? Das ist das, was dein Algorithmus macht:
6 einfach, 5 doppelt, 4 einfach, 3 doppelt, .... Am Ende kommt 1 raus, also ist keine gültige Zahl nach Luhm Algorithmus.

Oder ist es die Eingabezahl und du willst 123456X Berechnen? Dann wäre X ja erst noch zu berechnen, also hat man jetzt X einfach, 6 doppelt, 5 einfach, 4 doppelt, ....

Also wenn Du z.B. http://werner.rothschopf.net/modulo10.htm anschaust: Da geht nicht darum, die Zahl zu prüfen, sondern darum, die Prüfziffer zu berechnen.

Wenn Du da also z.B. 12345 angibst, dann wird als Prüfziffer eine 5 Berechnet, die Zahl wird also zu 123455.
Wenn Du diese Zahl nun bei Dir im Code angibst (also 123455 statt 123456), dann kommt als Ergebnis 0 heraus -> Die Zahl ist gültig.

Daher ist tatsächlich die Frage, was Deine Funktion machen soll und wenn es nur der check ist, dann interessiert nicht das Ergebnis sondern nur, ob es eben 0 ist oder nicht.
Und wenn du die Prüfziffer berechnen willst zum anfügen, dann würde der Algorithmus nicht stimmen ...
 

Ähnliche Java Themen

Neue Themen


Oben