Task

Validate the check digit of an ISBN-13 code:

   Multiply every other digit by  3.
   Add these numbers and the other digits.
   Take the remainder of this number after division by  10.
   If it is  0,   the ISBN-13 check digit is correct.


Use the following codes for testing:

   978-1734314502       (good)
   978-1734314509         (bad)
   978-1788399081       (good)
   978-1788399083         (bad)


Show output here, on this page



See also

   for details:   13-digit ISBN method of validation.       (installs cookies.)


use strict;
use warnings;
use feature 'say';
 
sub check_digit {
    my($isbn) = @_; my($sum);
    $sum += (1,3)[$_%2] * (split '', join '', split /\D/, $isbn)[$_] for 0..11;
    (10 - $sum % 10) % 10;
}
 
for (<978-1734314502 978-1734314509 978-1788399081 978-1788399083 978-2-74839-908-0 978-2-74839-908-5>) {
    my($isbn,$check) = /(.*)(.)/;
    my $check_d = check_digit($isbn);
    say "$_ : " . ($check == $check_d ? 'Good' : "Bad check-digit $check; should be $check_d")
}