br_documents 0.1.3 → 0.2.2
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 +4 -4
- data/.github/workflows/config.yml +40 -0
- data/.rubocop.yml +73 -0
- data/.tool-versions +1 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +79 -42
- data/README.md +33 -0
- data/Rakefile +4 -4
- data/br_documents.gemspec +26 -19
- data/lib/br_documents/cnpj_cpf/cnpj.rb +2 -2
- data/lib/br_documents/cnpj_cpf/cpf.rb +2 -2
- data/lib/br_documents/cnpj_cpf/document.rb +9 -9
- data/lib/br_documents/cnpj_validator.rb +4 -4
- data/lib/br_documents/commons/mod11.rb +1 -2
- data/lib/br_documents/commons/mod14.rb +1 -2
- data/lib/br_documents/cpf_validator.rb +4 -4
- data/lib/br_documents/{gtin/gtin.rb → gtin.rb} +3 -3
- data/lib/br_documents/gtin_validator.rb +6 -6
- data/lib/br_documents/ie/ac.rb +3 -2
- data/lib/br_documents/ie/al.rb +2 -1
- data/lib/br_documents/ie/am.rb +3 -2
- data/lib/br_documents/ie/ap.rb +20 -16
- data/lib/br_documents/ie/ba.rb +28 -25
- data/lib/br_documents/ie/base.rb +1 -1
- data/lib/br_documents/ie/ce.rb +3 -2
- data/lib/br_documents/ie/df.rb +3 -2
- data/lib/br_documents/ie/es.rb +2 -1
- data/lib/br_documents/ie/factory.rb +3 -3
- data/lib/br_documents/ie/go.rb +3 -2
- data/lib/br_documents/ie/ma.rb +2 -1
- data/lib/br_documents/ie/mg.rb +14 -17
- data/lib/br_documents/ie/ms.rb +2 -1
- data/lib/br_documents/ie/mt.rb +6 -5
- data/lib/br_documents/ie/pa.rb +3 -2
- data/lib/br_documents/ie/pattern1.rb +10 -7
- data/lib/br_documents/ie/pattern2.rb +9 -8
- data/lib/br_documents/ie/pb.rb +3 -2
- data/lib/br_documents/ie/pe.rb +10 -10
- data/lib/br_documents/ie/pi.rb +2 -1
- data/lib/br_documents/ie/pr.rb +3 -2
- data/lib/br_documents/ie/rj.rb +3 -2
- data/lib/br_documents/ie/rn.rb +19 -16
- data/lib/br_documents/ie/ro.rb +16 -13
- data/lib/br_documents/ie/rr.rb +4 -3
- data/lib/br_documents/ie/rs.rb +3 -2
- data/lib/br_documents/ie/sc.rb +3 -2
- data/lib/br_documents/ie/se.rb +3 -2
- data/lib/br_documents/ie/sp.rb +17 -14
- data/lib/br_documents/ie/to.rb +6 -5
- data/lib/br_documents/ie_validator.rb +7 -7
- data/lib/br_documents/suframa.rb +46 -0
- data/lib/br_documents/suframa_validator.rb +8 -0
- data/lib/br_documents/version.rb +1 -1
- data/lib/br_documents.rb +3 -3
- data/spec/br_documents/cnpj_cpf/cnpj_spec.rb +59 -0
- data/spec/br_documents/cnpj_cpf/cpf_spec.rb +59 -0
- data/spec/br_documents/cnpj_validator_spec.rb +36 -0
- data/spec/br_documents/cpf_validator_spec.rb +36 -0
- data/spec/{gtin → br_documents}/gtin_spec.rb +4 -4
- data/spec/{gtin_validator_spec.rb → br_documents/gtin_validator_spec.rb} +14 -14
- data/spec/br_documents/ie/ac_spec.rb +43 -0
- data/spec/br_documents/ie/al_spec.rb +36 -0
- data/spec/br_documents/ie/am_spec.rb +43 -0
- data/spec/br_documents/ie/ap_spec.rb +36 -0
- data/spec/br_documents/ie/ba_spec.rb +69 -0
- data/spec/br_documents/ie/ce_spec.rb +16 -0
- data/spec/br_documents/ie/df_spec.rb +43 -0
- data/spec/br_documents/ie/es_spec.rb +16 -0
- data/spec/br_documents/ie/factory_spec.rb +202 -0
- data/spec/br_documents/ie/go_spec.rb +43 -0
- data/spec/br_documents/ie/ma_spec.rb +16 -0
- data/spec/br_documents/ie/mg_spec.rb +43 -0
- data/spec/br_documents/ie/ms_spec.rb +16 -0
- data/spec/br_documents/ie/mt_spec.rb +49 -0
- data/spec/br_documents/ie/pa_spec.rb +43 -0
- data/spec/br_documents/ie/pb_spec.rb +16 -0
- data/spec/br_documents/ie/pe_spec.rb +62 -0
- data/spec/br_documents/ie/pi_spec.rb +16 -0
- data/spec/br_documents/ie/pr_spec.rb +36 -0
- data/spec/br_documents/ie/rj_spec.rb +43 -0
- data/spec/br_documents/ie/rn_spec.rb +62 -0
- data/spec/br_documents/ie/ro_spec.rb +62 -0
- data/spec/br_documents/ie/rr_spec.rb +43 -0
- data/spec/br_documents/ie/rs_spec.rb +41 -0
- data/spec/br_documents/ie/sc_spec.rb +43 -0
- data/spec/br_documents/ie/se_spec.rb +16 -0
- data/spec/br_documents/ie/shared_examples_for_pattern1.rb +33 -0
- data/spec/br_documents/ie/shared_examples_for_to_remove_all_masks.rb +16 -0
- data/spec/br_documents/ie/sp_spec.rb +45 -0
- data/spec/br_documents/ie/to_spec.rb +100 -0
- data/spec/{ie_validator_spec.rb → br_documents/ie_validator_spec.rb} +12 -9
- data/spec/br_documents/suframa_spec.rb +73 -0
- data/spec/br_documents/suframa_validator_spec.rb +36 -0
- data/spec/spec_helper.rb +6 -6
- data/spec/support/utilities.rb +2 -2
- metadata +177 -99
- data/.circleci/config.yml +0 -42
- data/spec/cnpj_cpf/cnpj_spec.rb +0 -59
- data/spec/cnpj_cpf/cpf_spec.rb +0 -59
- data/spec/cnpj_validator_spec.rb +0 -36
- data/spec/cpf_validator_spec.rb +0 -36
- data/spec/ie/ac_spec.rb +0 -43
- data/spec/ie/al_spec.rb +0 -36
- data/spec/ie/am_spec.rb +0 -43
- data/spec/ie/ap_spec.rb +0 -36
- data/spec/ie/ba_spec.rb +0 -69
- data/spec/ie/ce_spec.rb +0 -16
- data/spec/ie/df_spec.rb +0 -43
- data/spec/ie/es_spec.rb +0 -16
- data/spec/ie/factory_spec.rb +0 -203
- data/spec/ie/go_spec.rb +0 -43
- data/spec/ie/ma_spec.rb +0 -16
- data/spec/ie/mg_spec.rb +0 -43
- data/spec/ie/ms_spec.rb +0 -16
- data/spec/ie/mt_spec.rb +0 -44
- data/spec/ie/pa_spec.rb +0 -43
- data/spec/ie/pb_spec.rb +0 -16
- data/spec/ie/pe_spec.rb +0 -62
- data/spec/ie/pi_spec.rb +0 -16
- data/spec/ie/pr_spec.rb +0 -36
- data/spec/ie/rj_spec.rb +0 -43
- data/spec/ie/rn_spec.rb +0 -62
- data/spec/ie/ro_spec.rb +0 -62
- data/spec/ie/rr_spec.rb +0 -43
- data/spec/ie/rs_spec.rb +0 -41
- data/spec/ie/sc_spec.rb +0 -43
- data/spec/ie/se_spec.rb +0 -16
- data/spec/ie/shared_examples_for_pattern1.rb +0 -33
- data/spec/ie/shared_examples_for_to_remove_all_masks.rb +0 -17
- data/spec/ie/sp_spec.rb +0 -45
- data/spec/ie/to_spec.rb +0 -100
data/lib/br_documents/ie/ap.rb
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
require_relative
|
|
2
|
-
require_relative
|
|
1
|
+
require_relative 'base'
|
|
2
|
+
require_relative '../commons/mod11'
|
|
3
3
|
|
|
4
4
|
module BrDocuments
|
|
5
5
|
module IE
|
|
6
6
|
class AP < Base
|
|
7
7
|
include Commons::Mod11
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
protected
|
|
10
|
+
|
|
10
11
|
def format_ie(number)
|
|
11
12
|
number
|
|
12
13
|
end
|
|
@@ -16,29 +17,32 @@ module BrDocuments
|
|
|
16
17
|
regex.match(@number).present?
|
|
17
18
|
end
|
|
18
19
|
|
|
19
|
-
def
|
|
20
|
+
def valid_check_digit?
|
|
20
21
|
weight = [9, 8, 7, 6, 5, 4, 3, 2]
|
|
21
22
|
detect_range_digits
|
|
22
|
-
@number[-1]
|
|
23
|
+
@number[-1] == generate_check_digit(@number, weight).to_s
|
|
23
24
|
end
|
|
24
25
|
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
# rubocop:disable Metrics/MethodLength
|
|
25
29
|
def detect_range_digits
|
|
26
|
-
number = @number[0, 8]
|
|
27
|
-
|
|
30
|
+
number = @number[0, 8].to_i
|
|
31
|
+
|
|
32
|
+
if number >= 3_000_001 && number <= 3_017_000
|
|
28
33
|
@p = 5
|
|
29
34
|
@d = 0
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
@d = 0
|
|
37
|
-
end
|
|
35
|
+
elsif number >= 3_017_001 && number <= 3_019_022
|
|
36
|
+
@p = 9
|
|
37
|
+
@d = 1
|
|
38
|
+
elsif number >= 3_019_023
|
|
39
|
+
@p = 0
|
|
40
|
+
@d = 0
|
|
38
41
|
end
|
|
39
42
|
end
|
|
43
|
+
# rubocop:enable Metrics/MethodLength
|
|
40
44
|
|
|
41
|
-
def
|
|
45
|
+
def generate_check_digit(values, weights)
|
|
42
46
|
sum = reduce_weights(values, weights)
|
|
43
47
|
sum += @p
|
|
44
48
|
mod = sum % 11
|
data/lib/br_documents/ie/ba.rb
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
require_relative
|
|
2
|
-
require_relative
|
|
1
|
+
require_relative 'base'
|
|
2
|
+
require_relative '../commons/mod11'
|
|
3
3
|
|
|
4
4
|
module BrDocuments
|
|
5
5
|
module IE
|
|
6
6
|
class BA < Base
|
|
7
7
|
include Commons::Mod11
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
protected
|
|
10
|
+
|
|
10
11
|
def format_ie(number)
|
|
11
|
-
if number.
|
|
12
|
-
number.sub(/(\d{6})(\d{2})/,
|
|
12
|
+
if number.delete('-').length == 8
|
|
13
|
+
number.sub(/(\d{6})(\d{2})/, '\\1-\\2')
|
|
13
14
|
else
|
|
14
|
-
number.sub(/(\d{7})(\d{2})/,
|
|
15
|
+
number.sub(/(\d{7})(\d{2})/, '\\1-\\2')
|
|
15
16
|
end
|
|
16
17
|
end
|
|
17
18
|
|
|
@@ -19,19 +20,8 @@ module BrDocuments
|
|
|
19
20
|
valid_8_digits_format || valid_9_digits_format
|
|
20
21
|
end
|
|
21
22
|
|
|
22
|
-
def
|
|
23
|
-
|
|
24
|
-
regex_mask_2 = /^(\d{3}\.\d{3}\.\d{3})$|^(\d{9})$/
|
|
25
|
-
regex_mask_1.match(@number).present? || regex_mask_2.match(@number).present?
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def valid_8_digits_format
|
|
29
|
-
regex = /^(\d{6}\-\d{2})$|^(\d{8})$/
|
|
30
|
-
regex.match(@number).present?
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def valid_digital_check?
|
|
34
|
-
@number.gsub!(/[\.\/-]/, "")
|
|
23
|
+
def valid_check_digit?
|
|
24
|
+
@number.gsub!(/[\.\/-]/, '')
|
|
35
25
|
|
|
36
26
|
weight1 = make_weight(total_size)
|
|
37
27
|
weight2 = make_weight(total_size - 1)
|
|
@@ -40,7 +30,20 @@ module BrDocuments
|
|
|
40
30
|
number = "#{@number[0, body_size]}#{digital_check2}"
|
|
41
31
|
digital_check1 = digital_check_generator(number, weight1)
|
|
42
32
|
|
|
43
|
-
@number[-2, 2]
|
|
33
|
+
@number[-2, 2] == "#{digital_check1}#{digital_check2}"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def valid_9_digits_format
|
|
39
|
+
regex_mask1 = /^(\d{7}\-\d{2})$|^(\d{9})$/
|
|
40
|
+
regex_mask2 = /^(\d{3}\.\d{3}\.\d{3})$|^(\d{9})$/
|
|
41
|
+
regex_mask1.match(@number).present? || regex_mask2.match(@number).present?
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def valid_8_digits_format
|
|
45
|
+
regex = /^(\d{6}\-\d{2})$|^(\d{8})$/
|
|
46
|
+
regex.match(@number).present?
|
|
44
47
|
end
|
|
45
48
|
|
|
46
49
|
def make_weight(size)
|
|
@@ -51,7 +54,7 @@ module BrDocuments
|
|
|
51
54
|
end
|
|
52
55
|
|
|
53
56
|
def total_size
|
|
54
|
-
@number.gsub(/[\.\/-]/,
|
|
57
|
+
@number.gsub(/[\.\/-]/, '').length
|
|
55
58
|
end
|
|
56
59
|
|
|
57
60
|
def body_size
|
|
@@ -61,9 +64,9 @@ module BrDocuments
|
|
|
61
64
|
|
|
62
65
|
def digital_check_generator(number, weight)
|
|
63
66
|
if use_digital_check_mod10
|
|
64
|
-
|
|
67
|
+
generate_check_digit_mod10(number, weight)
|
|
65
68
|
else
|
|
66
|
-
|
|
69
|
+
generate_check_digit(number, weight)
|
|
67
70
|
end
|
|
68
71
|
end
|
|
69
72
|
|
|
@@ -80,10 +83,10 @@ module BrDocuments
|
|
|
80
83
|
end
|
|
81
84
|
end
|
|
82
85
|
|
|
83
|
-
def
|
|
86
|
+
def generate_check_digit_mod10(values, weights)
|
|
84
87
|
sum = reduce_weights(values, weights)
|
|
85
88
|
mod = sum % 10
|
|
86
|
-
mod
|
|
89
|
+
mod.zero? ? 0 : (10 - mod)
|
|
87
90
|
end
|
|
88
91
|
end
|
|
89
92
|
end
|
data/lib/br_documents/ie/base.rb
CHANGED
data/lib/br_documents/ie/ce.rb
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
require_relative
|
|
1
|
+
require_relative 'pattern1'
|
|
2
2
|
|
|
3
3
|
module BrDocuments
|
|
4
4
|
module IE
|
|
5
5
|
class CE < Pattern1
|
|
6
6
|
private
|
|
7
|
+
|
|
7
8
|
def format_ie(number)
|
|
8
|
-
number.sub(/(\d{8})(\d{1})/,
|
|
9
|
+
number.sub(/(\d{8})(\d{1})/, '\\1-\\2')
|
|
9
10
|
end
|
|
10
11
|
end
|
|
11
12
|
end
|
data/lib/br_documents/ie/df.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require_relative
|
|
1
|
+
require_relative 'pattern2'
|
|
2
2
|
|
|
3
3
|
module BrDocuments
|
|
4
4
|
module IE
|
|
@@ -9,8 +9,9 @@ module BrDocuments
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
private
|
|
12
|
+
|
|
12
13
|
def format_ie(number)
|
|
13
|
-
number.sub(/(\d{11})(\d{2})/,
|
|
14
|
+
number.sub(/(\d{11})(\d{2})/, '\\1-\\2')
|
|
14
15
|
end
|
|
15
16
|
end
|
|
16
17
|
end
|
data/lib/br_documents/ie/es.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
module BrDocuments
|
|
2
2
|
module IE
|
|
3
3
|
class Factory
|
|
4
|
-
def self.create(
|
|
5
|
-
klass = IE.const_get(
|
|
4
|
+
def self.create(uf_symbol, number)
|
|
5
|
+
klass = IE.const_get(uf_symbol.to_s)
|
|
6
6
|
klass.new(number)
|
|
7
7
|
rescue NameError
|
|
8
|
-
raise(ArgumentError, I18n.t(
|
|
8
|
+
raise(ArgumentError, I18n.t('validator.ie.uf.invalid'))
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
end
|
data/lib/br_documents/ie/go.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require_relative
|
|
1
|
+
require_relative 'pattern1'
|
|
2
2
|
|
|
3
3
|
module BrDocuments
|
|
4
4
|
module IE
|
|
@@ -9,8 +9,9 @@ module BrDocuments
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
private
|
|
12
|
+
|
|
12
13
|
def format_ie(number)
|
|
13
|
-
number.sub(/(\d{2})(\d{3})(\d{3})(\d{1})/,
|
|
14
|
+
number.sub(/(\d{2})(\d{3})(\d{3})(\d{1})/, '\\1.\\2.\\3-\\4')
|
|
14
15
|
end
|
|
15
16
|
end
|
|
16
17
|
end
|
data/lib/br_documents/ie/ma.rb
CHANGED
data/lib/br_documents/ie/mg.rb
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
require_relative
|
|
2
|
-
require_relative
|
|
1
|
+
require_relative 'base'
|
|
2
|
+
require_relative '../commons/mod11'
|
|
3
3
|
|
|
4
4
|
module BrDocuments
|
|
5
5
|
module IE
|
|
6
6
|
class MG < Base
|
|
7
7
|
include Commons::Mod11
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
protected
|
|
10
|
+
|
|
10
11
|
def format_ie(number)
|
|
11
|
-
number.sub(/(\d{3})(\d{3})(\d{3})(\d{4})/,
|
|
12
|
+
number.sub(/(\d{3})(\d{3})(\d{3})(\d{4})/, '\\1.\\2.\\3/\\4')
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def valid_format?
|
|
@@ -16,37 +17,33 @@ module BrDocuments
|
|
|
16
17
|
regex.match(@number).present?
|
|
17
18
|
end
|
|
18
19
|
|
|
19
|
-
def
|
|
20
|
-
@number.gsub!(/[\.\/-]/,
|
|
20
|
+
def valid_check_digit?
|
|
21
|
+
@number.gsub!(/[\.\/-]/, '')
|
|
21
22
|
|
|
22
|
-
number1 = @number[0, 3]
|
|
23
|
+
number1 = "#{@number[0, 3]}0#{@number[3..10]}"
|
|
23
24
|
weight1 = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
|
|
24
25
|
digital_check1 = generate_first_digital_check(number1, weight1)
|
|
25
26
|
|
|
26
27
|
number2 = "#{@number[0, 11]}#{digital_check1}"
|
|
27
28
|
weight2 = [3, 2, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
|
|
28
|
-
digital_check2 =
|
|
29
|
+
digital_check2 = generate_check_digit(number2, weight2)
|
|
29
30
|
|
|
30
|
-
@number[-2, 2]
|
|
31
|
+
@number[-2, 2] == "#{digital_check1}#{digital_check2}"
|
|
31
32
|
end
|
|
32
33
|
|
|
34
|
+
private
|
|
35
|
+
|
|
33
36
|
def generate_first_digital_check(values, weights)
|
|
34
37
|
sum = 0
|
|
35
38
|
weights.each_index do |i|
|
|
36
39
|
number = weights[i] * values[i].to_i
|
|
37
|
-
|
|
38
|
-
sum += number
|
|
39
|
-
else
|
|
40
|
-
sum += number.to_s[0].to_i + number.to_s[1].to_i
|
|
41
|
-
end
|
|
40
|
+
sum += number < 10 ? number : number.to_s[0].to_i + number.to_s[1].to_i
|
|
42
41
|
end
|
|
43
42
|
next_dozen(sum) - sum
|
|
44
43
|
end
|
|
45
44
|
|
|
46
45
|
def next_dozen(number)
|
|
47
|
-
while number % 10 != 0
|
|
48
|
-
number = number + 1
|
|
49
|
-
end
|
|
46
|
+
number += 1 while number % 10 != 0
|
|
50
47
|
number
|
|
51
48
|
end
|
|
52
49
|
end
|
data/lib/br_documents/ie/ms.rb
CHANGED
data/lib/br_documents/ie/mt.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require_relative
|
|
1
|
+
require_relative 'pattern1'
|
|
2
2
|
|
|
3
3
|
module BrDocuments
|
|
4
4
|
module IE
|
|
@@ -12,14 +12,15 @@ module BrDocuments
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
private
|
|
15
|
+
|
|
15
16
|
def generate_zeros(number)
|
|
16
|
-
just_numbers = number.gsub(/[\.\/-]/,
|
|
17
|
-
zeros = (
|
|
18
|
-
yield
|
|
17
|
+
just_numbers = number.gsub(/[\.\/-]/, '')
|
|
18
|
+
zeros = ('0' * 11).slice(just_numbers.length, 11) if just_numbers.present?
|
|
19
|
+
yield zeros.to_s if block_given?
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def format_ie(number)
|
|
22
|
-
number.sub(/(\d{10})(\d{1})/,
|
|
23
|
+
number.sub(/(\d{10})(\d{1})/, '\\1-\\2')
|
|
23
24
|
end
|
|
24
25
|
end
|
|
25
26
|
end
|
data/lib/br_documents/ie/pa.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require_relative
|
|
1
|
+
require_relative 'pattern1'
|
|
2
2
|
|
|
3
3
|
module BrDocuments
|
|
4
4
|
module IE
|
|
@@ -9,8 +9,9 @@ module BrDocuments
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
private
|
|
12
|
+
|
|
12
13
|
def format_ie(number)
|
|
13
|
-
number.sub(/(\d{2})(\d{6})(\d{1})/,
|
|
14
|
+
number.sub(/(\d{2})(\d{6})(\d{1})/, '\\1-\\2-\\3')
|
|
14
15
|
end
|
|
15
16
|
end
|
|
16
17
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
require_relative
|
|
2
|
-
require_relative
|
|
1
|
+
require_relative 'base'
|
|
2
|
+
require_relative '../commons/mod11'
|
|
3
3
|
|
|
4
4
|
module BrDocuments
|
|
5
5
|
module IE
|
|
@@ -12,20 +12,23 @@ module BrDocuments
|
|
|
12
12
|
@weight = [9, 8, 7, 6, 5, 4, 3, 2]
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
protected
|
|
16
|
+
|
|
16
17
|
def valid_format?
|
|
17
18
|
regex = @mask
|
|
18
19
|
regex.match(@number).present?
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
def
|
|
22
|
-
calculated_check_digit =
|
|
23
|
-
check_digit_valid = check_digit
|
|
22
|
+
def valid_check_digit?
|
|
23
|
+
calculated_check_digit = generate_check_digit(only_numbers, @weight).to_s
|
|
24
|
+
check_digit_valid = check_digit == calculated_check_digit
|
|
24
25
|
remove_mask_of_number if check_digit_valid
|
|
25
26
|
|
|
26
27
|
check_digit_valid
|
|
27
28
|
end
|
|
28
29
|
|
|
30
|
+
private
|
|
31
|
+
|
|
29
32
|
def check_digit
|
|
30
33
|
only_numbers[-1]
|
|
31
34
|
end
|
|
@@ -35,7 +38,7 @@ module BrDocuments
|
|
|
35
38
|
end
|
|
36
39
|
|
|
37
40
|
def only_numbers
|
|
38
|
-
@number.gsub(/[\.\/-]/,
|
|
41
|
+
@number.gsub(/[\.\/-]/, '')
|
|
39
42
|
end
|
|
40
43
|
end
|
|
41
44
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
require_relative
|
|
2
|
-
require_relative
|
|
1
|
+
require_relative 'base'
|
|
2
|
+
require_relative '../commons/mod11'
|
|
3
3
|
|
|
4
4
|
module BrDocuments
|
|
5
5
|
module IE
|
|
@@ -12,19 +12,20 @@ module BrDocuments
|
|
|
12
12
|
@weight2 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
protected
|
|
16
|
+
|
|
16
17
|
def valid_format?
|
|
17
18
|
regex = @mask
|
|
18
19
|
regex.match(@number).present?
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
def
|
|
22
|
-
@number.gsub!(/[\.\/-]/,
|
|
22
|
+
def valid_check_digit?
|
|
23
|
+
@number.gsub!(/[\.\/-]/, '')
|
|
23
24
|
|
|
24
|
-
digital_check1 =
|
|
25
|
-
digital_check2 =
|
|
25
|
+
digital_check1 = generate_check_digit(@number, @weight1)
|
|
26
|
+
digital_check2 = generate_check_digit(@number, @weight2)
|
|
26
27
|
|
|
27
|
-
@number[-2, 2]
|
|
28
|
+
@number[-2, 2] == "#{digital_check1}#{digital_check2}"
|
|
28
29
|
end
|
|
29
30
|
end
|
|
30
31
|
end
|
data/lib/br_documents/ie/pb.rb
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
require_relative
|
|
1
|
+
require_relative 'pattern1'
|
|
2
2
|
|
|
3
3
|
module BrDocuments
|
|
4
4
|
module IE
|
|
5
5
|
class PB < Pattern1
|
|
6
6
|
private
|
|
7
|
+
|
|
7
8
|
def format_ie(number)
|
|
8
|
-
number.sub(/(\d{8})(\d{1})/,
|
|
9
|
+
number.sub(/(\d{8})(\d{1})/, '\\1-\\2')
|
|
9
10
|
end
|
|
10
11
|
end
|
|
11
12
|
end
|
data/lib/br_documents/ie/pe.rb
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
require_relative
|
|
2
|
-
require_relative
|
|
1
|
+
require_relative 'pattern1'
|
|
2
|
+
require_relative 'pattern2'
|
|
3
3
|
|
|
4
4
|
module BrDocuments
|
|
5
5
|
module IE
|
|
6
6
|
class PE
|
|
7
7
|
def initialize(number)
|
|
8
|
-
|
|
9
|
-
@validator = PE9.new(number)
|
|
10
|
-
else
|
|
11
|
-
@validator = PE14.new(number)
|
|
12
|
-
end
|
|
8
|
+
@validator = number.gsub(/[\.\/-]/, '').length <= 9 ? PE9.new(number) : PE14.new(number)
|
|
13
9
|
end
|
|
14
10
|
|
|
15
11
|
def valid?
|
|
@@ -20,7 +16,6 @@ module BrDocuments
|
|
|
20
16
|
@validator.formatted
|
|
21
17
|
end
|
|
22
18
|
|
|
23
|
-
private
|
|
24
19
|
class PE14 < Pattern1
|
|
25
20
|
def initialize(number)
|
|
26
21
|
super
|
|
@@ -29,10 +24,12 @@ module BrDocuments
|
|
|
29
24
|
end
|
|
30
25
|
|
|
31
26
|
private
|
|
27
|
+
|
|
32
28
|
def format_ie(number)
|
|
33
|
-
number.sub(/(\d{2})(\d{1})(\d{3})(\d{7})(\d{1})/,
|
|
29
|
+
number.sub(/(\d{2})(\d{1})(\d{3})(\d{7})(\d{1})/, '\\1.\\2.\\3.\\4-\\5')
|
|
34
30
|
end
|
|
35
31
|
end
|
|
32
|
+
private_constant :PE14
|
|
36
33
|
|
|
37
34
|
class PE9 < Pattern2
|
|
38
35
|
def initialize(number)
|
|
@@ -43,10 +40,13 @@ module BrDocuments
|
|
|
43
40
|
end
|
|
44
41
|
|
|
45
42
|
private
|
|
43
|
+
|
|
46
44
|
def format_ie(number)
|
|
47
|
-
number.sub(/(\d{7})(\d{2})/,
|
|
45
|
+
number.sub(/(\d{7})(\d{2})/, '\\1-\\2')
|
|
48
46
|
end
|
|
49
47
|
end
|
|
48
|
+
|
|
49
|
+
private_constant :PE9
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
end
|
data/lib/br_documents/ie/pi.rb
CHANGED
data/lib/br_documents/ie/pr.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require_relative
|
|
1
|
+
require_relative 'pattern2'
|
|
2
2
|
|
|
3
3
|
module BrDocuments
|
|
4
4
|
module IE
|
|
@@ -11,8 +11,9 @@ module BrDocuments
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
private
|
|
14
|
+
|
|
14
15
|
def format_ie(number)
|
|
15
|
-
number.sub(/(\d{8})(\d{2})/,
|
|
16
|
+
number.sub(/(\d{8})(\d{2})/, '\\1-\\2')
|
|
16
17
|
end
|
|
17
18
|
end
|
|
18
19
|
end
|
data/lib/br_documents/ie/rj.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require_relative
|
|
1
|
+
require_relative 'pattern1'
|
|
2
2
|
|
|
3
3
|
module BrDocuments
|
|
4
4
|
module IE
|
|
@@ -10,8 +10,9 @@ module BrDocuments
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
private
|
|
13
|
+
|
|
13
14
|
def format_ie(number)
|
|
14
|
-
number.sub(/(\d{2})(\d{3})(\d{2})(\d{1})/,
|
|
15
|
+
number.sub(/(\d{2})(\d{3})(\d{2})(\d{1})/, '\\1.\\2.\\3-\\4')
|
|
15
16
|
end
|
|
16
17
|
end
|
|
17
18
|
end
|
data/lib/br_documents/ie/rn.rb
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
require_relative
|
|
2
|
-
require_relative
|
|
1
|
+
require_relative 'base'
|
|
2
|
+
require_relative '../commons/mod11'
|
|
3
3
|
|
|
4
4
|
module BrDocuments
|
|
5
5
|
module IE
|
|
6
6
|
class RN < Base
|
|
7
7
|
include Commons::Mod11
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
protected
|
|
10
|
+
|
|
10
11
|
def format_ie(number)
|
|
11
|
-
if number.gsub(/(\.)|(\-)/,
|
|
12
|
-
number.sub(/(\d{2})(\d{3})(\d{3})(\d{1})/,
|
|
12
|
+
if number.gsub(/(\.)|(\-)/, '').length == 9
|
|
13
|
+
number.sub(/(\d{2})(\d{3})(\d{3})(\d{1})/, '\\1.\\2.\\3-\\4')
|
|
13
14
|
else
|
|
14
|
-
number.sub(/(\d{2})(\d{1})(\d{3})(\d{3})(\d{1})/,
|
|
15
|
+
number.sub(/(\d{2})(\d{1})(\d{3})(\d{3})(\d{1})/, '\\1.\\2.\\3.\\4-\\5')
|
|
15
16
|
end
|
|
16
17
|
end
|
|
17
18
|
|
|
@@ -19,6 +20,17 @@ module BrDocuments
|
|
|
19
20
|
valid_old_format or valid_new_format
|
|
20
21
|
end
|
|
21
22
|
|
|
23
|
+
def valid_check_digit?
|
|
24
|
+
@number.gsub!(/[\.\/-]/, '')
|
|
25
|
+
|
|
26
|
+
weight = []
|
|
27
|
+
@number.length.downto(2).each { |w| weight << w }
|
|
28
|
+
|
|
29
|
+
@number[-1] == generate_check_digit(@number, weight).to_s
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
22
34
|
def valid_old_format
|
|
23
35
|
regex = /^(\d{2}\.\d{3}\.\d{3}\-\d{1})$|^(\d{9})$/
|
|
24
36
|
regex.match(@number).present?
|
|
@@ -29,16 +41,7 @@ module BrDocuments
|
|
|
29
41
|
regex.match(@number).present?
|
|
30
42
|
end
|
|
31
43
|
|
|
32
|
-
def
|
|
33
|
-
@number.gsub!(/[\.\/-]/, "")
|
|
34
|
-
|
|
35
|
-
weight = []
|
|
36
|
-
@number.length.downto(2).each {|w| weight << w }
|
|
37
|
-
|
|
38
|
-
@number[-1].eql? generate_digital_check(@number, weight).to_s
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def generate_digital_check(values, weights)
|
|
44
|
+
def generate_check_digit(values, weights)
|
|
42
45
|
sum = reduce_weights(values, weights)
|
|
43
46
|
mod = sum * 10 % 11
|
|
44
47
|
mod == 10 ? 0 : mod
|