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


validISBN?: function [isbn][
    currentCheck: to :integer to :string last isbn
    isbn: map split chop replace isbn "-" "" => [to :integer]
 
    s: 0
    loop.with:'i isbn 'n [
        if? even? i -> s: s + n
        else -> s: s + 3*n
    ]
    checkDigit: 10 - s % 10
    return currentCheck = checkDigit
]
 
tests: [
    "978-1734314502" "978-1734314509"
    "978-1788399081" "978-1788399083"
]
 
loop tests 'test [
    print [test "=>" validISBN? test]
]