pan_masker 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/pan_masker +1 -1
- data/lib/pan_masker/finder.rb +19 -4
- data/lib/pan_masker.rb +12 -2
- data/test/test_pan_masker.rb +22 -2
- metadata +2 -2
data/bin/pan_masker
CHANGED
data/lib/pan_masker/finder.rb
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
class Pan_masker::Finder
|
2
|
-
def self.find_and_mask_pan(data)
|
3
|
-
|
2
|
+
def self.find_and_mask_pan(data,cardType)
|
3
|
+
cardType = cardType.capitalize
|
4
|
+
case cardType
|
5
|
+
when 'DEFAULT'
|
6
|
+
extractedPans = data.scan(/[\d][0-9]{18}$|[\d][0-9]{15}$|[\d][0-9]{11}$/)
|
7
|
+
when 'VERVE'
|
8
|
+
extractedPans = data.scan(/[\d][0-9]{18}$/)
|
9
|
+
when 'MASTERCARD'
|
10
|
+
extractedPans = data.scan(/[\d][0-9]{15}$/)
|
11
|
+
when 'VISA'
|
12
|
+
extractedPans = data.scan(/[\d][0-9]{12}$|[\d][0-9]{15}$/)
|
13
|
+
when 'MAESTRO'
|
14
|
+
extractedPans = data.scan(/[\d][0-9]{11}$|[\d][0-9]{18}$/)
|
15
|
+
when 'CHINAUNIONPAY'
|
16
|
+
extractedPans = data.scan(/[\d][0-9]{18}$|[\d][0-9]{15}$/)
|
17
|
+
else
|
18
|
+
extractedPans = data.scan(/[\d][0-9]{18}$|[\d][0-9]{15}$|[\d][0-9]{11}$/)
|
19
|
+
end
|
4
20
|
|
5
21
|
if extractedPans.any?
|
6
22
|
arrayLength = extractedPans.count
|
@@ -18,5 +34,4 @@ class Pan_masker::Finder
|
|
18
34
|
end
|
19
35
|
end
|
20
36
|
|
21
|
-
require 'pan_masker/masker'
|
22
|
-
|
37
|
+
require 'pan_masker/masker'
|
data/lib/pan_masker.rb
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
class Pan_masker
|
2
|
-
def self.mask(
|
3
|
-
|
2
|
+
def self.mask(*args)
|
3
|
+
if args.size == 1
|
4
|
+
Pan_masker.maskStart(args[0],'default')
|
5
|
+
elsif args.size == 2
|
6
|
+
Pan_masker.maskStart(args[0],args[1])
|
7
|
+
else
|
8
|
+
Pan_masker.maskStart(args[0],'default')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.maskStart(data,cardType)
|
13
|
+
maskedData = Finder.find_and_mask_pan(data.to_s,cardType.to_s)
|
4
14
|
maskedData
|
5
15
|
end
|
6
16
|
end
|
data/test/test_pan_masker.rb
CHANGED
@@ -6,11 +6,31 @@ class PanMaskerTest < Test::Unit::TestCase
|
|
6
6
|
assert_equal "the is no pan in this string", Pan_masker.mask("the is no pan in this string")
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
9
|
+
def test_verve_pans
|
10
|
+
assert_equal "verve 19 111111*********1111", Pan_masker.mask("verve 19 1111111111111111111")
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_no_pan_master
|
14
|
+
assert_equal "the is no pan in this string", Pan_masker.mask("the is no pan in this string",'mastercard')
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_default_pans
|
18
|
+
assert_equal "verve 19 111111*********1111", Pan_masker.mask("verve 19 1111111111111111111")
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_default_pans_two
|
10
22
|
assert_equal "mastercard and visa 16 111111******1111", Pan_masker.mask("mastercard and visa 16 1111111111111111")
|
11
23
|
end
|
12
24
|
|
25
|
+
def test_visa_pans
|
26
|
+
assert_equal "visa 16 111111******1111", Pan_masker.mask("visa 16 1111111111111111",'visa')
|
27
|
+
end
|
28
|
+
|
13
29
|
def test_verve_pans
|
14
|
-
assert_equal "verve 19 111111*********1111", Pan_masker.mask("verve 19 1111111111111111111")
|
30
|
+
assert_equal "verve 19 111111*********1111", Pan_masker.mask("verve 19 1111111111111111111",'verve')
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_mastercard_pan
|
34
|
+
assert_equal "master 16 111111******1111", Pan_masker.mask("master 16 1111111111111111",'mastercard')
|
15
35
|
end
|
16
36
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pan_masker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-12 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A simple gem to scan a string, find and mask mastercard, visa, discover and verve credit/debit card pans to comply with PCIDSS standards
|
15
15
|
email: me@codegidi.com
|