dockcheck 1.5.2 → 2.0.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 +4 -4
- data/lib/dockcheck.rb +13 -23
- data/lib/dockcheck/bik.rb +8 -4
- data/lib/dockcheck/dockhelper.rb +7 -0
- data/lib/dockcheck/inn.rb +13 -10
- data/lib/dockcheck/kpp.rb +9 -5
- data/lib/dockcheck/ogrn.rb +14 -9
- data/lib/dockcheck/ogrnip.rb +14 -9
- data/lib/dockcheck/snils.rb +12 -9
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0334f4fff36db9957de8703cfb0a729fadf92677bff5e26cd2639dd14d0bf335
|
|
4
|
+
data.tar.gz: bf5fd6c357a00f436a0c75ed75d5e0a67b1166c4ad7d8aab4f85efdb97a2f16e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bb1ff933ac9370992f3ee5ad68ff4adf25deb0d442fffcf2442556922b7939ce2ac8a2dafe6450b59a61129ec4a4f547107fc61dca74eaf119b3e2e02930520a
|
|
7
|
+
data.tar.gz: 44fc73683518fb66e17e9a12d649db25887c0f3765e446db8970a622c895bfbdfcbdb87a0ef821ad546ab69df93d6bd99d17f44c53abb7a61b6fb25f2aec9168
|
data/lib/dockcheck.rb
CHANGED
|
@@ -1,45 +1,35 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class DockCheck
|
|
4
|
-
@current_checker
|
|
5
4
|
@checkers_map
|
|
6
5
|
|
|
7
|
-
def initialize(
|
|
6
|
+
def initialize()
|
|
8
7
|
@checkers_map = {inn: Inn, snils: Snils, bik: Bik, kpp: Kpp, ogrnip: Ogrnip, ogrn: Ogrn}
|
|
9
|
-
dispatch(checker)
|
|
10
8
|
self
|
|
11
9
|
end
|
|
12
10
|
|
|
13
|
-
def check(
|
|
14
|
-
|
|
11
|
+
def check(data)
|
|
12
|
+
doc = DockHelper.prepare_doc(data)
|
|
13
|
+
checker = doc[:type]
|
|
14
|
+
if @checkers_map.key?(checker.to_sym)
|
|
15
|
+
@checkers_map[checker].check(doc)
|
|
16
|
+
else
|
|
17
|
+
raise 'Incorrect checker!'
|
|
18
|
+
end
|
|
15
19
|
end
|
|
16
20
|
|
|
17
21
|
def check_many(documents)
|
|
18
22
|
documents.each do |document|
|
|
19
23
|
checker = document[:type]
|
|
20
|
-
doc = document
|
|
21
|
-
|
|
22
|
-
document[:correct] = @checkers_map[checker].new.check(doc, extra)
|
|
24
|
+
doc = DockHelper.prepare_doc(document)
|
|
25
|
+
@checkers_map[checker].check(doc)
|
|
23
26
|
end
|
|
24
27
|
end
|
|
25
28
|
|
|
26
|
-
def
|
|
27
|
-
|
|
28
|
-
self
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def current_checker
|
|
32
|
-
@current_checker.name()
|
|
29
|
+
def list_checkers
|
|
30
|
+
@checkers_map.map { |checker| checker.last.name }
|
|
33
31
|
end
|
|
34
32
|
|
|
35
|
-
private
|
|
36
|
-
def dispatch(checker)
|
|
37
|
-
if @checkers_map.key?(checker.to_sym)
|
|
38
|
-
@current_checker = @checkers_map[checker].new
|
|
39
|
-
else
|
|
40
|
-
raise 'Incorrect checker!'
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
33
|
end
|
|
44
34
|
|
|
45
35
|
Dir[File.join(__dir__, 'dockcheck', '*.rb')].each { |file| require file }
|
data/lib/dockcheck/bik.rb
CHANGED
|
@@ -4,16 +4,20 @@ require "#{__dir__}/dockhelper.rb"
|
|
|
4
4
|
|
|
5
5
|
class DockCheck::Bik
|
|
6
6
|
|
|
7
|
-
def check(
|
|
7
|
+
def self.check(document)
|
|
8
|
+
bik = document[:content]
|
|
9
|
+
|
|
8
10
|
case bik.length
|
|
9
11
|
when 9
|
|
10
|
-
DockHelper.only_digits?(bik)
|
|
12
|
+
document[:correct] = DockHelper.only_digits?(bik)
|
|
11
13
|
else
|
|
12
|
-
|
|
14
|
+
document[:error] = 'Incorrect bik numbers count!'
|
|
13
15
|
end
|
|
16
|
+
|
|
17
|
+
document
|
|
14
18
|
end
|
|
15
19
|
|
|
16
|
-
def name
|
|
20
|
+
def self.name
|
|
17
21
|
:bik
|
|
18
22
|
end
|
|
19
23
|
|
data/lib/dockcheck/dockhelper.rb
CHANGED
data/lib/dockcheck/inn.rb
CHANGED
|
@@ -7,42 +7,45 @@ class DockCheck::Inn
|
|
|
7
7
|
@@twelve_digits_first_map = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
|
|
8
8
|
@@twelve_digits_second_map = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
|
|
9
9
|
|
|
10
|
-
def check(
|
|
11
|
-
inn = DockHelper.numberize_document(
|
|
10
|
+
def self.check(document)
|
|
11
|
+
inn = DockHelper.numberize_document(document[:content])
|
|
12
|
+
|
|
12
13
|
case inn.count
|
|
13
14
|
when 10
|
|
14
|
-
ten_digit_inn_valid?(inn)
|
|
15
|
+
document[:correct] = ten_digit_inn_valid?(inn)
|
|
15
16
|
when 12
|
|
16
|
-
twelve_digit_inn_valid?(inn)
|
|
17
|
+
document[:correct] = twelve_digit_inn_valid?(inn)
|
|
17
18
|
else
|
|
18
|
-
|
|
19
|
+
document[:error] = 'Incorrect inn numbers count!'
|
|
19
20
|
end
|
|
21
|
+
|
|
22
|
+
document
|
|
20
23
|
end
|
|
21
24
|
|
|
22
|
-
def name
|
|
25
|
+
def self.name
|
|
23
26
|
:inn
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
private
|
|
27
30
|
|
|
28
|
-
def control_sum_calc(inn, coefficients)
|
|
31
|
+
def self.control_sum_calc(inn, coefficients)
|
|
29
32
|
inn
|
|
30
33
|
.zip(coefficients)
|
|
31
34
|
.filter { |(a, b)| !b.nil? }
|
|
32
35
|
.reduce(0) { |acc, (a, b)| a * b + acc }
|
|
33
36
|
end
|
|
34
37
|
|
|
35
|
-
def sum_div(number)
|
|
38
|
+
def self.sum_div(number)
|
|
36
39
|
number % 11 % 10
|
|
37
40
|
end
|
|
38
41
|
|
|
39
|
-
def ten_digit_inn_valid?(inn)
|
|
42
|
+
def self.ten_digit_inn_valid?(inn)
|
|
40
43
|
last_number = inn.last
|
|
41
44
|
control_sum = control_sum_calc(inn, @@ten_digits_map)
|
|
42
45
|
last_number == sum_div(control_sum)
|
|
43
46
|
end
|
|
44
47
|
|
|
45
|
-
def twelve_digit_inn_valid?(inn)
|
|
48
|
+
def self.twelve_digit_inn_valid?(inn)
|
|
46
49
|
last_number = inn.last
|
|
47
50
|
penult_number = inn.fetch(10)
|
|
48
51
|
|
data/lib/dockcheck/kpp.rb
CHANGED
|
@@ -2,22 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
class DockCheck::Kpp
|
|
4
4
|
|
|
5
|
-
def check(
|
|
5
|
+
def self.check(document)
|
|
6
|
+
kpp = document[:content]
|
|
7
|
+
|
|
6
8
|
case kpp.length
|
|
7
9
|
when 9
|
|
8
|
-
kpp_valid?(kpp)
|
|
10
|
+
document[:correct] = kpp_valid?(kpp)
|
|
9
11
|
else
|
|
10
|
-
|
|
12
|
+
document[:error] = 'Incorrect kpp numbers count!'
|
|
11
13
|
end
|
|
14
|
+
|
|
15
|
+
document
|
|
12
16
|
end
|
|
13
17
|
|
|
14
|
-
def name
|
|
18
|
+
def self.name
|
|
15
19
|
:kpp
|
|
16
20
|
end
|
|
17
21
|
|
|
18
22
|
private
|
|
19
23
|
|
|
20
|
-
def kpp_valid?(kpp)
|
|
24
|
+
def self.kpp_valid?(kpp)
|
|
21
25
|
!!(kpp =~ /^[0-9]{4}[0-9A-Z]{2}[0-9]{3}$/)
|
|
22
26
|
end
|
|
23
27
|
end
|
data/lib/dockcheck/ogrn.rb
CHANGED
|
@@ -4,26 +4,31 @@ require "#{__dir__}/dockhelper.rb"
|
|
|
4
4
|
|
|
5
5
|
class DockCheck::Ogrn
|
|
6
6
|
|
|
7
|
-
def check(
|
|
7
|
+
def self.check(document)
|
|
8
|
+
ogrn = document[:content]
|
|
9
|
+
|
|
8
10
|
case ogrn.length
|
|
9
11
|
when 13
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
document[:correct] =
|
|
13
|
+
if DockHelper.only_digits?(ogrn)
|
|
14
|
+
ogrn_valid?(ogrn)
|
|
15
|
+
else
|
|
16
|
+
false
|
|
17
|
+
end
|
|
15
18
|
else
|
|
16
|
-
|
|
19
|
+
document[:error] = 'Incorrect ogrn numbers count!'
|
|
17
20
|
end
|
|
21
|
+
|
|
22
|
+
document
|
|
18
23
|
end
|
|
19
24
|
|
|
20
|
-
def name
|
|
25
|
+
def self.name
|
|
21
26
|
:ogrn
|
|
22
27
|
end
|
|
23
28
|
|
|
24
29
|
private
|
|
25
30
|
|
|
26
|
-
def ogrn_valid?(ogrn)
|
|
31
|
+
def self.ogrn_valid?(ogrn)
|
|
27
32
|
first_code = ogrn[0..12].to_i
|
|
28
33
|
second_code = (first_code / 11).floor * 11
|
|
29
34
|
result_sum = (first_code - second_code) % 10
|
data/lib/dockcheck/ogrnip.rb
CHANGED
|
@@ -4,26 +4,31 @@ require "#{__dir__}/dockhelper.rb"
|
|
|
4
4
|
|
|
5
5
|
class DockCheck::Ogrnip
|
|
6
6
|
|
|
7
|
-
def check(
|
|
7
|
+
def self.check(document)
|
|
8
|
+
ogrnip = document[:content]
|
|
9
|
+
|
|
8
10
|
case ogrnip.length
|
|
9
11
|
when 15
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
document[:correct] =
|
|
13
|
+
if DockHelper.only_digits?(ogrnip)
|
|
14
|
+
ogrnip_valid?(ogrnip)
|
|
15
|
+
else
|
|
16
|
+
false
|
|
17
|
+
end
|
|
15
18
|
else
|
|
16
|
-
|
|
19
|
+
document[:error] = 'Incorrect ogrnip numbers count!'
|
|
17
20
|
end
|
|
21
|
+
|
|
22
|
+
document
|
|
18
23
|
end
|
|
19
24
|
|
|
20
|
-
def name
|
|
25
|
+
def self.name
|
|
21
26
|
:ogrnip
|
|
22
27
|
end
|
|
23
28
|
|
|
24
29
|
private
|
|
25
30
|
|
|
26
|
-
def ogrnip_valid?(ogrnip)
|
|
31
|
+
def self.ogrnip_valid?(ogrnip)
|
|
27
32
|
first_code = ogrnip[0..13].to_i
|
|
28
33
|
second_code = (first_code / 13).floor * 13
|
|
29
34
|
result_sum = (first_code - second_code) % 10
|
data/lib/dockcheck/snils.rb
CHANGED
|
@@ -5,31 +5,34 @@ require "#{__dir__}/dockhelper.rb"
|
|
|
5
5
|
class DockCheck::Snils
|
|
6
6
|
@@coefficients_map = [9, 8, 7, 6, 5, 4, 3, 2, 1]
|
|
7
7
|
|
|
8
|
-
def check(
|
|
9
|
-
snils = DockHelper.numberize_document(
|
|
8
|
+
def self.check(document)
|
|
9
|
+
snils = DockHelper.numberize_document(document[:content])
|
|
10
|
+
|
|
10
11
|
case snils.count
|
|
11
12
|
when 11
|
|
12
|
-
last_digits =
|
|
13
|
-
snils_valid?(snils, last_digits)
|
|
13
|
+
last_digits = document[:content].slice(9, 10).to_i
|
|
14
|
+
document[:correct] = snils_valid?(snils, last_digits)
|
|
14
15
|
else
|
|
15
|
-
|
|
16
|
+
document[:error] = 'Incorrect snils numbers count!'
|
|
16
17
|
end
|
|
18
|
+
|
|
19
|
+
document
|
|
17
20
|
end
|
|
18
21
|
|
|
19
|
-
def name
|
|
22
|
+
def self.name
|
|
20
23
|
:snils
|
|
21
24
|
end
|
|
22
25
|
|
|
23
26
|
private
|
|
24
27
|
|
|
25
|
-
def control_sum_calc(inn, coefficients)
|
|
28
|
+
def self.control_sum_calc(inn, coefficients)
|
|
26
29
|
inn
|
|
27
30
|
.zip(coefficients)
|
|
28
31
|
.filter { |(a, b)| !b.nil? }
|
|
29
32
|
.reduce(0) { |acc, (a, b)| a * b + acc }
|
|
30
33
|
end
|
|
31
34
|
|
|
32
|
-
def check_control_sum(control_sum)
|
|
35
|
+
def self.check_control_sum(control_sum)
|
|
33
36
|
if control_sum < 100
|
|
34
37
|
control_sum
|
|
35
38
|
elsif control_sum == 100
|
|
@@ -40,7 +43,7 @@ class DockCheck::Snils
|
|
|
40
43
|
end
|
|
41
44
|
end
|
|
42
45
|
|
|
43
|
-
def snils_valid?(snils, last_digits)
|
|
46
|
+
def self.snils_valid?(snils, last_digits)
|
|
44
47
|
control_sum = control_sum_calc(snils, @@coefficients_map)
|
|
45
48
|
last_digits == check_control_sum(control_sum)
|
|
46
49
|
end
|
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:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Artem Solomatin
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-07-
|
|
11
|
+
date: 2021-07-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|
|
@@ -50,7 +50,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
50
50
|
requirements:
|
|
51
51
|
- - ">="
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 2.
|
|
53
|
+
version: 2.5.0
|
|
54
54
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
55
|
requirements:
|
|
56
56
|
- - ">="
|