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


with javascript_semantics
procedure check_isbn13(string isbn)
    integer digits = 0, checksum = 0, w = 1
    for i=1 to length(isbn) do
        integer ch = isbn[i]
        if ch!=' ' and ch!='-' then
            ch -= '0'
            if ch<0 or ch>9 then checksum = 9 exit end if
            checksum += ch*w
            digits += 1
            w = 4-w
        end if
    end for
    checksum = remainder(checksum,10)
    string gb = iff(digits=13 and checksum=0 ? "good" : "bad")
    printf(1,"%s: %s\n",{isbn,gb})
end procedure
 
constant isbns = {"978-1734314502", "978-1734314509", "978-1788399081", "978-1788399083",
                  "978-2-74839-908-0","978-2-74839-908-5","978 1 86197 876 9"}
for i=1 to length(isbns) do check_isbn13(isbns[i]) end for
