C++ :: Aufgabe #268

1 Lösung Lösung öffentlich

Berechnen der Prüfziffer einer EAN- Nummer

Anfänger - C++ von JKooP - 29.03.2020 um 13:53 Uhr
Schreibe ein Programm mit dem man sowohl die Prüfziffer einer EAN- Nummer (Europäische Artikel- Nummerierung) berechnen als auch überprüfen kann.

Die EAN- Nummer besteht aus 13 Ziffern, wobei es sich bei der letzten Ziffer um die Prüfziffer handelt.

Beispiel für eine EAN: 978381582086[?]

Die Prüfziffer wird berechnet, indem man die ersten 12 Ziffern von links beginnend abwechselnd mit 1 und 3 multipliziert und anschließend die Produkte summiert.

Die Differenz zum nächsten Vielfachen von 10 ist die Prüfziffer.

Ist die Summe durch 10 teilbar, ist die Prüfziffer die Ziffer 0.

9·1 + 7·3 + 8·1 + 3·3 + 8·1 + 1·3 + 5·1 + 8·3 + 2·1 + 0·3 + 8·1 + 6·3
= 9 + 21 + 8 + 9 + 8 + 3 + 5 + 24 + 2 + 0 + 8 + 18 = 115
115 + 5 = 120 ⇒ Prüfziffer: 5

Viel Spaß

Lösungen:

vote_ok
von JKooP (7540 Punkte) - 08.01.2021 um 15:18 Uhr
C++ 17
Quellcode ausblenden C-Code
#include <iostream>
#include <string>
#include <regex>
using namespace std;

bool check_ean_number(string ean)
{
    auto checkDigit = ean[ean.length() - 1] - '0';

    if (!regex_match(ean, regex("[0-9]{13}"))) return false;

    auto sum{ 0 };
    for (size_t i = 0; i < ean.length() - 1; i++)
        sum += (ean[i] - '0') * (int)pow(3, i % 2);

    auto result_check_digit{ (int)ceil(sum / 10.0) * 10 - sum };
    return (result_check_digit == checkDigit);
}

int main()
{
    const string test_ean = "4003301018398";
    cout << test_ean << " ist " << (check_ean_number(test_ean) ? "" : "k") << "eine g\x81ltige EAN- Nummer!\n";
}