validator_ie 0.1.0

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 (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,34 @@
1
+ module ValidatorIE
2
+
3
+ class StateCE
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_mod11
17
+ result = number_should_modX(11, 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
+ digit = mod - sum.divmod(11).last
28
+ digit = digit.eql?(10) || digit.eql?(11) ? 0 : digit
29
+ numberX[at + 1].eql?(digit)
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,47 @@
1
+ module ValidatorIE
2
+
3
+ class StateDF
4
+ include ActiveModel::Validations
5
+
6
+ attr_accessor :number
7
+ validates :number, length: { minimum: 13, maximum: 13 }, 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
+ result1 = number_should_modX(11, 10, 9)
18
+ result2 = number_should_modX(11, 11, 9)
19
+ return if result1 && result2
20
+ errors.add(:number, 'não é válido a inscrição estadual.')
21
+ end
22
+
23
+ private
24
+ def number_should_mod11_digit(at, weight)
25
+ number_mod11 = number.split(//).map(&:to_i)
26
+ sum = number_mod11[0..at].map.with_index { |v, k| v * WEIGHT[weight][k] }.reduce(:+)
27
+ digit = 11 - sum.divmod(11).last
28
+ digit = digit.eql?(10) || digit.eql?(11) ? 0 : digit
29
+ unless number_mod11[at + 1].eql?(digit)
30
+ false
31
+ else
32
+ true
33
+ end
34
+ end
35
+
36
+ def number_should_modX(mod, at, final = number.size)
37
+ numberX = number.split(//).map(&:to_i)
38
+ sum = ModFunctions.sumX(numberX, at, final)
39
+
40
+ digit = mod - sum.divmod(11).last
41
+ digit = digit.eql?(10) || digit.eql?(11) ? 0 : digit
42
+ numberX[at + 1].eql?(digit)
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,38 @@
1
+ module ValidatorIE
2
+
3
+ class StateES
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_mod11
17
+ result = number_should_modX(11, 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
+ divmod = sum.divmod(mod).last
27
+
28
+ if divmod < 2
29
+ digit = 0
30
+ else
31
+ digit = mod - divmod
32
+ end
33
+ numberX[at + 1].eql?(digit)
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,55 @@
1
+ module ValidatorIE
2
+
3
+ class StateGO
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_code_state
9
+ validate :number_should_mod11
10
+
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_code_state
19
+ number[0..1].eql?('10') || number[0..1].eql?('11') || number[0..1].eql?('15')
20
+ end
21
+
22
+ def number_should_mod11
23
+ result = number_should_modX(11, 7)
24
+ return if result
25
+ errors.add(:number, 'não é válido a inscrição estadual.')
26
+ end
27
+
28
+ private
29
+ def number_should_modX(mod, at, final = number.size)
30
+ numberX = number.split(//).map(&:to_i)
31
+ sum = ModFunctions.sumX(numberX, at, final)
32
+ divmod = sum.divmod(mod).last
33
+
34
+ if number[0..at].eql? '11094402'
35
+ unless numberX[at + 1].eql?(0) || numberX[at + 1].eql?(1)
36
+ false
37
+ else
38
+ true
39
+ end
40
+ elsif number[0..at].to_i.between?(10103105, 10119997)
41
+ unless numberX[at + 1].eql?(1)
42
+ false
43
+ else
44
+ true
45
+ end
46
+ else
47
+ digit = mod - divmod
48
+ digit = digit.eql?(1) ? 0 : digit
49
+ numberX[at + 1].eql?(digit)
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ end
@@ -0,0 +1,39 @@
1
+ module ValidatorIE
2
+
3
+ class StateMA
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_code_state
9
+ validate :number_should_mod11
10
+
11
+ def initialize(opts={})
12
+ opts.each do |key, value|
13
+ self.public_send("#{key}=", value)
14
+ end
15
+ end
16
+
17
+ def number_should_code_state
18
+ number[0..1].eql?('12')
19
+ end
20
+
21
+ def number_should_mod11
22
+ result = number_should_modX(11, 7)
23
+ return if result
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)
29
+ numberX = number.split(//).map(&:to_i)
30
+ sum = ModFunctions.sumX(numberX, at, final)
31
+ divmod = sum.divmod(mod).last
32
+
33
+ digit = divmod <= 1 ? 0 : mod - divmod
34
+ numberX[at + 1].eql?(digit)
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,49 @@
1
+ require_relative 'mod_functions'
2
+
3
+ module ValidatorIE
4
+
5
+ class StateMG
6
+ include ActiveModel::Validations
7
+
8
+ attr_accessor :number
9
+ validates :number, length: { minimum: 13, maximum: 13 }, 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
+
20
+ self.number = number[0..2].concat("0").concat(number[3..12])
21
+ matrix = number[0..number.size - 3].split(//).map.with_index {|m, k| k.next.odd? ? 1 : 2}
22
+ result1 = number_should_modX(11, 11, nil, matrix, true)
23
+
24
+ self.number = number[0..2].concat(number[4..13])
25
+ result2 = number_should_modX(11, 11, 11, nil)
26
+
27
+ return if result1 && result2
28
+ errors.add(:number, 'não é válido a inscrição estadual.')
29
+
30
+ end
31
+
32
+ private
33
+ def number_should_modX(mod, at, final = number.size, matrix = nil, decimal = false)
34
+ numberX = number.split(//).map(&:to_i)
35
+
36
+ if decimal
37
+ return false if at > matrix.size - 1
38
+ sum = numberX[0..at].map.with_index { |v, k| v * matrix[k]}.join('').split(//).map(&:to_i).reduce(&:+)
39
+ digit = (sum - (sum.to_s.split(//).last.to_i - 10)) - sum
40
+ else
41
+ sum = ModFunctions.sumX(numberX, at, final, true, matrix)
42
+ divmod = sum.divmod(mod).last
43
+ digit = divmod < 2 ? 0 : mod - divmod
44
+ end
45
+ numberX[at + 1].eql?(digit)
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,38 @@
1
+ module ValidatorIE
2
+
3
+ class StateMS
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?('28')
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 > 0 ? (mod - divmod > 9 ? 0 : mod - divmod) : 0
33
+ return numberX[at + 1].eql?(digit)
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,38 @@
1
+ module ValidatorIE
2
+
3
+ class StateMT
4
+ include ActiveModel::Validations
5
+
6
+ attr_accessor :number
7
+ validates :number, length: { minimum: 11, maximum: 11 }, 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?('12')
18
+ end
19
+
20
+ def number_should_mod11
21
+ result = number_should_modX(11, 9)
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 <= 1 ? 0 : mod - divmod
33
+ return numberX[at + 1].eql?(digit)
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,38 @@
1
+ module ValidatorIE
2
+
3
+ class StatePA
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 <= 1 ? 0 : 11 - divmod
33
+ return numberX[at + 1].eql?(digit)
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,38 @@
1
+ module ValidatorIE
2
+
3
+ class StatePB
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 = 11 - divmod >= 10 ? 0 : 11 - divmod
33
+ return numberX[at + 1].eql?(digit)
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,35 @@
1
+ module ValidatorIE
2
+
3
+ class StatePE
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_mod11
17
+ digit1 = number_should_modX(11, 6)
18
+ digit2 = number_should_modX(11, 7)
19
+ return if digit1 && digit2
20
+ errors.add(:number, 'não é válido a inscrição estadual.')
21
+ end
22
+
23
+ private
24
+ def number_should_modX(mod, at, final = number.size)
25
+ numberX = number.split(//).map(&:to_i)
26
+ sum = ModFunctions.sumX(numberX, at, final)
27
+
28
+ divmod = sum.divmod(mod).last
29
+ digit = divmod <= 1 ? 0 : 11 - divmod
30
+ return numberX[at + 1].eql?(digit)
31
+ end
32
+
33
+ end
34
+
35
+ end