Wayne Diamond Member
|
posted May 16, 2001 03:51 AM
#COMPILE EXE "ccverify.exe" 'Verify if a credit card number calculates to the Mod 2 check. FUNCTION CCNumberVerify(CCNum AS STRING) AS LONG ON ERROR RESUME NEXT DIM i AS INTEGER DIM total AS INTEGER DIM TempMultiplier AS STRING FOR i = LEN(CCNum) TO 2 STEP -2 total = total + VAL(MID$(CCNum, i, 1)) TempMultiplier = STR$(VAL(MID$(CCNum, i - 1, 1)) * 2) total = total + VAL(LEFT$(TempMultiplier, 1)) IF LEN(TempMultiplier) > 1 THEN total = total + VAL(RIGHT$(TempMultiplier, 1)) NEXT IF LEN(CCNum) MOD 2 = 1 THEN total = total + VAL(LEFT$(CCNum, 1)) IF total MOD 10 = 0 THEN FUNCTION = 1 ELSE FUNCTION = 0 END IF END FUNCTION 'Determine what type of card a credit card number is from FUNCTION CCTypeVerify(CCNum AS STRING) AS STRING ON ERROR RESUME NEXT DIM Header AS STRING DIM TmpType AS STRING SELECT CASE LEFT$(CCNum, 1) CASE "6" Header = LEFT$(CCNum, 4) IF Header = "6011" AND LEN(CCNum) = 16 THEN TmpType = "Discover" END IF CASE "5" Header = LEFT$(CCNum, 2) IF VAL(Header) >= 51 AND VAL(Header) <= 55 AND LEN(CCNum) = 16 THEN TmpType = "MasterCard" ELSEIF VAL(Header) >= 55 AND VAL(Header) <= 59 AND LEN(CCNum) = 16 THEN TmpType = "BankCard (AU\NZ)" END IF CASE "4" IF LEN(CCNum) = 13 OR LEN(CCNum) = 16 THEN TmpType = "Visa" END IF CASE "3" Header = LEFT$(CCNum, 3) IF VAL(Header) >= 340 AND VAL(Header) <= 379 AND LEN(CCNum) = 15 THEN TmpType = "American Express" ELSEIF VAL(Header) >= 300 AND VAL(Header) <= 305 AND LEN(CCNum) = 14 THEN TmpType = "Diners Club" ELSEIF VAL(Header) >= 360 AND VAL(Header) <= 369 AND LEN(CCNum) = 14 THEN TmpType = "Diners Club" ELSEIF VAL(Header) >= 380 AND VAL(Header) <= 389 AND LEN(CCNum) = 14 THEN TmpType = "Diners Club" ELSEIF VAL(Header) >= 300 AND VAL(Header) <= 399 AND LEN(CCNum) = 16 THEN TmpType = "JCB" END IF CASE "2" Header = LEFT$(CCNum, 4) IF (Header = "2014" OR Header = "2149") AND LEN(CCNum) = 15 THEN TmpType = "enRoute" ELSEIF Header = "2131" AND LEN(CCNum) = 15 THEN TmpType = "JCB" END IF CASE "1" Header = LEFT$(CCNum, 4) IF Header = "1800" AND LEN(CCNum) = 15 THEN TmpType = "JCB" END IF END SELECT IF TmpType = "" THEN TmpType = "Unknown" FUNCTION = TmpType END FUNCTION FUNCTION PBMAIN() AS LONG ON ERROR RESUME NEXT DIM CardNumber AS STRING IF COMMAND$ <> "" THEN CardNumber = COMMAND$ ELSE STDOUT "Credit card number: "; STDIN LINE CardNumber END IF IF LEN(CardNumber) > 16 THEN STDOUT "Card number is of greater length than 16!" EXIT FUNCTION ELSEIF INSTR(1, CardNumber, " ") > 0 OR INSTR(1, CardNumber, "-") > 0 THEN STDOUT "Numbers only please - eg. 0000111122223333" EXIT FUNCTION END IF STDOUT "Card number: "; IF CCNumberVerify(CardNumber) = 1 THEN STDOUT "OK!" ELSE STDOUT "Invalid" END IF STDOUT "Card type: " & CCTypeVerify(CardNumber) END FUNCTION
------------------
IP: Logged |