Contributor: SCOTT KANE
{
Here's a snippet I thought some programmers could use on this list, its'
from the Webhub list... Calculates the checksum of a credit card.
The webhub javascript directory contains a nice bit of code from
Mauricio Korbman that does the mod10 credit card checksum for validating
that an entered credit card number is ok. This is very important for
us, but because we still want to maintain backward compatibility for
mission critical events (and what's more critical than getting money
over the web?) I have "ported" this code into delphi.
I only have one credit card, a visa, and the code works right for it.
So I'm sending this to the list for two purposes, to share this with
everyone and to get anybody else who finds it useful to take a look at
it and see if it's running right for other card types (and to catch any
dumb mistakes I've committed).
-Mark Wladika
markw@kweb.com
}
procedure TMainForm.Button1Click(Sender: TObject);
var
cardNumber: String;
CalcCard, calcs, CC, i: Integer;
R: Real;
begin
cardNumber := Edit1.Text;
R := Length(cardNumber) / 2;
 if (Length(cardNumber) - (R*2) = 0) then
 begin
 for i := Length(cardNumber)-1 downto 1 do
 R := i / 2;
 if (R < 1) then R := R + 1; if (i - (R * 2)  0) then
 calcs := StrToInt((Copy(cardNumber, (i-1), 1))) * 2
 else
 calcs := StrToInt((Copy(cardNumber, (i-1), 1)));
 if (calcs>= 10) then
 calcs := calcs - 10 + 1;
 CalcCard := CalcCard + calcs;
 end
 else
 begin
 for i := Length(cardNumber)-1 downto 1 do
 R := i / 2;
 if (R < 1) then R := R + 1; if (i - (R * 2)  0) then
 calcs := StrToInt((Copy(cardNumber, (i-1), 1)))
 else
 calcs := StrToInt((Copy(cardNumber, (i-1), 1))) * 2;
 if (calcs>= 10)then
 calcs := calcs - 10 + 1;
 CalcCard := CalcCard + calcs;
 end;
 calcs := 10 - (CalcCard mod 10);
 if (calcs = 10) then
 calcs := 0;
 if (calcs = StrToInt((Copy(cardNumber, Length(cardNumber)-1,1)))) then
 Edit2.Text := 'Credit Card Number Valid'
 else
 Edit2.Text := 'Credit Card Number Not Valid';
end;


AltStyle によって変換されたページ (->オリジナル) /