Code Monkey home page Code Monkey logo

credit_check's Introduction

Learning Goals

  • break a problem into logical components
  • implement appropriate Ruby syntax
  • utilize methods and classes

Let's write a program that can detect mistakes in a credit card number.

Background: Luhn Algorithm

The Luhn algorithm is a check-summing algorithm best known for checking the validity of credit card numbers.

You can checkout the full description on Wikipedia: http://en.wikipedia.org/wiki/Luhn_algorithm

Description

(adapted from Wikipedia)

The formula verifies a number against its included check digit, which is usually appended to a partial account number to generate the full account number. This full account number must pass the following test:

  • starting with the first digit, double the value of every other digit
  • if the product of this doubling operation is greater than 9 (e.g., 7 * 2 = 14), then sum the digits of the products (e.g., 10: 1 + 0 = 1, 14: 1 + 4 = 5).
  • take the sum of all the digits
  • if the sum is divisible by ten, the number is valid

Example

Validating an Account Number

Using 5541808923795240 as our sample input:

Account number:        5    5    4    1    8    0    8    9    2    3    7    9    5    2    4    0
2x every other digit:  10   5    8    1    16   0    16   9    4    3    14   9    10   2    8    0
Summed digits over 10: 1    5    8    1    7    0    7    9    4    3    5    9    1    2    8    0
Results summed:        70
Divisible by 10?:      70 % 10 == 0

Since the summed results modulo 10 is zero, the account number is valid according to the algorithm.

Assignment

Setup

  1. Fork this Repository
  2. Clone your forked repo to your machine with git clone <ssh key for your repo>

Iteration 1 - The Luhn Algorithm

Open credit_check.rb in your lib directory. You should see this template:

card_number = "5541808923795240"

# Your Luhn Algorithm Here

# Output
## If it is valid, print "The number [card number] is valid!"
## If it is invalid, print "The number [card number] is invalid!"

Fill out the file so that it will print out the validity of the given card_number. The number included in the template is a valid example.

Sample Data

If helpful, you can use the following sample data:

  • Valid: 5541808923795240, 4024007136512380, 6011797668867828
  • Invalid: 5541801923795240, 4024007106512380, 6011797668868728

Iteration 2 - Credit Card Class

Create a CreditCard class based on the following criteria:

  • A CreditCard is passed two arguments upon initialization
    • The first argument is a String representing the card number
    • The second argument is an Integer representing the CreditCard's limit
  • A CreditCard has getter methods called card_number and limit for reading the card number and limit
  • A CreditCard has a method called is_valid? that takes no arguments and returns either true or false based on whether or not the card number is valid.
  • A CreditCard has a method called last_four that returns a String of the last four digits of the card number

If the previous criteria are met, you should be able to interact with the CreditCard class from a Pry session like so:

pry(main)> require './lib/credit_card'
#=> true

pry(main)> credit_card = CreditCard.new("5541808923795240", 15000)
#=> #<CreditCard:0x00007fbb1ca5f698 @card_number="5541808923795240", @limit=15000>

pry(main)> credit_card.card_number
#=> "5541808923795240"

pry(main)> credit_card.limit
#=> 15000

pry(main)> credit_card.last_four
#=> "5240"

pry(main)> credit_card.is_valid?
#=> true

Also, if the previous criteria are met, the bank_test.rb test should pass.

Iteration 3 - Testing

Write tests for your CreditCard class that cover that expected behavior described in the previous iteration.

Iteration 4 - Extensions

  • Create a command line interface that allows the user to validate a number

  • Add functionality to calculate the check sum digit.

  • Can you make it work for American Express numbers? 342804633855673 is valid but 342801633855673 is invalid

credit_check's People

Contributors

brianzanti avatar katbrandt avatar s-espinosa avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.