The 12121 check digit algorithm
Scott Taylor
staylor at pmdvax.UUCP
Mon Jan 8 07:02:37 AEST 1990
in article <1498 at skye.ed.ac.uk>, ken at aiai.ed.ac.uk (Ken Johnson) says:
> * check_digit_for computes and returns the check digit for a given number,
> * the number having first been stripped of any check digit.
> * How it works: Assume the number has the digits abcde. Then add together
> * a+c+e+2*b+2*d. To that total add 1 if b>=5 and another 1 if d>=5. The
> * check digit is that total modulo 10.
With all the copyright crap aside (why do you people bother arguing?)
a much better method, used by the Visa and MasterCard people, and heavily
in the COBOL world, is the following (which ken's seems to be a variant of):
a + SUM(b) + c + SUM(d) + e
Where: SUM(x) :: The sum of the digits of x added to itself,
e.g. 1 = 1+1 = 2
2 = 2+2 = 4
3 = 3+3 = 6
4 = 4+4 = 8
5 = 5+5 = 10 = 1 + 0 = 1
6 = 6+6 = 12 = 1 + 2 = 3
You got the idea...
Again, the check digit is MOD 10, however it will be the difference
of 10 less the check digit MOD 10 ( 9 -> 10 - 9 = 1). This method is very
accurate at determining transposed digits too. Try it on your Visa or MC.
For 16 digit cards, perform SUM on the odd number digits; for 13
digit Visa numbers, the even digits. The last digit is the Check so
don't include it.
I have algorithms in C and COBOL if anyone needs them. I would have posted
them here already, however I had already posted the article.
--
Scott G. Taylor Pmd Resources (818) 991-0068
{wlbr,mahendo}!snidely!staylor 31230 Cedar Valley Dr.
Westlake Village, CA 91362
"Vienoti Latvijai!"
More information about the Comp.lang.c
mailing list