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 validISBN13 code {
   regsub -all {\D} $code "" code ;# remove non-digits
   if {[string length $code] == 13} {
      set sum 0
      set fac 1
      foreach digit [split $code ""] {
         set sum [expr {$sum + $digit * $fac}]
         set fac [expr {$fac == 1? 3: 1}]
      }
      if {$sum % 10 == 0} {return true}
   }
   return false
}
foreach test {
   978-1734314502
   978-1734314509
   978-1788399081
   978-1788399083
} {puts $test:[validISBN13 $test]}
 