62 lines
931 B
Plaintext
62 lines
931 B
Plaintext
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
|