Mega Code Archive

 
Categories / Delphi / Algorithm Math
 

Compute a Modul 10 check number

Title: compute a Modul 10 check number? //Errechnet eine Prüfziffer nach Modula 10 function modula10(zahl: Int64): Int64; { Nach diesem Verfahren werden z.B. die Prüfziffern von EAN-Codes (immer die ganz rechte Stelle) berechnet. Das System funktioniert wie folgt: Angenommener Code 4205 4504 (Camel Filter) Die letzte Stelle wollen wir berechnen, diese wird also nicht mit einbezogen. Die einzelen Stellen werden abwechselnd mit 3 und 1 multipliziert wobei rechts immer mit 3 begonnen wird. Die Summe der Produkte wird durch 10 (dem Modul) geteilt, der Rest wird von 10 abgezogen. Sollte hierbei 10 übrigbleiben ist die Prüfziffer 0. Hier das Beispiel: Stelle Wert Wichtung Produkt 1 4 * 3 12 2 2 * 1 2 3 0 * 3 0 4 5 * 1 5 5 4 * 3 12 6 5 * 1 5 7 0 * 3 0 ------- Summe 36 Summe / 10(Modul) = 3 Rest 6 10(Modul) - 6(Rest) = 4 Wenn der Rest 0 ist wäre die Prüfziffer also 10. Da aber nur eine Stelle zur Verfügung steht, wird die Prüfziffer 0. } var wert: Longint; multi: Word; begin //Rechte Stelle wird immer mit 3 multipliziert multi := 3; wert := 0; repeat //Wert erhöhen um den Wert der letzten Stelle * Multiplikator wert := wert + (zahl - trunc(zahl / 10) * 10) * multi; //Multiplikator ist abwechselnd 3 und 1 if multi = 3 then multi := 1 else multi := 3; //Letzte Stelle der Zahl abschneiden zahl := trunc(zahl / 10); until zahl = 0; //Prüfziffer ermitteln Result := 10 - (wert - trunc(wert / 10) * 10); //Wenn if Result = 10 then Result := 0; end; function ismodula10(zahl: Int64): Boolean; //Prüft mit Hilfe von "modula10", ob die letzte //(rechte) Stelle als Prüfziffer korrekt ist. begin //letzte Stelle Abschneiden und Prüfziffer errechnen, //dann mit letzter Stelle der übergebenen Zahl vergleichen if modula10(trunc(zahl / 10)) = zahl - (trunc(zahl / 10) * 10) then Result := True else Result := False; end;