INCLUDE "D2:CHARTEST.ACT" ;from the Action! Tool Kit BYTE FUNC Verify(CHAR ARRAY code) BYTE i,c,v CARD sum IF code(0)#9 THEN RETURN (0) ELSEIF IsDigit(code(1))=0 THEN RETURN (0) FI sum=0 FOR i=2 TO code(0) DO c=code(i) IF IsDigit(c) THEN v=c-'0 ELSEIF IsAlpha(c) THEN v=ToUpper(c)-'A+10 ELSEIF c='* THEN v=36 ELSEIF c='@ THEN v=37 ELSEIF c='# THEN v=38 ELSE RETURN (0) FI IF (i&1)=0 THEN v==*2 FI sum==+v/10+v MOD 10 OD v=(10-(sum MOD 10)) MOD 10 IF v#code(1)-'0 THEN RETURN (0) FI RETURN (1) PROC Test(CHAR ARRAY code) Print(code) IF Verify(code) THEN PrintE(" is valid") ELSE PrintE(" is invalid") FI RETURN PROC Main() Put(125) PutE() ;clear the screen Test("037833100") Test("17275R102") Test("38259P508") Test("594918104") Test("68389X106") Test("68389X105") RETURN