Program that checks valid credit card number!
Don't get to excited about the title, this program just checks if a entered number could be valid not if it is someones actual credit card number. So my math teacher thinks hes l33t by teaching us if credit card number are valid, well I decided to make a little simba program to check(Credits to Jani for Int to array function(edited a little by me) and kasi for the odd number help(got mixed up -.-))
An American credit card number is valid if:
It has 16 digits.
All of the odd number added and multiplied by 2 plus the odd digits over 4 added together, plus the even digits added together ends in 4
Simba Code:
var
number:string;
function IntDigits(int: Int64): TIntegerArray;
var
s: string;
l, i: Integer;
begin
s := Int64ToStr(int);
l := Length(s);
SetLength(Result, l);
for i := 0 to (l - 1) do
Result[i] := StrToInt(s[(i + 1)]);
end;
procedure TIAAppend(var TIA: TIntegerArray; x: Integer);
var
aL: Integer;
begin
aL := (Length(TIA) + 1);
SetLength(TIA, aL);
TIA[(aL - 1)] := Integer(x);
end;
function even_number(Number: integer): boolean;
begin
result := (Number mod 2 = 0);
end;
function add_TIA(arr:TIntegerArray):Integer;
var
i:Integer;
begin
for i := 0 to high(arr) do
result := result + arr[i];
end;
function check_valid_credit(number:Int64):Boolean;
var
card_number, even, odd:TIntegerArray;
i, total:Integer;
begin
card_number := IntDigits(number);
if (length(card_number) <> 16) then
begin
result := false;
exit;
end;
for i := 0 to high(card_number) do
begin
if even_number(i) then
TIAAppend(even, card_number[i]);
if (not even_number(i)) then
TIAAppend(odd, card_number[i]);
end;
total := total + (add_TIA(odd) * 2) + add_TIA(even);
for i := 0 to high(odd) do
begin
if (odd[i] > 4) then
total := total + 1
end;
result := (total mod 10 = 0);
end;
var
t:Integer;
begin
InputQuery('Credit Card number', 'Enter a credit card number', number);
case check_valid_credit(StrToInt64(number)) of
True: Writeln('You entered a valid credit card number!');
false: Writeln('You entered a invalid credit card number!');
end;
end.
meh on the side note I was going to make it generate random credit card numbers... but meh can't generate a random int64 (or can you?)