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


val .isbn13checkdigit = f(var .s) {
    .s = replace(.s, RE/[\- ]/)
    matching(re/^[0-9]{13}$/, .s) and
        fold(f{+}, map [_, f{x 3}], s2n .s) div 10
}
 
val .tests = h{
    "978-1734314502": true,
    "978-1734314509": false,
    "978-1788399081": true,
    "978-1788399083": false,
}
 
for .key of .tests {
    val .pass = .isbn13checkdigit(.key)
    write .key, ": ", if(.pass: "good"; "bad")
    writeln if(.pass == .tests[.key]: ""; " (ISBN-13 CHECK DIGIT TEST FAILED)")
}