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