From: John Joyce Date: 2007-04-27T21:10:37+09:00 Subject: Re: [QUIZ] Checking Credit Cards (#122) On Apr 27, 2007, at 8:59 PM, Ruby Quiz wrote: > The three rules of Ruby Quiz: > > 1. Please do not post any solutions or spoiler discussion for this > quiz until > 48 hours have passed from the time on this message. > > 2. Support Ruby Quiz by submitting ideas as often as you can: > > http://www.rubyquiz.com/ > > 3. Enjoy! > > Suggestion: A [QUIZ] in the subject of emails about the problem > helps everyone > on Ruby Talk follow the discussion. Please reply to the original > quiz message, > if you can. > > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- > =-=-=-=-=-=-= > > Before a credit card is submitted to a financial institution, it > generally makes > sense to run some simple reality checks on the number. The numbers > are a good > length and it's common to make minor transcription errors when the > card is not > scanned directly. > > The first check people often do is to validate that the card > matches a known > pattern from one of the accepted card providers. Some of these > patterns are: > > +============+=============+===============+ > | Card Type | Begins With | Number Length | > +============+=============+===============+ > | AMEX | 34 or 37 | 15 | > +------------+-------------+---------------+ > | Discover | 6011 | 16 | > +------------+-------------+---------------+ > | MasterCard | 51-55 | 16 | > +------------+-------------+---------------+ > | Visa | 4 | 13 or 16 | > +------------+-------------+---------------+ > > All of these card types also generate numbers such that they can be > validated by > the Luhn algorithm, so that's the second check systems usually > try. The steps > are: > > 1. Starting with the next to last digit and continuing with every > other > digit going back to the beginning of the card, double the digit > 2. Sum all doubled and untouched digits in the number > 3. If that total is a multiple of 10, the number is valid > > For example, given the card number 4408 0412 3456 7893: > > Step 1: 8 4 0 8 0 4 2 2 6 4 10 6 14 8 18 3 > Step 2: 8+4+0+8+0+4+2+2+6+4+1+0+6+1+4+8+1+8+3 = 70 > Step 3: 70 % 10 == 0 > > Thus that card is valid. > > Let's try one more, 4417 1234 5678 9112: > > Step 1: 8 4 2 7 2 2 6 4 10 6 14 8 18 1 2 2 > Step 2: 8+4+2+7+2+2+6+4+1+0+6+1+4+8+1+8+1+2+2 = 69 > Step 3: 69 % 10 != 0 > > That card is not valid. > > This week's Ruby Quiz is to write a program that accepts a credit > card number as > a command-line argument. The program should print the card's type > (or Unknown) > as well a Valid/Invalid indication of whether or not the card > passes the Luhn > algorithm. > For completeness and to make this Quiz exercise valid to more people, can anyone include the information for other major credit cards from major countries? Japan: JCB, et. al., U.K.: Barclay, et. al. , etc... This would be good to expand the exercise and return more to our friends in various areas! Discover is itself not found outside of North America, AFIK.