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


a := "978-1734314502" 
Print Show(a), Show (Iif (Func(_IsISBN (a)), "good", "bad"))
 
a := "978-1734314509"
Print Show(a), Show (Iif (Func(_IsISBN (a)), "good", "bad"))
 
a := "978-1788399081"
Print Show(a), Show (Iif (Func(_IsISBN (a)), "good", "bad"))
 
a := "978-1788399083"
Print Show(a), Show (Iif (Func(_IsISBN (a)), "good", "bad"))
 
End
 
_IsISBN
  Param (1)
  Local (4)
 
  c@ = 0 : e@ = 1                      ' set sum and multiplier
 
  For b@ = Len (a@) - 1 To 0 Step -1   ' scan string in reverse
    d@ = Peek(a@, b@) - Ord ("0")      ' get character
    If ((d@ < 0) + (d@ > 9)) = 0 Then c@ = c@ + (d@ * e@)
    e@ = (e@ * 3) % 8                  ' evaluate character, change multiplier
  Next
 
Return ((c@ % 10) = 0)                 ' modulus 10 must be zero