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.)


$ include "seed7_05.s7i";
 
const func boolean: isISBN13 (in var string: input) is func
  result
    var boolean: isbn is FALSE;
  local
    var char: c is ' ';
    var integer: digit is 0;
    var integer: i is 1;
    var integer: sum is 0;
  begin
    input := replace(input, " ", "");
    input := replace(input, "-", "");
    if length(input) = 13 then
      for c range input do
        digit := ord(c) - 48;
        if not odd(i) then
          digit *:= 3;
        end if;
        sum +:= digit;
        incr(i);
      end for;
      isbn := sum rem 10 = 0;
    end if;
  end func;
 
const proc: main is func
  local
    var string: str is "";
  begin
    for str range [] ("978-1734314502", "978-1734314509", "978-1788399081", "978-1788399083") do
      writeln(str <& ": " <& isISBN13(str));
    end for;
  end func;