Google for ISBN-13 numbers

An ISBN number is a unique identification number for commercial books.  The listing below is for an ISBN-13 validation program in BBC BASIC.  If a valid book number is found the program then performs a Google search (probably bringing up a link to Amazon.com - not that they really need the support).



The algorithm works as follows:


  1. Each of the first 12 digits starting from the left to right, is multiplied by 1 or 3 alternatively.
  2. The sum of the products modulo 10 gives us either zero or a number between 1 to 9.
  3. Subtract the number from 10 and it gives us the checksum.


     REM ISBN-13 Validator program
     REM T Street
     REM 2015-03-19


     INSTALL @lib$+"stringlib"
     REM main program loop
     
REPEAT
       PRINT 
'"ISBN-13 validator."
       PRINT "------------------"'
       REPEAT
         INPUT 
"Enter a 13 digit ISBN number : " isbn$

         isbn$ = FN_convertInput( isbn$ )

       UNTIL LEN(isbn$)=13

       IF FN_validISBN13( isbn$ ) THEN
         PRINT 
"VALID ISBN-13 - opening your browser..."
         SYS "ShellExecute",@hwnd%,0,"https://www.google.co.uk/search?q=ISBN "+isbn$, 0, "", 1
       ELSE
         PRINT 
"INVALID ISBN-13 :-("
       ENDIF
     UNTIL FALSE


     
DEFFN_validISBN13( num$ )
     REM validates an isbn number
     REM pass a 13 digit string as parameter
     REM returns true if the string represents a valid ISBN-13
     REM
     REM Each digit, starting from the left to right, is multiplied by 1 or 3 alternatively.
     REM The sum of the products modulo 10 gives us either zero or a number between 1 to 9.
     REM Subtract the number from 10 and it gives us the checksum.

     
LOCAL i% : REM iterator
     
LOCAL calcCheck% : REM running calculation
     
LOCAL checksum%  : REM checksum
     
LOCAL multiplier% : multiplier% = 3
     i% = 1
     WHILE i%<13
       calcCheck% = calcCheck% + VAL(MID$(num$, i%, 1))
       i% += 1
       calcCheck% = calcCheck% + VAL(MID$(num$, i%, 1)) * multiplier%
       i% += 1
     ENDWHILE

     
calcCheck% = calcCheck% MOD 10

     checksum% = 10 - calcCheck%

     IF checksum% = VAL(RIGHT$(num$,1)) THEN
       
TRUE
     ENDIF

     
FALSE


     
DEFFN_convertInput( astring$ )
     REM pass an ISBN-13 number as a string
     REM removes any spaces or dashes
     REM which are sometimes located
     REM in ISBN numbers
     REM returns the string with dash/space removed
     
LOCAL a$ : a$ = astring$
     IF FN_findreplacei( a$, "-""", 0)
     IF FN_findreplacei( a$, " """, 0)
     = a$

#isbn #bbcbasicforwindows #algoithms