💳 ruby gem for validating credit card numbers, generating valid numbers, luhn checks
Latest commit d4ef627 Apr 20, 2017 @Fivell committed on GitHub Merge pull request #78 from senid231/patch-1
fix table in readme
Failed to load latest commit information.
gemfiles freeze bundler for CI Jan 24, 2017
lib version bump Feb 8, 2017
spec new elo card bins Feb 8, 2017
.hound.yml reformat code Jul 15, 2015
.travis.yml freeze bundler for CI Jan 24, 2017
Changelog.md version bump Feb 8, 2017
Gemfile test_unit -> mini_tests Jul 23, 2014
LICENSE.txt initial commit Mar 19, 2013
README.md fix table in readme Apr 20, 2017
Rakefile restruct tests Jan 11, 2015
credit_card_validations.gemspec version bump Feb 8, 2017



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


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


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]} 

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


Check luhn


Generate credit card numbers that pass validation

 # => "348051773827666"
 # => "6010430241237266856"


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


  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