function ValidateCreditCardNumber(CreditCardNumber:string):boolean;
Const
DigitsAllowed = ['0'..'9'];
MaxCCSize = 19;
MinCCSize = 13;
var
i : integer;
CleanCardNumber: string;
digit: Integer;
CheckSum: Integer; { Holds the value of the operation }
Flag: Boolean; { used to indicate when ready }
Counter: Integer; { index counter }
PartNumber: string; { used to extract each digit of number }
Number: Integer; { used to convert each digit to integer}
Begin
CleanCardNumber:='';
digit:=0;
// Remove any non numeric value
for I := 1 to Length(CreditCardNumber) do
Begin
if CreditCardNumber[i] in DigitsAllowed then
CleanCardNumber:= CleanCardNumber + CreditCardNumber[i];
End;
// Check for valid card length number
if (Length(CleanCardNumber) > MaxCCSize) then
Begin
Result:= False;
Exit;
End;
// get the starting value for our counter
Counter := Length(CleanCardNumber);
CheckSum := 0;
PartNumber := '';
Number := 0;
Flag := false;
while (Counter >= 1) do
begin
// get the current digit
PartNumber := Copy(CleanCardNumber, Counter, 1);
Number := StrToInt(PartNumber); // convert to integer
if (Flag) then // only do every other digit
begin
Number := Number * 2;
if (Number >= 10) then
Number := Number - 9;
end;
CheckSum := CheckSum + Number;
Flag := not (Flag);
Counter := Counter - 1;
end;
result := ((CheckSum mod 10) = 0);
End;
|