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


proc nonrec isbn13_check(*char isbn) bool:
    byte n, check, d;
    char cur;
    bool ok;
    n := 0;
    check := 0;
    ok := true;
    while
        cur := isbn*;
        isbn := isbn + 1;
        ok and cur ~= '\e'
    do
        if n=3 then
            if cur ~= '-' then ok := false fi
        elif cur<'0' or cur>'9' then
            ok := false
        else
            d := cur - '0';
            if n=1 or (n>3 and n&1 = 0) then
                d := d * 3;
            fi;
            check := check + d
        fi;
        n := n + 1
    od;
    ok and n = 14 and check%10 = 0
corp
 
proc nonrec test(*char isbn) void:
    writeln(isbn, ": ", 
            if isbn13_check(isbn) then "good" else "bad" fi)
corp
 
proc nonrec main() void:
    test("978-1734314502");
    test("978-1734314509");
    test("978-1788399081");
    test("978-1788399083")
corp