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


check_valid_isbn13: function [str] [
  is_digit: charset [#"0" - #"9"]
  remove-each i str [not pick is_digit i] ; remove non-digits
 
  either 13 = length? str [               ; reject strings of incorrect length
    sum: 0
    repeat i 13 [
      mul: either even? i [3] [1]         ; multiplier for odd/even digits
      sum: sum + (mul * to integer! to string! pick str i)
    ]
 
    zero? (sum % 10)                      ; check if remainder mod 10 is zero
  ] [
    false
  ]
]
 
; check given examples
foreach [str] ["978-1734314502" "978-1734314509" "978-1788399081" "978-1788399083"] [
  prin str
  prin " - "
  print check_valid_isbn13 str
]
 