```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).

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;

```