dsf_checker 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: