PowerBASIC Forums
  Source Code
  Credit card number verification (Mod2) and type recognition (Visa, Mastercard etc)

Post New Topic  Post A Reply
profile | register | preferences | faq | search

UBBFriend: Email This Page to Someone! next newest topic | next oldest topic
Author Topic:   Credit card number verification (Mod2) and type recognition (Visa, Mastercard etc)
Wayne Diamond
Member
posted May 16, 2001 03:51 AM     Click Here to See the Profile for Wayne Diamond     Edit/Delete Message   Reply w/Quote

#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

All times are EasternTime (US)

next newest topic | next oldest topic

Administrative Options: Close Topic | Archive/Move | Delete Topic
Post New Topic  Post A Reply
Hop to:

Contact Us | PowerBASIC BASIC Compilers

Copyright © 1999-2005 PowerBASIC, Inc. All Rights Reserved.


Ultimate Bulletin Board 5.45c