验证信用卡函数(字符串处理)

发表于:2007-06-30来源:作者:点击数: 标签:
验证还取决于信用卡的类型。 @#************************************** @# Name: Credit Card Mod 10 Validation @# Description:This function validates if @# a credit card number appears to be val @# id, depending on the type of card, and a @# ls
验证还取决于信用卡的类型。

@#**************************************
@# Name: Credit Card Mod 10 Validation
@# Description:This function validates if
@# a credit card number "appears" to be val
@# id, depending on the type of card, and a
@# lso performing a Mod 10 check on the num
@# bers.
@# By: Lewis Moten
@#
@#
@# Inputs:asCardType - Type of credit car
@# d. (American Express, Discover, Visa, Ma
@# sterCard)
anCardNumber - The number appearing On the card. Dashes and spaces are ok. Numbers are stripped from
the data provided.
@#
@# Returns:Returns a boolean (true/false)
@# determining if the number appears to be
@# valid or not.
@#
@#Assumes:The user needs to be able to lo
@# ok through the code and determine wich s
@# trings represent the cards. You can eith
@# er type out the entire card name (i.e. "
@# American Express") or type in just a let
@# ter representing the card name (i.e. "a"
@# )
@#
@#Side Effects:Just because the function
@# returns that the card is valid, there ar
@# e several other things that are not bein
@# g validated.
Date - make sure the card has Not expired
Active Aclearcase/" target="_blank" >ccount - This script does Not communicate With any banks To determine If the account number is
active
Authorization - again, this script does Not communicate With any banks To determine If the card has
authorization to purchase a product.
@#
@#Warranty:
@#code provided by Planet Source Code(tm)
@# (www.Planet-Source-Code.com) @#as is@#, wi
@# thout warranties as to performance, fitn
@# ess, merchantability,and any other warra
@# nty (whether expressed or implied).
@#Terms of Agreement:
@#By using this source code, you agree to
@# the following terms...
@# 1) You may use this source code in per
@# sonal projects and may compile it into a
@# n .exe/.dll/.ocx and distribute it in bi
@# nary format freely and with no charge.
@# 2) You MAY NOT redistribute this sourc
@# e code (for example to a web site) witho
@# ut written permission from the original
@# author.Failure to do so is a violation o
@# f copyright laws.
@# 3) You may link to this code from anot
@# her website, provided it is not wrapped
@# in a frame.
@# 4) The author of this code may have re
@# tained certain additional copyright righ
@# ts.If so, this is indicated in the autho
@# r@#s description.
@#**************************************

Function IsCreditCard(ByRef asCardType, ByRef anCardNumber)
@# Performs a Mod 10 check To make sure the credit card number
@# appears valid
@# Developers may use the following numbers as dummy data:
@# Visa: 430-00000-00000
@# American Express: 372-00000-00000
@# Mastercard: 521-00000-00000
@# Discover: 620-00000-00000

Dim lsNumber @# Credit card number stripped of all spaces, dashes,
etc.
Dim lsChar @# an individual character
Dim lnTotal @# Sum of all calculations
Dim lnDigit @# A digit found within a credit card number
Dim lnPosition @# identifies a character position In a String
Dim lnSum @# Sum of calculations For a specific Set

@# Default result is False
IsCreditCard = False

@# ====
@# Strip all characters that are Not numbers.
@# ====

@# Loop through Each character inthe card number submited
For lnPosition = 1 To Len(anCardNumber)
@# Grab the current character
lsChar = Mid(anCardNumber, lnPosition, 1)
@# If the character is a number, append it To our new number
If IsNumeric(lsChar) Then lsNumber = lsNumber & lsChar

Next @# lnPosition

@# ====
@# The credit card number must be between 13 and 16 digits.
@# ====
@# If the length of the number is less Then 13 digits, then Exit the routine
If Len(lsNumber) < 13 Then Exit Function

@# If the length of the number is more Then 16 digits, then Exit the routine
If Len(lsNumber) > 16 Then Exit Function


@# ====
@# The credit card number must start with:
@# 4 For Visa Cards
@# 37 For American Express Cards
@# 5 For MasterCards
@# 6 For Discover Cards
@# ====

@# Choose action based on Type of card
Select Case LCase(asCardType)
@# VISA
Case "visa", "v"
@# If first digit Not 4, Exit Function
If Not Left(lsNumber, 1) = "4" Then Exit Function
@# American Express
Case "american express", "americanexpress", "american", "ax", "a"
@# If first 2 digits Not 37, Exit Function
If Not Left(lsNumber, 2) = "37" Then Exit Function
@# Mastercard
Case "mastercard", "master card", "master", "m"
@# If first digit Not 5, Exit Function
If Not Left(lsNumber, 1) = "5" Then Exit Function
@# Discover
Case "discover", "discovercard", "discover card", "d"
@# If first digit Not 6, Exit Function
If Not Left(lsNumber, 1) = "6" Then Exit Function

Case Else
End Select @# LCase(asCardType)

@# ====
@# If the credit card number is less Then 16 digits add zeros
@# To the beginning to make it 16 digits.
@# ====
@# Continue Loop While the length of the number is less Then 16 digits
While Not Len(lsNumber) = 16

@# Insert 0 To the beginning of the number
lsNumber = "0" & lsNumber

Wend @# Not Len(lsNumber) = 16

@# ====
@# Multiply Each digit of the credit card number by the corresponding digit of
@# the mask, and sum the results together.
@# ====

@# Loop through Each digit
For lnPosition = 1 To 16

@# Parse a digit from a specified position In the number
lnDigit = Mid(lsNumber, lnPosition, 1)

@# Determine If we multiply by:
@# 1 (Even)
@# 2 (Odd)
@# based On the position that we are reading the digit from
lnMultiplier = 1 + (lnPosition Mod 2)

@# Calculate the sum by multiplying the digit and the Multiplier
lnSum = lnDigit * lnMultiplier

@# (Single digits roll over To remain single. We manually have to Do this.)
@# If the Sum is 10 or more, subtract 9
If lnSum > 9 Then lnSum = lnSum - 9

@# Add the sum To the total of all sums
lnTotal = lnTotal + lnSum

Next @# lnPosition

@# ====
@# Once all the results are summed divide
@# by 10, If there is no remainder Then the credit card number is valid.
@# ====
IsCreditCard = ((lnTotal Mod 10) = 0)

End Function @# IsCreditCard

ASP精品屋 from http://www.planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=4&txtCodeId=6267

原文转自:http://www.ltesting.net