Você está na página 1de 2

<%

'-----------------------------------------------------
'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
%>

Você também pode gostar