credit_card_reader 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.rspec +2 -0
- data/.travis.yml +7 -0
- data/Gemfile +8 -0
- data/README.md +46 -0
- data/credit_card_detector.gemspec +19 -0
- data/lib/credit_card_reader/detector.rb +33 -0
- data/lib/credit_card_reader/result.rb +9 -0
- data/lib/credit_card_reader/version.rb +6 -0
- data/lib/credit_card_reader.rb +3 -0
- data/spec/credit_card_reader/detector_spec.rb +30 -0
- data/spec/spec_helper.rb +11 -0
- metadata +90 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a6e0906c1984559719ffab18e1d379fbc0ca71c1
|
4
|
+
data.tar.gz: a07162b00f9b1be4f1c0178ff7797e5dd4f3fe5c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fee4feb0035d4751bd9233212e0e52f0e5e03de82fb252b994cece0cf8b7ef2459be9b68200bad70bdbf517631136afefcccef844a6177dbc8ccf05a457d16ad
|
7
|
+
data.tar.gz: feb831cd2a54557c94195dd356aa537c027212e8184c03f05e129053e3db8e511de82d2e3c613c99bdf503f1f377d595d5762e07f3083ffb0bf03b6fc26c8ffb
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# credit_card_reader
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/camelmasa/credit_card_reader.png)](https://travis-ci.org/camelmasa/credit_card_reader)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/camelmasa/credit_card_reader/badges/gpa.svg)](https://codeclimate.com/github/camelmasa/credit_card_reader)
|
5
|
+
[![Test Coverage](https://codeclimate.com/github/camelmasa/credit_card_reader/badges/coverage.svg)](https://codeclimate.com/github/camelmasa/credit_card_reader)
|
6
|
+
|
7
|
+
Detect credit card information.
|
8
|
+
|
9
|
+
Instration
|
10
|
+
----------
|
11
|
+
|
12
|
+
Add this line to your application's Gemfile:
|
13
|
+
|
14
|
+
gem 'credit_card_reader'
|
15
|
+
|
16
|
+
And then execute:
|
17
|
+
|
18
|
+
$ bundle
|
19
|
+
|
20
|
+
Or install it yourself as:
|
21
|
+
|
22
|
+
$ gem install credit_card_reader
|
23
|
+
|
24
|
+
Usage
|
25
|
+
-----
|
26
|
+
|
27
|
+
```rb
|
28
|
+
require "credit_card_reader"
|
29
|
+
|
30
|
+
detector = CreditCardReader::Detector.new
|
31
|
+
detector.detect("0123456789012345")
|
32
|
+
```
|
33
|
+
|
34
|
+
Test
|
35
|
+
----
|
36
|
+
|
37
|
+
```
|
38
|
+
bundle exec rspec
|
39
|
+
```
|
40
|
+
|
41
|
+
Sources
|
42
|
+
----
|
43
|
+
|
44
|
+
- https://github.com/Shopify/active_merchant/blob/master/lib/active_merchant/billing/credit_card_methods.rb
|
45
|
+
- http://www.skilledmonster.com/2014/04/19/java-regular-expressions-validate-credit-cards/
|
46
|
+
- http://www.richardsramblings.com/regex/credit-card-numbers/
|
@@ -0,0 +1,19 @@
|
|
1
|
+
$:.push File.expand_path('../lib', __FILE__)
|
2
|
+
require 'credit_card_reader/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'credit_card_reader'
|
6
|
+
s.version = CreditCardReader::VERSION
|
7
|
+
s.authors = ['Masahiro Saito']
|
8
|
+
s.email = ['camelmasa@gmail.com']
|
9
|
+
s.summary = 'Detect credit card information'
|
10
|
+
s.description = 'Detect credit card information'
|
11
|
+
s.homepage = 'https://github.com/camelmasa/credit_card_reader'
|
12
|
+
s.license = 'MIT'
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split($/)
|
15
|
+
s.require_paths = ['lib']
|
16
|
+
|
17
|
+
s.add_development_dependency "pry", "~> 0.10.0"
|
18
|
+
s.add_development_dependency 'rspec', '~> 3.0', '>= 3.0.0'
|
19
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module CreditCardReader
|
2
|
+
class Detector
|
3
|
+
CARD_BRANDS = {
|
4
|
+
american_express: /^3[47]\d{13}$/,
|
5
|
+
dankort: /^5019\d{12}$/,
|
6
|
+
discover: /^65[4-9][0-9]{13}|64[4-9][0-9]{13}|6011[0-9]{12}|(622(?:12[6-9]|1[3-9][0-9]|[2-8][0-9][0-9]|9[01][0-9]|92[0-5])[0-9]{10})$/,
|
7
|
+
diners_club: /^3(0[0-5]|[68]\d)\d{11}$/,
|
8
|
+
forbrugsforeningen: /^600722\d{10}$/,
|
9
|
+
jcb: /^35(28|29|[3-8]\d)\d{12}$/,
|
10
|
+
laser: /^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/,
|
11
|
+
master: /^(5[1-5]\d{4}|677189)\d{10}$/,
|
12
|
+
solo: /^6767\d{12}(\d{2,3})?$/,
|
13
|
+
switch: /^6759\d{12}(\d{2,3})?$/,
|
14
|
+
union_pay: /^62[0-5]\d{13,16}$/,
|
15
|
+
visa: /^4\d{12}(\d{3})?(\d{3})?$/,
|
16
|
+
maestro: /^(?:5[0678]\d\d|6304|6390|67\d\d)\d{8,15}$/,
|
17
|
+
}
|
18
|
+
|
19
|
+
def detect(number)
|
20
|
+
Result.new(brand: detect_brand(number))
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def detect_brand(number)
|
26
|
+
CARD_BRANDS.each do |brand, pattern|
|
27
|
+
return brand if number =~ pattern
|
28
|
+
end
|
29
|
+
|
30
|
+
nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CreditCardReader::Detector do
|
4
|
+
describe "#detect" do
|
5
|
+
subject { described_class.new.detect(number) }
|
6
|
+
|
7
|
+
shared_examples "a detect result" do |brand, number|
|
8
|
+
context "with #{brand}" do
|
9
|
+
let(:number) { number }
|
10
|
+
|
11
|
+
it { should be_a CreditCardReader::Result }
|
12
|
+
it { expect(subject.brand).to eq brand }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it_behaves_like 'a detect result', :american_express, "340123456789012"
|
17
|
+
it_behaves_like 'a detect result', :dankort, "5019012345678901"
|
18
|
+
it_behaves_like 'a detect result', :discover, "6011012345678912"
|
19
|
+
it_behaves_like 'a detect result', :diners_club, "30001234567890"
|
20
|
+
it_behaves_like 'a detect result', :forbrugsforeningen, "6007220123456789"
|
21
|
+
it_behaves_like 'a detect result', :jcb, "3528012345678901"
|
22
|
+
it_behaves_like 'a detect result', :laser, "6304012345670123"
|
23
|
+
it_behaves_like 'a detect result', :maestro, "5060123456789"
|
24
|
+
it_behaves_like 'a detect result', :master, "5101230123456789"
|
25
|
+
it_behaves_like 'a detect result', :solo, "6767012345678901"
|
26
|
+
it_behaves_like 'a detect result', :switch, "6759012345678901"
|
27
|
+
it_behaves_like 'a detect result', :union_pay, "6200123456789012"
|
28
|
+
it_behaves_like 'a detect result', :visa, "4012345678901"
|
29
|
+
end
|
30
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: credit_card_reader
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Masahiro Saito
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pry
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.10.0
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.10.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 3.0.0
|
37
|
+
type: :development
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '3.0'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 3.0.0
|
47
|
+
description: Detect credit card information
|
48
|
+
email:
|
49
|
+
- camelmasa@gmail.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- ".gitignore"
|
55
|
+
- ".rspec"
|
56
|
+
- ".travis.yml"
|
57
|
+
- Gemfile
|
58
|
+
- README.md
|
59
|
+
- credit_card_detector.gemspec
|
60
|
+
- lib/credit_card_reader.rb
|
61
|
+
- lib/credit_card_reader/detector.rb
|
62
|
+
- lib/credit_card_reader/result.rb
|
63
|
+
- lib/credit_card_reader/version.rb
|
64
|
+
- spec/credit_card_reader/detector_spec.rb
|
65
|
+
- spec/spec_helper.rb
|
66
|
+
homepage: https://github.com/camelmasa/credit_card_reader
|
67
|
+
licenses:
|
68
|
+
- MIT
|
69
|
+
metadata: {}
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
requirements: []
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 2.4.5
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Detect credit card information
|
90
|
+
test_files: []
|