I ran across the following article in a math geek book I found at Barnes and Noble:

So basically, you sum up the values of ever element that is in an even position and then you take every element in an odd position and multiply it by two. Then if it is a single digit add it to the sum. If it is two digits, add each digit to the sum separately. Then if the answer is evenly divisible by 10, it is a possible valid Card number.

So I came up with the following Pascal source:

For i := 1 to 16 Do

Begin

If (i Mod 2) <> 0 Then

If CardArray[i] < 5 Then

OddSum := OddSum + (CardArray[i] * 2)

Else

Begin

OddSum := OddSum + 1;

OddSum := OddSum + ((CardArray[i] * 2) - 10);

End

Else

EvenSum := EvenSum + CardArray[i];

ValidEdit.Text := IntToStr(EvenSum+OddSum);

End;

CardArray is a table with the first sixteen elements loaded with each digit of a credit card and after running it through the above source it gave me a number evenly divisible by 10. Except one time when I got one of the digits wrong, then it was not evenly divisible by 10. So I have to say the algorithm works.

Cool, Huh???