Esta função é muito útil para validação de Cartões de Crédito.
A função verifica, através de Expressão Regular, o formato do cartão de crédito, verifica o dígito verificador e retorna um booleano. True para Cartão Válido e False para Inválido.
Esta função suporta os seguintes cartões:
– MASTERCARD
– VISA
– AMEX
– DINERSCLUB.
<% '----------------------------------------------------- 'Funcao: IsCartaoCredito(ByVal strNumeroCartao, strTipoCartao) 'Sinopse: Verifica se o cartão de crédito passado por parametro ' está no formato correto e se o dígito é correto. ' Formatos aceitos: ' Cartão Prefixo Tamanho ' MASTERCARD 51-55 16 ' VISA 4 13 ou 16 ' AMEX 34 ou 37 15 ' DINERSCLUB 300-305 ou 36 ou 38 14 'Parametro: strNumeroCartao: Numero do cartão (somente número) ' strTipoCartao: Pode assumir os seguintes valores: ' MASTERCARD, VISA, AMEX, DINERSCLUB 'Retorno: Booleano 'Autor: Gabriel Fróes - www.codigofonte.com.br '----------------------------------------------------- Function IsCartaoCredito(ByVal strNumeroCartao, strTipoCartao) 'Verificando se o valor passado é todo numerico If Not IsNumeric(strNumeroCartao) Then Retorno = False Else Retorno = True End If 'Valor é numérico If Retorno Then 'Selecionando o prefixo do cartão strTipoCartao = Ucase(strTipoCartao) Select Case strTipoCartao Case "MASTERCARD" strExpressaoRegular = "^5[1-5]d{14}$" Case "VISA" strExpressaoRegular = "^4(d{12}|d{15})$" Case "AMEX" strExpressaoRegular = "^3(3|7)d{14}$" Case "DINERSCLUB" strExpressaoRegular = "^3((6|8)d{12})|(00|01|02|03|04|05)d{11})$" End Select 'Validando o formato do cartão de crédito Set regEx = New RegExp ' Cria o Objeto Expressão regEx.Pattern = strExpressaoRegular ' Expressão Regular regEx.IgnoreCase = True ' Sensitivo ou não regEx.Global = True Retorno = RegEx.Test(strNumeroCartao) Set regEx = Nothing 'Formato correto If Retorno Then '----------------------------------------- 'Processo de validação do numero do cartão '----------------------------------------- intVerificaSoma = 0 blnFlagDigito = False For Cont = Len(strNumeroCartao) To 1 Step -1 Digito = Asc(Mid(strNumeroCartao, Cont, 1)) 'Isola o caracter da vez If (Digito > 47) And (Digito < 58) Then 'Somente se for inteiro Digito = Digito - 48 'Converte novamente para numero (-48) If blnFlagDigito Then Digito = Digito + Digito 'Primeiro duplica-o If Digito > 9 Then 'Verifica se o Digito é maior que 9 Digito = Digito - 9 'Força ser somente um número End If End If blnFlagDigito = Not blnFlagDigito intVerificaSoma = intVerificaSoma + Digito If intVerificaSoma > 9 Then intVerificaSoma = intVerificaSoma - 10 'Mesmo que MOD 10 só que mais rapido End If End If Next If intVerificaSoma <> 0 Then ' Deve totalizar zero Retorno = False Else Retorno = True End If '----------------------------------------- End If End If 'Retornando a função IsCartaoCredito = Retorno End Function %>