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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +42 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/validator_ie.rb +42 -0
- data/lib/validator_ie/core/mod_functions.rb +20 -0
- data/lib/validator_ie/core/state_ac.rb +47 -0
- data/lib/validator_ie/core/state_al.rb +47 -0
- data/lib/validator_ie/core/state_am.rb +37 -0
- data/lib/validator_ie/core/state_ap.rb +51 -0
- data/lib/validator_ie/core/state_ba.rb +47 -0
- data/lib/validator_ie/core/state_ce.rb +34 -0
- data/lib/validator_ie/core/state_df.rb +47 -0
- data/lib/validator_ie/core/state_es.rb +38 -0
- data/lib/validator_ie/core/state_go.rb +55 -0
- data/lib/validator_ie/core/state_ma.rb +39 -0
- data/lib/validator_ie/core/state_mg.rb +49 -0
- data/lib/validator_ie/core/state_ms.rb +38 -0
- data/lib/validator_ie/core/state_mt.rb +38 -0
- data/lib/validator_ie/core/state_pa.rb +38 -0
- data/lib/validator_ie/core/state_pb.rb +38 -0
- data/lib/validator_ie/core/state_pe.rb +35 -0
- data/lib/validator_ie/core/state_pi.rb +38 -0
- data/lib/validator_ie/core/state_rj.rb +34 -0
- data/lib/validator_ie/core/state_rn.rb +39 -0
- data/lib/validator_ie/core/state_ro.rb +38 -0
- data/lib/validator_ie/core/state_rr.rb +33 -0
- data/lib/validator_ie/core/state_rs.rb +34 -0
- data/lib/validator_ie/core/state_sc.rb +35 -0
- data/lib/validator_ie/core/state_se.rb +35 -0
- data/lib/validator_ie/core/state_sp.rb +41 -0
- data/lib/validator_ie/core/state_to.rb +35 -0
- data/lib/validator_ie/version.rb +3 -0
- data/validator_ie.gemspec +32 -0
- 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
|