A long-lived project that still receives updates
A ruby gem for validating credit card numbers
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 5.14.3
= 1.1.0
>= 0
>= 0

Runtime

>= 5.2, < 8.1
>= 5.2, < 8.1
 Project Readme

CreditCardValidations

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 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'

Configuration

In order to override default data source you can copy original one , change it and configure during rails initializer

 CreditCardValidations.configure do |config|
      config.source = '/path/to/my_brands.yml'
 end

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