Validar Cartão de Crédito com Expressão Regular

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

Nós queremos saber sua opinião aqui