Perl :: Aufgabe #266 :: Lösung #1
1 Lösung
#266
Berechnen der Prüfziffer einer EAN- Nummer
Anfänger - Perl
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ß
#1
von Gustl (6560 Punkte)
- 29.03.2020 um 19:51 Uhr
#!/usr/bin/perl
use strict;
use warnings;
use POSIX;
my $ean = "978381582086";
print "Pruefziffer von $ean: ".getcheckDigitEan( $ean );
print "\nEAN Pruefziffer check: ".checkcheckDigitEan( "9783815820865" ); # Richtig = 1
print "\nEAN Pruefziffer check: ".checkcheckDigitEan( "9783815820864" ); # Falsch = 0
print "\nEAN Pruefziffer check: ".checkcheckDigitEan( "978381582086" ); # Laenge falsch = 2
sub getcheckDigitEan{
my $ean = shift;
my @arrayEan = split //, $ean;
my $sum = 0;
for ( my $i = 0 ; $i < scalar( @arrayEan ); $i++ ){
if( $i % 2 ){
$sum += $arrayEan[ $i ] * 3;
}
else{
$sum += $arrayEan[ $i ] * 1;
}
}
return ( ceil($sum / 10) * 10 ) - $sum;
}
# gibt folgende Werte zurück
# 0 wenn die Pruefziffer nicht stimmt
# 1 wenn die Pruefziffer stimmt
# 2 wenn die Laenge der EAN nicht stimmt
sub checkcheckDigitEan{
my $ean = shift;
return 2 if length( $ean ) != 13;
my $checkDigit = chop $ean;
my $comparecheckDigit = getcheckDigitEan( $ean );
return 1 if $checkDigit == $comparecheckDigit;
return 2;
}Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
