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.
Files changed (3) hide show
  1. data/bin/dsf_checker +5 -0
  2. data/lib/dsf_checker.rb +62 -0
  3. metadata +48 -0
data/bin/dsf_checker ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'dsf_checker'
4
+
5
+ puts DsfChecker.new(ARGV).validate
@@ -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: