' Check validity of a credit card number.
' (Based on public domain code written by Frank Cox, September 1, 1991.)

INPUT "Input Charge Card Number"; Card$
IF LEN(Card$) = 0 THEN END
IF CCValid%(Card$) THEN
  PRINT "Valid"
ELSE
  PRINT "Invalid"
END IF


FUNCTION CCValid%(Card$) LOCAL PUBLIC

  LOCAL Temp$, c%, m%, Temp%, CheckSum%

  Temp$ = REMOVE$(Card$, CHR$(32))		' remove spaces from the data

  FOR c% = (LEN(Temp$) - 1) TO 1 STEP -1	' compute the checksum
    IF m% = 2 THEN m% = 1 ELSE m% = 2
    Temp% = VAL(MID$(Temp$, c%, 1)) * m%
    INCR CheckSum%, Temp%
    IF Temp% > 9 THEN DECR CheckSum%, 9
  NEXT c%
  IF (CheckSum% + VAL(RIGHT$(Temp$, 1))) MOD 10 = 0 THEN
    CCValid% = -1
  ELSE
    CCValid% = 0
  END IF

END FUNCTION
