credit_card_reader 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
[](https://travis-ci.org/camelmasa/credit_card_reader)
|
4
|
+
[](https://codeclimate.com/github/camelmasa/credit_card_reader)
|
5
|
+
[](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: []
|