PHP :: Aufgabe #256
1 Lösung
Berechnen der Prüfziffer einer EAN- Nummer
Anfänger - PHP
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ß
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:
main.php
PHP-Code
<?php
array_shift($argv); // remove script name
if (sizeof($argv) !== 1) {
die ('Error: Expected 1 argument, ' . sizeof($argv) . ' given.' . PHP_EOL);
}
$ean = $argv[0];
preg_match_all('/[^0-9]/', $ean, $matches);
if (strlen($ean) !== 12) {
die('Error: Invalid length.' . PHP_EOL);
}
elseif (sizeof($matches[0]) > 0) {
die('Error: Invalid characters.' . PHP_EOL);
}
preg_match_all('/([0-9])([0-9])/', $ean, $matches);
$sum = array_sum($matches[1]);
foreach ($matches[2] as $number) {
$sum += $number * 3;
}
$checkDigit = ($sum % 10 === 0) ? 0 : (ceil($sum / 10) * 10) - $sum;
echo 'EAN Number : ' , $ean , PHP_EOL ,
'Check Digit : ' , $checkDigit , PHP_EOL;Konsolenausgabe:
php main.php 978381582086
EAN Number : 978381582086
Check Digit : 5
