Diskussion:Luhn-Algorithmus

aus Wikipedia, der freien Enzyklopädie

C-Code

Der C-Code ist C++; "reiner C-Code" geht so:

  1. include <stdlib.h> // für atoi
  2. include <string.h> // für strlen

int checkLuhn(char *pPurported)

{
  int i,nDigit;
  int nSum       = 0;
  int nDigits    = strlen(pPurported);
  int nParity    = (nDigits-1) % 2;
  char cDigit[2] = "\0\0"; // atoi erwartet einen null-terminierten String
  for (i = nDigits; i > 0 ; i--)
  { 
    cDigit[0]  = pPurported[i-1];
    nDigit = atoi(cDigit);

    if (nParity == i % 2)
      nDigit = nDigit * 2;

    nSum += nDigit/10;
    nSum += nDigit%10; 
  }
  return 0 == nSum % 10;
} (nicht signierter Beitrag von Fraba (Diskussion | Beiträge) 20:37, 3. Mai 2011 (CEST)) 

Dieser Text basiert auf einer Übersetzung des Artikels en:Luhn algorithm - Version vom 16. Januar 2006.

- Fängt der Luhn-Algorithmus nicht "vorne" mit Gewichtung 1212... an?

 Die Deutsche Bundesbank hat Publikationen zur Berechnung der Kontonummer und diese
 verwendet ebenfalls den Luhn Algorithmus nur mit anderer Gewichtung (z.B 123123...)
 Dort wird der Algorithmus "beginnend von vorne" abgelaufen.

- Zu oben: Ich verstehe "Beginnend mit der zweitletzten Ziffer und nach links durchlaufend, verdopple den Wert jeder zweiten Ziffer." so, dass der Algorithmus immer mit ...121 endet.

- Ich denke, mindestens die Java-Implementierung ist fehlerhaft für Zahlen mit einer geraden Anzahl von Ziffern, ich habe das auch ausprobiert. Der Code weicht hier von Pseudocode ab:

 int digit := integer(purportedCC[i]) // Die Ziffern werden von "links" durchlaufen

vs.

 int digit = digits[length - i - 1];  // Die Ziffern werden von "rechts" durchlaufen

Bei einer geraden Anzahl von Ziffern vertauscht dies die Ziffern mit Faktor 1 mit denen mit Faktor 2 --JoBee 19:56, 30. Jul. 2009 (CEST)

Prüfzifferermittlung

Wie wär's mit einem Hinweis auf das Verfahren, wie eine Prüfziffer zu ermitteln ist? (nicht signierter Beitrag von 84.118.90.4 (Diskussion) 01:01, 18. Okt. 2014 (CEST))

Ist der Algorithmus besonders gut?

Irgendwie wirkt der Algorithmus auf mich gefrickelt. Ist der beweisbar besonders gut, das heißt erkennt er die speziellen Fehler wir Zahlendreher besonders gut? Gibt es da nichts einfacheres und besseres? --Siehe-auch-Löscher (Diskussion) 17:13, 7. Dez. 2016 (CET)