ISBN13 check digit: Difference between revisions

Added more general routine
(Added Forth version)
(Added more general routine)
Line 1,177:
if [char] 0 - * rot + swap 3 * 8 mod else drop drop then
loop drop r> + 10 mod 0=
;</lang>
The following slightly modified word not only identifies correct 13 digit ISBN (and EAN) codes, but also 8 digit EAN and GTIN codes:
<lang>: isbn? ( a n -- f)
bounds 2>r 0 dup 2r@ ?do i c@ is-digit + loop abs 1- 1 and 2* 1+ 2r> ?do
dup i c@ dup is-digit \ get length and factor, setup loop
if [char] 0 - * rot + swap 3 * 8 mod else drop drop then
loop drop 10 mod 0= \ now calculate checksum
;</lang>
{{out}}
374

edits