home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / Topware / aspedit / _SETUP.1 / ccheck.inc < prev    next >
Text File  |  1998-12-22  |  3KB  |  115 lines

  1. <%
  2. ' Credit Card check routine for ASP
  3. ' (c) 1998 by Click Online
  4. ' You may use these functions only if this header is not removed
  5. ' http://www.click-online.de
  6. ' info@click-online.de
  7.  
  8.  
  9. function trimtodigits(tstring)
  10. 'removes all chars except of 0-9
  11.   s="" 
  12.   ts=tstring
  13.   for x=1 to len(ts)
  14.     ch=mid(ts,x,1)
  15.     if asc(ch)>=48 and asc(ch)<=57 then
  16.       s=s & ch
  17.     end if
  18.   next
  19.   trimtodigits=s
  20. end function
  21.  
  22. function checkcc(ccnumber,cctype)
  23.   'checks credit card number for checksum,length and type
  24.   'ccnumber= credit card number (all useless characters are
  25.   'being removed before check)
  26.   '
  27.   'cctype:
  28.   '       "V" VISA
  29.   '       "M" Mastercard/Eurocard
  30.   '       "A" American Express
  31.   '       "C" Diners Club / Carte Blanche
  32.   '       "D" Discover
  33.   '       "E" enRoute
  34.   '       "J" JCB
  35.   'returns:  checkcc=0 (Bit0)  : card valid
  36.   '          checkcc=1 (Bit1) : wrong type
  37.   '          checkcc=2 (Bit2) : wrong length
  38.   '          checkcc=4 (Bit3) : wrong checksum (MOD10-Test)
  39.   '          checkcc=8 (Bit4) : cardtype unknown
  40.   '
  41.   ctype=ucase(cctype)
  42.   select case ctype
  43.     case "V"
  44.       cclength="13;16"
  45.       ccprefix="4"
  46.     case "M"
  47.       cclength="16"
  48.       ccprefix="51;52;53;54;55"
  49.     case "A"
  50.       cclength="15"
  51.       ccprefix="34;37"
  52.     case "C"
  53.       cclength="14"
  54.       ccprefix="300;301;302;303;304;305;36;38"
  55.     case "D"
  56.       cclength="16"
  57.       ccprefix="6011"
  58.     case "E"
  59.       cclength="15"
  60.       ccprefix="2014;2149"
  61.     case "J"
  62.       cclength="15;16"
  63.       ccprefix="3;2131;1800"
  64.     case else
  65.       cclength=""
  66.       ccprefix=""
  67.   end select
  68.   prefixes=split(ccprefix,";",-1)
  69.   lengths=split(cclength,";",-1)
  70.   number=trimtodigits(ccnumber)
  71.   prefixvalid=false
  72.   lengthvalid=false
  73.   for each prefix in prefixes
  74.     if instr(number,prefix)=1 then
  75.       prefixvalid=true
  76.     end if
  77.   next  
  78.   for each length in lengths
  79.     if cstr(len(number))=length then
  80.       lengthvalid=true
  81.     end if
  82.   next
  83.   result=0
  84.   if not prefixvalid then
  85.     result=result+1
  86.   end if  
  87.   if not lengthvalid then
  88.     result=result+2
  89.   end if  
  90.   qsum=0
  91.   for x=1 to len(number)
  92.     ch=mid(number,len(number)-x+1,1)
  93.     'response.write ch
  94.     if x mod 2=0 then
  95.       sum=2*cint(ch)
  96.       qsum=qsum+(sum mod 10)
  97.       if sum>9 then 
  98.         qsum=qsum+1
  99.       end if
  100.     else
  101.       qsum=qsum+cint(ch)
  102.     end if
  103.   next
  104.   'response.write qsum
  105.   if qsum mod 10<>0 then
  106.     result=result+4
  107.   end if
  108.   if cclength="" then
  109.     result=result+8
  110.   end if
  111.   checkcc=result
  112. end function
  113. %>
  114.  
  115.