CreditCardValidations

Build Status Dependency Status Coverage Status Code Climate Gem Version License

Gem adds validator to check whether or not a given number actually falls within the ranges of possible numbers prior to performing such verification, and, as such, CreditCardValidations simply verifies that the credit card number provided is well-formed.

More info about card BIN numbers http://en.wikipedia.org/wiki/Bank_card_number

Installation

Add this line to your application's Gemfile:

gem 'credit_card_validations'

And then execute:

$ bundle

Or install it yourself as:

$ gem install credit_card_validations

Usage

The following issuing institutes are accepted:

Name Key
American Express :amex
China UnionPay :unionpay
Dankort :dankort
Diners Club :diners
Elo :elo
Discover :discover
Hipercard :hipercard
JCB :jcb
Maestro :maestro
MasterCard :mastercard
MIR :mir
Rupay :rupay
Solo :solo
Switch :switch
Visa :visa

The following are supported with with plugins

Name Key
Diners Club US :diners_us
EnRoute :en_route
Laser :laser

Examples using string monkey patch

    require 'credit_card_validations/string'
    '5274 5763 9425 9961'.credit_card_brand   #=> :mastercard
    '5274 5763 9425 9961'.credit_card_brand_name   #=> "MasterCard"
    '5274 5763 9425 9961'.valid_credit_card_brand?(:mastercard, :visa) #=> true
    '5274 5763 9425 9961'.valid_credit_card_brand?(:amex) #=> false
    '5274 5763 9425 9961'.valid_credit_card_brand?('MasterCard') #=> true

ActiveModel support

only for certain brands

    class CreditCardModel 
        attr_accessor :number
        include ActiveModel::Validations
        validates :number, credit_card_number: {brands: [:amex, :maestro]} 
    end

for all known brands

    validates :number, presence: true, credit_card_number: true

Examples using CreditCardValidations::Detector class

    number = "4111111111111111"
    detector = CreditCardValidations::Detector.new(number)
    detector.brand #:visa
    detector.visa? #true
    detector.valid?(:mastercard,:maestro) #false
    detector.valid?(:visa, :mastercard) #true
    detector.issuer_category  #"Banking and financial"

Also You can add your own brand rules to detect other credit card brands/types

passing name,length(integer/array of integers) and prefix(string/array of strings) Example

    CreditCardValidations.add_brand(:voyager, {length: 15, prefixes: '86'})
    voyager_test_card_number = '869926275400212'
    CreditCardValidations::Detector.new(voyager_test_card_number).brand #:voyager
    CreditCardValidations::Detector.new(voyager_test_card_number).voyager? #true

Remove brands also supported

    CreditCardValidations::Detector.delete_brand(:maestro)

Check luhn

    CreditCardValidations::Detector.new(@credit_card_number).valid_luhn?
    #or
    CreditCardValidations::Luhn.valid?(@credit_card_number)

Generate credit card numbers that pass validation

 CreditCardValidations::Factory.random(:amex)
 # => "348051773827666"
 CreditCardValidations::Factory.random(:maestro)
 # => "6010430241237266856"

Plugins

  require 'credit_card_validations/plugins/en_route'
  require 'credit_card_validations/plugins/laser'
  require 'credit_card_validations/plugins/diners_us'

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request