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


INCLUDE "D2:CHARTEST.ACT" ;from the Action! Tool Kit
 
BYTE FUNC CheckISBN13(CHAR ARRAY t)
  BYTE i,index,sum,v
 
  sum=0 index=0
  FOR i=1 TO t(0)
  DO
    v=t(i)
    IF IsDigit(v) THEN
      v==-'0
      IF index MOD 2=1 THEN
        v==*3
      FI
      sum==+v
      index==+1
    ELSEIF v#'  AND v#'- THEN
      RETURN (0)
    FI
  OD
  IF index#13 OR sum MOD 10#0 THEN
    RETURN (0)
  FI
RETURN (1)
 
PROC Test(CHAR ARRAY t)
  BYTE correct
 
  correct=CheckISBN13(t)
  Print(t) Print(" is ")
  IF correct THEN
    PrintE("correct")
  ELSE
    PrintE("incorrect")
  FI
RETURN
 
PROC Main()
  Put(125) PutE() ;clear screen
 
  Test("978-1734314502")
  Test("978-1734314509")
  Test("978-1788399081")
  Test("978-1788399083")
RETURN