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


#lang racket/base
 
(define (isbn13-check-digit-valid? s)
  (zero? (modulo (for/sum ((i (in-naturals))
                           (d (regexp-replace* #px"[^[:digit:]]" s "")))
                   (* (- (char->integer d) (char->integer #\0))
                      (if (even? i) 1 3)))
                 10)))
 
(module+ test
  (require rackunit)
  (check-true (isbn13-check-digit-valid? "978-1734314502"))
  (check-false (isbn13-check-digit-valid? "978-1734314509"))
  (check-true (isbn13-check-digit-valid? "978-1788399081"))
  (check-false (isbn13-check-digit-valid? "978-1788399083")))