validator_ie 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/CODE_OF_CONDUCT.md +49 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +42 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/lib/validator_ie.rb +42 -0
  13. data/lib/validator_ie/core/mod_functions.rb +20 -0
  14. data/lib/validator_ie/core/state_ac.rb +47 -0
  15. data/lib/validator_ie/core/state_al.rb +47 -0
  16. data/lib/validator_ie/core/state_am.rb +37 -0
  17. data/lib/validator_ie/core/state_ap.rb +51 -0
  18. data/lib/validator_ie/core/state_ba.rb +47 -0
  19. data/lib/validator_ie/core/state_ce.rb +34 -0
  20. data/lib/validator_ie/core/state_df.rb +47 -0
  21. data/lib/validator_ie/core/state_es.rb +38 -0
  22. data/lib/validator_ie/core/state_go.rb +55 -0
  23. data/lib/validator_ie/core/state_ma.rb +39 -0
  24. data/lib/validator_ie/core/state_mg.rb +49 -0
  25. data/lib/validator_ie/core/state_ms.rb +38 -0
  26. data/lib/validator_ie/core/state_mt.rb +38 -0
  27. data/lib/validator_ie/core/state_pa.rb +38 -0
  28. data/lib/validator_ie/core/state_pb.rb +38 -0
  29. data/lib/validator_ie/core/state_pe.rb +35 -0
  30. data/lib/validator_ie/core/state_pi.rb +38 -0
  31. data/lib/validator_ie/core/state_rj.rb +34 -0
  32. data/lib/validator_ie/core/state_rn.rb +39 -0
  33. data/lib/validator_ie/core/state_ro.rb +38 -0
  34. data/lib/validator_ie/core/state_rr.rb +33 -0
  35. data/lib/validator_ie/core/state_rs.rb +34 -0
  36. data/lib/validator_ie/core/state_sc.rb +35 -0
  37. data/lib/validator_ie/core/state_se.rb +35 -0
  38. data/lib/validator_ie/core/state_sp.rb +41 -0
  39. data/lib/validator_ie/core/state_to.rb +35 -0
  40. data/lib/validator_ie/version.rb +3 -0
  41. data/validator_ie.gemspec +32 -0
  42. metadata +127 -0
