dsf_checker 1.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.
- data/bin/dsf_checker +5 -0
- data/lib/dsf_checker.rb +62 -0
- metadata +48 -0
data/bin/dsf_checker
ADDED
data/lib/dsf_checker.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
class DsfChecker
|
2
|
+
def initialize(*args)
|
3
|
+
@numbers = []
|
4
|
+
args = args.flatten
|
5
|
+
File.exist?(args.first) ? work_file_numbers(args.first) : work_numbers(args)
|
6
|
+
end
|
7
|
+
|
8
|
+
def validate
|
9
|
+
ret = @numbers.inject([]) do |r,n|
|
10
|
+
@number = n
|
11
|
+
r << sprintf('%-29s', get_type + ': ' + @number) + valid_string
|
12
|
+
end
|
13
|
+
ret.size == 1 ? ret.first : ret.join("\n")
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def check_luhn
|
19
|
+
@number.split('').reverse.each_with_index.inject(0) do |s,(n,i)|
|
20
|
+
n = n.to_i
|
21
|
+
s + (i % 2 == 0 ? n : sum_digits(n*2))
|
22
|
+
end % 10 == 0
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_type
|
26
|
+
case @number
|
27
|
+
when /^3[47]\d{13}$/
|
28
|
+
'AMEX'
|
29
|
+
when /^5[15]\d{14}$/
|
30
|
+
'MasterCard'
|
31
|
+
when /^6011\d{12}$/
|
32
|
+
'Discover'
|
33
|
+
when /^4(\d{12}|\d{15})$/
|
34
|
+
'VISA'
|
35
|
+
else
|
36
|
+
'Unknown'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def work_numbers(numbers)
|
41
|
+
@numbers = [numbers].flatten.map{|n| work_number(n)}
|
42
|
+
end
|
43
|
+
|
44
|
+
def work_number(number)
|
45
|
+
n = number.dup
|
46
|
+
n.gsub(/\s/,'')
|
47
|
+
end
|
48
|
+
|
49
|
+
def work_file_numbers(numbers)
|
50
|
+
File.open(File.expand_path(numbers, Dir.pwd)).each do |line|
|
51
|
+
@numbers << work_number(line) if line =~ /\d+/
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def sum_digits(n)
|
56
|
+
n > 9 ? n % 10 + 1 : n
|
57
|
+
end
|
58
|
+
|
59
|
+
def valid_string
|
60
|
+
check_luhn ? '(valid)' : '(invalid)'
|
61
|
+
end
|
62
|
+
end
|
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dsf_checker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel da Silva Ferreira
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-13 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: This gem aims to check the format of numbers.
|
15
|
+
email: danieldasilvaferreira@gmail.com
|
16
|
+
executables:
|
17
|
+
- dsf_checker
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/dsf_checker.rb
|
22
|
+
- bin/dsf_checker
|
23
|
+
homepage: http://rubygems.org/gems/dsf_checker
|
24
|
+
licenses: []
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubyforge_project:
|
43
|
+
rubygems_version: 1.8.25
|
44
|
+
signing_key:
|
45
|
+
specification_version: 3
|
46
|
+
summary: Daniel da Silva Ferreira numbers CHECKER!
|
47
|
+
test_files: []
|
48
|
+
has_rdoc:
|