Olá galera, nesta Quick Tips, irei mostra como podemos validar os dígitos de um cartão de crédito, assim como é feito para validação de CNPJ e CPF, uma rotina pronta para uso, vamos à construção da mesma.

 

            Criamos uma função chamada ValidarCartaCredito, com os parâmetro pCartao: String, retornando uma valor Integer. Veremos agora a implementação desta função.

 

function TFrmPrincipal.ValidarCartaoCredito(pCartao: string): Integer;

var

    xCartao: string[21];

    VetCartao: array[0..21] of Byte absolute xCartao;

    kCartao: Integer;

    Cstr: string[21];

    y, x: Integer;

begin

    Cstr := '';

    FillChar(VetCartao, 22, #0);

    xCartao := pCartao;

    for x := 1 to 20 do

    if (VetCartao[x] in [48..57]) then

        Cstr := Cstr + chr(VetCartao[x]);

    xCartao := '';

    xCartao := Cstr;

    kCartao := 0;

    if not odd(Length(xCartao)) then

        for x := (Length(xCartao) - 1) downto 1 do

        begin

            if odd(x) then

                y := ((VetCartao[x] - 48) * 2)

            else

            y := (VetCartao[x] - 48);

            if (y >= 10) then

            y := ((y - 10) + 1);

            kCartao := (kCartao + y)

        end

    else

    for x := (Length(xCartao) - 1) downto 1 do

    begin

        if odd(x) then

            y := (VetCartao[x] - 48)

        else

            y := ((VetCartao[x] - 48) * 2);

        if (y >= 10) then

            y := ((y - 10) + 1);

        kCartao := (kCartao + y)

    end;

    x := (10 - (kCartao mod 10));

    if (x = 10) then

        x := 0;

    if (x = (VetCartao[Length(xCartao)] - 48)) then

        Result := Ord(Cstr[1]) - Ord('2')

    else

        Result := 0

end;

 

Usando a função.

Vamos adicionar 1 Edit(EdtCartaoCredito), 1 Label(LblResultado), e 1 BitBtn(BtnTestarCartao), e no clique do botão vamos implementar o seguinte :

 

procedure TFrmPrincipal. BtnTestarCartao Click(Sender: TObject);

begin

    case ValidarCartaoCredito(EdtCartaoCredito.Text) of

        0: LblResultado.Caption := 'Este Cartão é invalido ou desconhecido';

        1: LblResultado.Caption := 'Este Cartão é um AmEx';

        2: LblResultado.Caption := 'Este Cartão é um Visa';

        3: LblResultado.Caption := 'Este Cartão é um MasterCard;

    end;

end;

 

            Quando incluir o número do seu cartão, caso ele seja AmEx, Visa ou MasterCard, você poderá ver que uma mensagem será passada para o Caption do LblResultado, caso o valor seja inválido também será trato este tipo de erro. Como podemos notar, existe um Calculo assim como é feito no CPF e no CNPJ.

 

            Podemos criar uma unit, separada e implementar a mesma para reaproveitarmos esta função.

 

Fico por aqui ate à próxima Quick Tips.

 

Um abraço

 

 

Wesley Y

wyamazack@rwsolution.com.br