Você está na página 1de 2

<% '----------------------------------------------------'Funcao: IsCartaoCredito(ByVal strNumeroCartao, strTipoCartao) 'Sinopse: Verifica se o carto de crdito passado por parametro ' est no formato

correto e se o dgito correto. ' Formatos aceitos: ' Carto 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 carto (somente nmero) ' strTipoCartao: Pode assumir os seguintes valores: ' MASTERCARD, VISA, AMEX, DINERSCLUB 'Retorno: Booleano 'Autor: Gabriel Fres - 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 numrico If Retorno Then 'Selecionando o prefixo do carto 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 carto de crdito Set regEx = New RegExp Objeto Expresso regEx.Pattern = strExpressaoRegular Expresso Regular regEx.IgnoreCase = True ou no regEx.Global = True Retorno = RegEx.Test(strNumeroCartao) Set regEx = Nothing 'Formato correto If Retorno Then '----------------------------------------'Processo de validao do numero do carto '----------------------------------------intVerificaSoma = 0 blnFlagDigito = False For Cont = Len(strNumeroCartao) To 1 Step -1 ' Cria o ' ' Sensitivo

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 'Fora ser somente um nmero 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 funo IsCartaoCredito = Retorno End Function %>