dockcheck 2.0.3 → 2.0.4
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/lib/dockcheck/bik.rb +0 -2
- data/lib/dockcheck/dockhelper.rb +1 -3
- data/lib/dockcheck/inn.rb +7 -9
- data/lib/dockcheck/kpp.rb +0 -3
- data/lib/dockcheck/ogrn.rb +2 -9
- data/lib/dockcheck/ogrnip.rb +14 -19
- data/lib/dockcheck/snils.rb +8 -13
- data/lib/dockcheck.rb +19 -17
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 16925d52a82de3e76d124db3c4e1ada4ccac3b5808c6f87c4ee09440544d3346
|
|
4
|
+
data.tar.gz: 17c529dcc327c32d75a60a3b1a3effb8446061cfe43fa6cc408ba637feb750d6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 77d35ed631c258e118419b95a5438077fdcf6742fc88a623774412a1f56d7ffe74eabc0a35b97b6d3adf22494892f390676e83b0fdb237b35277d6c3489a0253
|
|
7
|
+
data.tar.gz: 3f3adaf5d388d4ca2a13f43ffbd631ec3fce57424dee1a4c698c8efd721488d05c9ce5cdd94c9e9e0cd612939009b34b48d7e25051acbf95cc2a1e6990fcefeb
|
data/lib/dockcheck/bik.rb
CHANGED
data/lib/dockcheck/dockhelper.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class DockHelper
|
|
4
|
-
|
|
5
4
|
def self.numberize_document(numbers)
|
|
6
5
|
numbers.split('').map(&:to_i)
|
|
7
6
|
end
|
|
@@ -13,8 +12,7 @@ class DockHelper
|
|
|
13
12
|
def self.prepare_doc(doc)
|
|
14
13
|
new_data = doc
|
|
15
14
|
new_data[:correct] = false
|
|
16
|
-
new_data[:error] =
|
|
15
|
+
new_data[:error] = ''
|
|
17
16
|
new_data
|
|
18
17
|
end
|
|
19
|
-
|
|
20
18
|
end
|
data/lib/dockcheck/inn.rb
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
require "#{__dir__}/dockhelper.rb"
|
|
4
4
|
|
|
5
5
|
class DockCheck::Inn
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
@ten_digits_map = [2, 4, 10, 3, 5, 9, 4, 6, 8]
|
|
7
|
+
@twelve_digits_first_map = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
|
|
8
|
+
@twelve_digits_second_map = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
|
|
9
9
|
|
|
10
10
|
def self.check(document)
|
|
11
11
|
inn = DockHelper.numberize_document(document[:content])
|
|
@@ -26,12 +26,10 @@ class DockCheck::Inn
|
|
|
26
26
|
:inn
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
private
|
|
30
|
-
|
|
31
29
|
def self.control_sum_calc(inn, coefficients)
|
|
32
30
|
inn
|
|
33
31
|
.zip(coefficients)
|
|
34
|
-
.filter { |(
|
|
32
|
+
.filter { |(_a, b)| !b.nil? }
|
|
35
33
|
.reduce(0) { |acc, (a, b)| a * b + acc }
|
|
36
34
|
end
|
|
37
35
|
|
|
@@ -41,7 +39,7 @@ class DockCheck::Inn
|
|
|
41
39
|
|
|
42
40
|
def self.ten_digit_inn_valid?(inn)
|
|
43
41
|
last_number = inn.last
|
|
44
|
-
control_sum = control_sum_calc(inn,
|
|
42
|
+
control_sum = control_sum_calc(inn, @ten_digits_map)
|
|
45
43
|
last_number == sum_div(control_sum)
|
|
46
44
|
end
|
|
47
45
|
|
|
@@ -49,8 +47,8 @@ class DockCheck::Inn
|
|
|
49
47
|
last_number = inn.last
|
|
50
48
|
penult_number = inn.fetch(10)
|
|
51
49
|
|
|
52
|
-
first_sum = control_sum_calc(inn,
|
|
53
|
-
second_sum = control_sum_calc(inn,
|
|
50
|
+
first_sum = control_sum_calc(inn, @twelve_digits_first_map)
|
|
51
|
+
second_sum = control_sum_calc(inn, @twelve_digits_second_map)
|
|
54
52
|
|
|
55
53
|
penult_number == sum_div(first_sum) && last_number == sum_div(second_sum)
|
|
56
54
|
end
|
data/lib/dockcheck/kpp.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class DockCheck::Kpp
|
|
4
|
-
|
|
5
4
|
def self.check(document)
|
|
6
5
|
kpp = document[:content]
|
|
7
6
|
|
|
@@ -19,8 +18,6 @@ class DockCheck::Kpp
|
|
|
19
18
|
:kpp
|
|
20
19
|
end
|
|
21
20
|
|
|
22
|
-
private
|
|
23
|
-
|
|
24
21
|
def self.kpp_valid?(kpp)
|
|
25
22
|
!!(kpp =~ /^[0-9]{4}[0-9A-Z]{2}[0-9]{3}$/)
|
|
26
23
|
end
|
data/lib/dockcheck/ogrn.rb
CHANGED
|
@@ -3,18 +3,12 @@
|
|
|
3
3
|
require "#{__dir__}/dockhelper.rb"
|
|
4
4
|
|
|
5
5
|
class DockCheck::Ogrn
|
|
6
|
-
|
|
7
6
|
def self.check(document)
|
|
8
7
|
ogrn = document[:content]
|
|
9
8
|
|
|
10
9
|
case ogrn.length
|
|
11
10
|
when 13
|
|
12
|
-
document[:correct] =
|
|
13
|
-
if DockHelper.only_digits?(ogrn)
|
|
14
|
-
ogrn_valid?(ogrn)
|
|
15
|
-
else
|
|
16
|
-
false
|
|
17
|
-
end
|
|
11
|
+
document[:correct] = DockHelper.only_digits?(ogrn) ? ogrn_valid?(ogrn) : false
|
|
18
12
|
else
|
|
19
13
|
document[:error] = 'Incorrect ogrn numbers count!'
|
|
20
14
|
end
|
|
@@ -26,11 +20,10 @@ class DockCheck::Ogrn
|
|
|
26
20
|
:ogrn
|
|
27
21
|
end
|
|
28
22
|
|
|
29
|
-
private
|
|
30
|
-
|
|
31
23
|
def self.ogrn_valid?(ogrn)
|
|
32
24
|
first_code = ogrn[0..12].to_i
|
|
33
25
|
second_code = (first_code / 11).floor * 11
|
|
26
|
+
|
|
34
27
|
result_sum = (first_code - second_code) % 10
|
|
35
28
|
result_sum == ogrn[13].to_i
|
|
36
29
|
end
|
data/lib/dockcheck/ogrnip.rb
CHANGED
|
@@ -3,22 +3,8 @@
|
|
|
3
3
|
require "#{__dir__}/dockhelper.rb"
|
|
4
4
|
|
|
5
5
|
class DockCheck::Ogrnip
|
|
6
|
-
|
|
7
6
|
def self.check(document)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
case ogrnip.length
|
|
11
|
-
when 15
|
|
12
|
-
document[:correct] =
|
|
13
|
-
if DockHelper.only_digits?(ogrnip)
|
|
14
|
-
ogrnip_valid?(ogrnip)
|
|
15
|
-
else
|
|
16
|
-
false
|
|
17
|
-
end
|
|
18
|
-
else
|
|
19
|
-
document[:error] = 'Incorrect ogrnip numbers count!'
|
|
20
|
-
end
|
|
21
|
-
|
|
7
|
+
validate_ogrnip(document)
|
|
22
8
|
document
|
|
23
9
|
end
|
|
24
10
|
|
|
@@ -26,12 +12,21 @@ class DockCheck::Ogrnip
|
|
|
26
12
|
:ogrnip
|
|
27
13
|
end
|
|
28
14
|
|
|
29
|
-
private
|
|
30
|
-
|
|
31
15
|
def self.ogrnip_valid?(ogrnip)
|
|
32
16
|
first_code = ogrnip[0..13].to_i
|
|
33
17
|
second_code = (first_code / 13).floor * 13
|
|
34
|
-
|
|
35
|
-
|
|
18
|
+
|
|
19
|
+
sum = (first_code - second_code) % 10
|
|
20
|
+
sum == ogrnip[14].to_i
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.validate_ogrnip(data)
|
|
24
|
+
ogrnip = data[:content]
|
|
25
|
+
case ogrnip.length
|
|
26
|
+
when 15
|
|
27
|
+
data[:correct] = DockHelper.only_digits?(ogrnip) ? ogrnip_valid?(ogrnip) : false
|
|
28
|
+
else
|
|
29
|
+
data[:error] = 'Incorrect ogrnip numbers count!'
|
|
30
|
+
end
|
|
36
31
|
end
|
|
37
32
|
end
|
data/lib/dockcheck/snils.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
require "#{__dir__}/dockhelper.rb"
|
|
4
4
|
|
|
5
5
|
class DockCheck::Snils
|
|
6
|
-
|
|
6
|
+
@coefficients_map = [9, 8, 7, 6, 5, 4, 3, 2, 1]
|
|
7
7
|
|
|
8
8
|
def self.check(document)
|
|
9
9
|
snils = DockHelper.numberize_document(document[:content])
|
|
@@ -23,28 +23,23 @@ class DockCheck::Snils
|
|
|
23
23
|
:snils
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
private
|
|
27
|
-
|
|
28
26
|
def self.control_sum_calc(inn, coefficients)
|
|
29
27
|
inn
|
|
30
28
|
.zip(coefficients)
|
|
31
|
-
.filter { |(
|
|
29
|
+
.filter { |(_a, b)| !b.nil? }
|
|
32
30
|
.reduce(0) { |acc, (a, b)| a * b + acc }
|
|
33
31
|
end
|
|
34
32
|
|
|
35
33
|
def self.check_control_sum(control_sum)
|
|
36
|
-
if control_sum < 100
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
rem = control_sum % 101
|
|
42
|
-
rem == 100 ? 0 : rem
|
|
43
|
-
end
|
|
34
|
+
return control_sum if control_sum < 100
|
|
35
|
+
return 0 if control_sum == 100
|
|
36
|
+
|
|
37
|
+
rem = control_sum % 101
|
|
38
|
+
rem == 100 ? 0 : rem
|
|
44
39
|
end
|
|
45
40
|
|
|
46
41
|
def self.snils_valid?(snils, last_digits)
|
|
47
|
-
control_sum = control_sum_calc(snils,
|
|
42
|
+
control_sum = control_sum_calc(snils, @coefficients_map)
|
|
48
43
|
last_digits == check_control_sum(control_sum)
|
|
49
44
|
end
|
|
50
45
|
end
|
data/lib/dockcheck.rb
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class DockCheck
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def initialize()
|
|
7
|
-
@checkers_map = {inn: Inn, snils: Snils, bik: Bik, kpp: Kpp, ogrnip: Ogrnip, ogrn: Ogrn}
|
|
8
|
-
self
|
|
4
|
+
def initialize
|
|
5
|
+
@checkers_map = { inn: Inn, snils: Snils, bik: Bik, kpp: Kpp, ogrnip: Ogrnip, ogrn: Ogrn }
|
|
9
6
|
end
|
|
10
7
|
|
|
11
8
|
def check(data)
|
|
@@ -30,23 +27,28 @@ class DockCheck
|
|
|
30
27
|
checker = doc[:type]
|
|
31
28
|
result = doc
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
if @checkers_map.key?(checker.to_sym)
|
|
35
|
-
if doc[:content]
|
|
36
|
-
result = @checkers_map[checker].check(doc)
|
|
37
|
-
else
|
|
38
|
-
result[:error] = 'Content field required!'
|
|
39
|
-
end
|
|
40
|
-
else
|
|
41
|
-
result[:error] = 'Incorrect checker!'
|
|
42
|
-
end
|
|
43
|
-
else
|
|
30
|
+
unless checker
|
|
44
31
|
result[:error] = 'Document type field required!'
|
|
32
|
+
return result
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
if @checkers_map.key?(checker.to_sym)
|
|
36
|
+
result = check_control_sum(result)
|
|
37
|
+
else
|
|
38
|
+
result[:error] = 'Incorrect checker!'
|
|
45
39
|
end
|
|
46
40
|
|
|
47
41
|
result
|
|
48
42
|
end
|
|
49
43
|
|
|
44
|
+
def check_control_sum(data)
|
|
45
|
+
if data[:content]
|
|
46
|
+
@checkers_map[data[:type]].check(data)
|
|
47
|
+
else
|
|
48
|
+
data[:error] = 'Content field required!'
|
|
49
|
+
data
|
|
50
|
+
end
|
|
51
|
+
end
|
|
50
52
|
end
|
|
51
53
|
|
|
52
|
-
Dir[File.join(__dir__, 'dockcheck', '*.rb')].each { |file| require file }
|
|
54
|
+
Dir[File.join(__dir__, 'dockcheck', '*.rb')].sort.each { |file| require file }
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dockcheck
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Artem Solomatin
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-01-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|