@@ -0,0 +1,38 @@
1
+ module ValidatorIE
2
+
3
+ class StatePI
4
+ include ActiveModel::Validations
5
+
6
+ attr_accessor :number
7
+ validates :number, length: { minimum: 9, maximum: 9 }, numericality: true, presence: true
8
+ validate :number_should_mod11
9
+
10
+ def initialize(opts={})
11
+ opts.each do |key, value|
12
+ self.public_send("#{key}=", value)
13
+ end
14
+ end
15
+
16
+ def number_should_code_state
17
+ number[0..1].eql?('15')
18
+ end
19
+
20
+ def number_should_mod11
21
+ result = number_should_modX(11, 7)
22
+ return if result
23
+ errors.add(:number, 'não é válido a inscrição estadual.')
24
+ end
25
+
26
+ private
27
+ def number_should_modX(mod, at, final = number.size)
28
+ numberX = number.split(//).map(&:to_i)
29
+ sum = ModFunctions.sumX(numberX, at, final)
30
+
31
+ divmod = sum.divmod(mod).last
32
+ digit = divmod >= 10 ? 0 : 11 - divmod
33
+ numberX[at + 1].eql?(digit)
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,34 @@
1
+ module ValidatorIE
2
+
3
+ class StateRJ
4
+ include ActiveModel::Validations
5
+
6
+ attr_accessor :number
7
+ validates :number, length: { minimum: 8, maximum: 8 }, numericality: true, presence: true
8
+ validate :number_should_mod11
9
+
10
+ def initialize(opts={})
11
+ opts.each do |key, value|
12
+ self.public_send("#{key}=", value)
13
+ end
14
+ end
15
+
16
+ def number_should_mod11
17
+ result = number_should_modX(11, 6, 7) # Final Sequence = 7
18
+ return if result
19
+ errors.add(:number, 'não é válido a inscrição estadual.')
20
+ end
21
+
22
+ private
23
+ def number_should_modX(mod, at, final = number.size)
24
+ numberX = number.split(//).map(&:to_i)
25
+ sum = ModFunctions.sumX(numberX, at, final)
26
+
27
+ divmod = sum.divmod(mod).last
28
+ digit = divmod <= 1 ? 0 : mod - divmod
29
+ numberX[at + 1].eql?(digit)
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'mod_functions'
2
+
3
+ module ValidatorIE
4
+
5
+ class StateRN
6
+ include ActiveModel::Validations
7
+
8
+ attr_accessor :number
9
+ validates :number, length: { minimum: 9, maximum: 10 }, numericality: true, presence: true
10
+ validate :number_should_code_state
11
+ validate :number_should_mod11
12
+
13
+ def initialize(opts={})
14
+ opts.each do |key, value|
15
+ self.public_send("#{key}=", value)
16
+ end
17
+ end
18
+
19
+ def number_should_code_state
20
+ number[0..1].eql?('20')
21
+ end
22
+
23
+ def number_should_mod11
24
+ result = number_should_modX(11, number.size - 2)
25
+ return if result
26
+ errors.add(:number, 'não é válido a inscrição estadual.')
27
+ end
28
+
29
+ private
30
+ def number_should_modX(mod, at, final = number.size)
31
+ numberX = number.split(//).map(&:to_i)
32
+ sum = ModFunctions.sumX(numberX, at, final) * 10 # One digits
33
+ digit = sum.divmod(mod).last
34
+ digit = digit >= 10 ? 0 : digit
35
+ numberX[at + 1].eql?(digit)
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,38 @@
1
+ require_relative 'mod_functions'
2
+
3
+ module ValidatorIE
4
+
5
+ class StateRO
6
+ include ActiveModel::Validations
7
+
8
+ attr_accessor :number
9
+ validates :number, length: { minimum: 9, maximum: 14 }, numericality: true, presence: true
10
+ validate :number_should_mod11
11
+
12
+ def initialize(opts={})
13
+ opts.each do |key, value|
14
+ self.public_send("#{key}=", value)
15
+ end
16
+ end
17
+
18
+ def number_should_mod11
19
+ unless number.size == 14
20
+ nOr = number
21
+ nOr = nOr[3..nOr.size].to_s.rjust(14, "0") # Fix to 14 digits
22
+ self.number = nOr
23
+ end
24
+ result = number_should_modX(11, number.size - 2, 9)
25
+ return if result
26
+ errors.add(:number, 'não é válido a inscrição estadual.')
27
+ end
28
+
29
+ private
30
+ def number_should_modX(mod, at, final = number.size)
31
+ numberX = number.split(//).map(&:to_i)
32
+ sum = ModFunctions.sumX(numberX, at, final)
33
+ digit = 11 - sum.divmod(mod).last
34
+ numberX[at + 1].eql?(digit)
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'mod_functions'
2
+
3
+ module ValidatorIE
4
+
5
+ class StateRR
6
+ include ActiveModel::Validations
7
+
8
+ attr_accessor :number
9
+ validates :number, length: { minimum: 9, maximum: 9 }, numericality: true, presence: true
10
+ validate :number_should_mod11
11
+
12
+ def initialize(opts={})
13
+ opts.each do |key, value|
14
+ self.public_send("#{key}=", value)
15
+ end
16
+ end
17
+
18
+ def number_should_mod11
19
+ result = number_should_modX(9, number.size - 2, 9)
20
+ return if result
21
+ errors.add(:number, 'não é válido a inscrição estadual.')
22
+ end
23
+
24
+ private
25
+ def number_should_modX(mod, at, final = number.size)
26
+ numberX = number.split(//).map(&:to_i)
27
+ sum = ModFunctions.sumX(numberX, at, final, false)
28
+ digit = sum.divmod(mod).last
29
+ numberX[at + 1].eql?(digit)
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,34 @@
1
+ require_relative 'mod_functions'
2
+
3
+ module ValidatorIE
4
+
5
+ class StateRS
6
+ include ActiveModel::Validations
7
+
8
+ attr_accessor :number
9
+ validates :number, length: { minimum: 10, maximum: 10 }, numericality: true, presence: true
10
+ validate :number_should_mod11
11
+
12
+ def initialize(opts={})
13
+ opts.each do |key, value|
14
+ self.public_send("#{key}=", value)
15
+ end
16
+ end
17
+
18
+ def number_should_mod11
19
+ result = number_should_modX(11, number.size - 2, 9)
20
+ return if result
21
+ errors.add(:number, 'não é válido a inscrição estadual.')
22
+ end
23
+
24
+ private
25
+ def number_should_modX(mod, at, final = number.size)
26
+ numberX = number.split(//).map(&:to_i)
27
+ sum = ModFunctions.sumX(numberX, at, final) * 10 # One digits
28
+ digit = sum.divmod(mod).last
29
+ digit = digit >= 10 ? 0 : digit
30
+ numberX[at + 1].eql?(digit)
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,35 @@
1
+ require_relative 'mod_functions'
2
+
3
+ module ValidatorIE
4
+
5
+ class StateSC
6
+ include ActiveModel::Validations
7
+
8
+ attr_accessor :number
9
+ validates :number, length: { minimum: 9, maximum: 9 }, numericality: true, presence: true
10
+ validate :number_should_mod11
11
+
12
+ def initialize(opts={})
13
+ opts.each do |key, value|
14
+ self.public_send("#{key}=", value)
15
+ end
16
+ end
17
+
18
+ def number_should_mod11
19
+ result = number_should_modX(11, number.size - 2)
20
+ return if result
21
+ errors.add(:number, 'não é válido a inscrição estadual.')
22
+ end
23
+
24
+ private
25
+ def number_should_modX(mod, at, final = number.size)
26
+ numberX = number.split(//).map(&:to_i)
27
+ sum = ModFunctions.sumX(numberX, at, final)
28
+
29
+ divmod = sum.divmod(mod).last
30
+ digit = divmod <= 1 ? 0 : mod - sum.divmod(mod).last
31
+ numberX[at + 1].eql?(digit)
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,35 @@
1
+ require_relative 'mod_functions'
2
+
3
+ module ValidatorIE
4
+
5
+ class StateSE
6
+ include ActiveModel::Validations
7
+
8
+ attr_accessor :number
9
+ validates :number, length: { minimum: 9, maximum: 9 }, numericality: true, presence: true
10
+ validate :number_should_mod11
11
+
12
+ def initialize(opts={})
13
+ opts.each do |key, value|
14
+ self.public_send("#{key}=", value)
15
+ end
16
+ end
17
+
18
+ def number_should_mod11
19
+ result = number_should_modX(11, 7)
20
+ return if result
21
+ errors.add(:number, 'não é válido a inscrição estadual.')
22
+ end
23
+
24
+ private
25
+ def number_should_modX(mod, at, final = number.size)
26
+ numberX = number.split(//).map(&:to_i)
27
+ sum = ModFunctions.sumX(numberX, at, final)
28
+ divmod = sum.divmod(mod).last
29
+ digit = mod - sum.divmod(mod).last
30
+ digit = digit >= 10 ? 0 : digit
31
+ numberX[at + 1].eql?(digit)
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,41 @@
1
+ require_relative 'mod_functions'
2
+
3
+ module ValidatorIE
4
+
5
+ class StateSP
6
+ include ActiveModel::Validations
7
+
8
+ MATRIX = [1, 3, 4, 5, 6, 7, 8, 10]
9
+
10
+ attr_accessor :number
11
+ validates :number, length: { minimum: 12, maximum: 12 }, numericality: true, presence: true
12
+ validate :number_should_mod11
13
+
14
+ def initialize(opts={})
15
+ opts.each do |key, value|
16
+ self.public_send("#{key}=", value)
17
+ end
18
+ end
19
+
20
+ def number_should_mod11
21
+ result1 = number_should_modX(11, 7, nil, MATRIX)
22
+ result2 = number_should_modX(11, 10, 10)
23
+ return if result1 && result2
24
+ errors.add(:number, 'não é válido a inscrição estadual.')
25
+ end
26
+
27
+ private
28
+ def number_should_modX(mod, at, final = number.size, matrix = nil)
29
+ numberX = number.split(//).map(&:to_i)
30
+ unless matrix.nil?
31
+ sum = ModFunctions.sumX(numberX, at, final, nil, matrix)
32
+ else
33
+ sum = ModFunctions.sumX(numberX, at, final)
34
+ end
35
+ divmod = sum.divmod(mod).last
36
+ digit = divmod == 10 ? 0 : sum.divmod(mod).last
37
+ numberX[at + 1].eql?(digit)
38
+ end
39
+ end
40
+
41
+ end
@@ -0,0 +1,35 @@
1
+ require_relative 'mod_functions'
2
+
3
+ module ValidatorIE
4
+
5
+ class StateTO
6
+ include ActiveModel::Validations
7
+
8
+ attr_accessor :number
9
+ validates :number, length: { minimum: 11, maximum: 11 }, numericality: true, presence: true
10
+ validate :number_should_mod11
11
+
12
+ def initialize(opts={})
13
+ opts.each do |key, value|
14
+ self.public_send("#{key}=", value)
15
+ end
16
+ end
17
+
18
+ def number_should_mod11
19
+ self.number = number.split(//).map.with_index {|m, k| m unless k == 2 || k == 3}.compact!.join('')
20
+ result = number_should_modX(11, 7)
21
+ return if result
22
+ errors.add(:number, 'não é válido a inscrição estadual.')
23
+ end
24
+
25
+ private
26
+ def number_should_modX(mod, at, final = number.size)
27
+ numberX = number.split(//).map(&:to_i)
28
+ sum = ModFunctions.sumX(numberX, at, final)
29
+ divmod = sum.divmod(mod).last
30
+ digit = divmod < 2 ? 0 : mod - divmod
31
+ numberX[at + 1].eql?(digit)
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,3 @@
1
+ module ValidatorIE
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'validator_ie/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "validator_ie"
8
+ spec.version = ValidatorIE::VERSION
9
+ spec.authors = ["Rodrigo Moraes de Oliveira"]
10
+ spec.email = ["rmomogi@gmail.com"]
11
+
12
+ spec.summary = "Gem para validação de inscrição estadual"
13
+ spec.description = "Validação de inscrição estadual dos 26 estados federativos"
14
+ spec.license = "MIT"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ #if spec.respond_to?(:metadata)
19
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
20
+ #else
21
+ # raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
22
+ #end
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ["lib"]
28
+
29
+ spec.add_development_dependency "bundler", "~> 1.12"
30
+ spec.add_development_dependency "rake", "~> 10.0"
31
+ spec.add_development_dependency "rspec", "~> 3.0"
32
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: validator_ie
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Rodrigo Moraes de Oliveira
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-08-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ description: Validação de inscrição estadual dos 26 estados federativos
56
+ email:
57
+ - rmomogi@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".travis.yml"
65
+ - CODE_OF_CONDUCT.md
66
+ - Gemfile
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - bin/console
71
+ - bin/setup
72
+ - lib/validator_ie.rb
73
+ - lib/validator_ie/core/mod_functions.rb
74
+ - lib/validator_ie/core/state_ac.rb
75
+ - lib/validator_ie/core/state_al.rb
76
+ - lib/validator_ie/core/state_am.rb
77
+ - lib/validator_ie/core/state_ap.rb
78
+ - lib/validator_ie/core/state_ba.rb
79
+ - lib/validator_ie/core/state_ce.rb
80
+ - lib/validator_ie/core/state_df.rb
81
+ - lib/validator_ie/core/state_es.rb
82
+ - lib/validator_ie/core/state_go.rb
83
+ - lib/validator_ie/core/state_ma.rb
84
+ - lib/validator_ie/core/state_mg.rb
85
+ - lib/validator_ie/core/state_ms.rb
86
+ - lib/validator_ie/core/state_mt.rb
87
+ - lib/validator_ie/core/state_pa.rb
88
+ - lib/validator_ie/core/state_pb.rb
89
+ - lib/validator_ie/core/state_pe.rb
90
+ - lib/validator_ie/core/state_pi.rb
91
+ - lib/validator_ie/core/state_rj.rb
92
+ - lib/validator_ie/core/state_rn.rb
93
+ - lib/validator_ie/core/state_ro.rb
94
+ - lib/validator_ie/core/state_rr.rb
95
+ - lib/validator_ie/core/state_rs.rb
96
+ - lib/validator_ie/core/state_sc.rb
97
+ - lib/validator_ie/core/state_se.rb
98
+ - lib/validator_ie/core/state_sp.rb
99
+ - lib/validator_ie/core/state_to.rb
100
+ - lib/validator_ie/version.rb
101
+ - validator_ie.gemspec
102
+ homepage:
103
+ licenses:
104
+ - MIT
105
+ metadata: {}
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 2.5.1
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: Gem para validação de inscrição estadual
126
+ test_files: []
127
+ has_rdoc: