dockcheck 1.4.0 → 2.0.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/lib/dockcheck.rb +31 -16
- data/lib/dockcheck/bik.rb +10 -9
- data/lib/dockcheck/dockhelper.rb +20 -0
- data/lib/dockcheck/inn.rb +15 -13
- data/lib/dockcheck/kpp.rb +9 -5
- data/lib/dockcheck/ogrn.rb +37 -0
- data/lib/dockcheck/ogrnip.rb +16 -13
- data/lib/dockcheck/snils.rb +14 -12
- metadata +5 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9d079d9a1588386ff41c27fec9604711f1afb293ea54b7fd0755bb0528fb9568
|
|
4
|
+
data.tar.gz: 402db0e63b940b2ee0285398cddf8e9341e9d96f11289220ea11ef9318e78ee2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 35d62aca6f77b83db8e46e48016a146e7a060c40884c5f3ff3ea9131d771831a10afa065d8756512334049a40efb0e17397164957b1b205f5b4d36b629d6976c
|
|
7
|
+
data.tar.gz: 43ed21a504636aac79806bc62a9f94c4ad4dd93e0d7331f91cab92a30eade881d66e0689c09bc4501d6fa184de5ccff2ccbec6a51bf5f9dc176505ecdd1bde82
|
data/lib/dockcheck.rb
CHANGED
|
@@ -1,37 +1,52 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class DockCheck
|
|
4
|
-
@
|
|
4
|
+
@checkers_map
|
|
5
5
|
|
|
6
|
-
def initialize(
|
|
7
|
-
|
|
6
|
+
def initialize()
|
|
7
|
+
@checkers_map = {inn: Inn, snils: Snils, bik: Bik, kpp: Kpp, ogrnip: Ogrnip, ogrn: Ogrn}
|
|
8
8
|
self
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def check(
|
|
12
|
-
|
|
11
|
+
def check(data)
|
|
12
|
+
document = DockHelper.prepare_doc(data)
|
|
13
|
+
check_doc(document)
|
|
13
14
|
end
|
|
14
15
|
|
|
15
|
-
def
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
def check_many(documents)
|
|
17
|
+
documents.each do |document|
|
|
18
|
+
doc = DockHelper.prepare_doc(document)
|
|
19
|
+
check_doc(doc)
|
|
20
|
+
end
|
|
18
21
|
end
|
|
19
22
|
|
|
20
|
-
def
|
|
21
|
-
@
|
|
23
|
+
def list_checkers
|
|
24
|
+
@checkers_map.map { |checker| checker.last.name }
|
|
22
25
|
end
|
|
23
26
|
|
|
24
27
|
private
|
|
25
|
-
def dispatch(checker)
|
|
26
|
-
checkers_map = {inn: Inn, snils: Snils, bik: Bik, kpp: Kpp, ogrnip: Ogrnip}
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
def check_doc(doc)
|
|
30
|
+
checker = doc[:type]
|
|
31
|
+
result = doc
|
|
32
|
+
|
|
33
|
+
if checker
|
|
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
|
|
30
43
|
else
|
|
31
|
-
|
|
44
|
+
result[:error] = 'Document type field required!'
|
|
32
45
|
end
|
|
46
|
+
|
|
47
|
+
result
|
|
33
48
|
end
|
|
49
|
+
|
|
34
50
|
end
|
|
35
51
|
|
|
36
52
|
Dir[File.join(__dir__, 'dockcheck', '*.rb')].each { |file| require file }
|
|
37
|
-
|
data/lib/dockcheck/bik.rb
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "#{__dir__}/dockhelper.rb"
|
|
4
|
+
|
|
3
5
|
class DockCheck::Bik
|
|
4
6
|
|
|
5
|
-
def check(
|
|
7
|
+
def self.check(document)
|
|
8
|
+
bik = document[:content]
|
|
9
|
+
|
|
6
10
|
case bik.length
|
|
7
11
|
when 9
|
|
8
|
-
|
|
12
|
+
document[:correct] = DockHelper.only_digits?(bik)
|
|
9
13
|
else
|
|
10
|
-
|
|
14
|
+
document[:error] = 'Incorrect bik numbers count!'
|
|
11
15
|
end
|
|
16
|
+
|
|
17
|
+
document
|
|
12
18
|
end
|
|
13
19
|
|
|
14
|
-
def name
|
|
20
|
+
def self.name
|
|
15
21
|
:bik
|
|
16
22
|
end
|
|
17
23
|
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
def bik_valid?(bik)
|
|
21
|
-
bik.scan(/\D/).empty?
|
|
22
|
-
end
|
|
23
24
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class DockHelper
|
|
4
|
+
|
|
5
|
+
def self.numberize_document(numbers)
|
|
6
|
+
numbers.split('').map(&:to_i)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.only_digits?(document)
|
|
10
|
+
document.scan(/\D/).empty?
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.prepare_doc(doc)
|
|
14
|
+
new_data = doc
|
|
15
|
+
new_data[:correct] = false
|
|
16
|
+
new_data[:error] = ""
|
|
17
|
+
new_data
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
data/lib/dockcheck/inn.rb
CHANGED
|
@@ -1,49 +1,51 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "#{__dir__}/dockhelper.rb"
|
|
4
|
+
|
|
3
5
|
class DockCheck::Inn
|
|
4
6
|
@@ten_digits_map = [2, 4, 10, 3, 5, 9, 4, 6, 8]
|
|
5
7
|
@@twelve_digits_first_map = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
|
|
6
8
|
@@twelve_digits_second_map = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
|
|
7
9
|
|
|
8
|
-
def check(
|
|
9
|
-
inn =
|
|
10
|
+
def self.check(document)
|
|
11
|
+
inn = DockHelper.numberize_document(document[:content])
|
|
12
|
+
|
|
10
13
|
case inn.count
|
|
11
14
|
when 10
|
|
12
|
-
ten_digit_inn_valid?(inn)
|
|
15
|
+
document[:correct] = ten_digit_inn_valid?(inn)
|
|
13
16
|
when 12
|
|
14
|
-
twelve_digit_inn_valid?(inn)
|
|
17
|
+
document[:correct] = twelve_digit_inn_valid?(inn)
|
|
15
18
|
else
|
|
16
|
-
|
|
19
|
+
document[:error] = 'Incorrect inn numbers count!'
|
|
17
20
|
end
|
|
21
|
+
|
|
22
|
+
document
|
|
18
23
|
end
|
|
19
24
|
|
|
20
|
-
def name
|
|
25
|
+
def self.name
|
|
21
26
|
:inn
|
|
22
27
|
end
|
|
23
28
|
|
|
24
29
|
private
|
|
25
|
-
def prepare_inn(numbers)
|
|
26
|
-
numbers.split('').map(&:to_i)
|
|
27
|
-
end
|
|
28
30
|
|
|
29
|
-
def control_sum_calc(inn, coefficients)
|
|
31
|
+
def self.control_sum_calc(inn, coefficients)
|
|
30
32
|
inn
|
|
31
33
|
.zip(coefficients)
|
|
32
34
|
.filter { |(a, b)| !b.nil? }
|
|
33
35
|
.reduce(0) { |acc, (a, b)| a * b + acc }
|
|
34
36
|
end
|
|
35
37
|
|
|
36
|
-
def sum_div(number)
|
|
38
|
+
def self.sum_div(number)
|
|
37
39
|
number % 11 % 10
|
|
38
40
|
end
|
|
39
41
|
|
|
40
|
-
def ten_digit_inn_valid?(inn)
|
|
42
|
+
def self.ten_digit_inn_valid?(inn)
|
|
41
43
|
last_number = inn.last
|
|
42
44
|
control_sum = control_sum_calc(inn, @@ten_digits_map)
|
|
43
45
|
last_number == sum_div(control_sum)
|
|
44
46
|
end
|
|
45
47
|
|
|
46
|
-
def twelve_digit_inn_valid?(inn)
|
|
48
|
+
def self.twelve_digit_inn_valid?(inn)
|
|
47
49
|
last_number = inn.last
|
|
48
50
|
penult_number = inn.fetch(10)
|
|
49
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
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "#{__dir__}/dockhelper.rb"
|
|
4
|
+
|
|
5
|
+
class DockCheck::Ogrn
|
|
6
|
+
|
|
7
|
+
def self.check(document)
|
|
8
|
+
ogrn = document[:content]
|
|
9
|
+
|
|
10
|
+
case ogrn.length
|
|
11
|
+
when 13
|
|
12
|
+
document[:correct] =
|
|
13
|
+
if DockHelper.only_digits?(ogrn)
|
|
14
|
+
ogrn_valid?(ogrn)
|
|
15
|
+
else
|
|
16
|
+
false
|
|
17
|
+
end
|
|
18
|
+
else
|
|
19
|
+
document[:error] = 'Incorrect ogrn numbers count!'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
document
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.name
|
|
26
|
+
:ogrn
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def self.ogrn_valid?(ogrn)
|
|
32
|
+
first_code = ogrn[0..12].to_i
|
|
33
|
+
second_code = (first_code / 11).floor * 11
|
|
34
|
+
result_sum = (first_code - second_code) % 10
|
|
35
|
+
result_sum == ogrn[13].to_i
|
|
36
|
+
end
|
|
37
|
+
end
|
data/lib/dockcheck/ogrnip.rb
CHANGED
|
@@ -1,31 +1,34 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "#{__dir__}/dockhelper.rb"
|
|
4
|
+
|
|
3
5
|
class DockCheck::Ogrnip
|
|
4
6
|
|
|
5
|
-
def check(
|
|
7
|
+
def self.check(document)
|
|
8
|
+
ogrnip = document[:content]
|
|
9
|
+
|
|
6
10
|
case ogrnip.length
|
|
7
11
|
when 15
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
document[:correct] =
|
|
13
|
+
if DockHelper.only_digits?(ogrnip)
|
|
14
|
+
ogrnip_valid?(ogrnip)
|
|
15
|
+
else
|
|
16
|
+
false
|
|
17
|
+
end
|
|
13
18
|
else
|
|
14
|
-
|
|
19
|
+
document[:error] = 'Incorrect ogrnip numbers count!'
|
|
15
20
|
end
|
|
21
|
+
|
|
22
|
+
document
|
|
16
23
|
end
|
|
17
24
|
|
|
18
|
-
def name
|
|
25
|
+
def self.name
|
|
19
26
|
:ogrnip
|
|
20
27
|
end
|
|
21
28
|
|
|
22
29
|
private
|
|
23
30
|
|
|
24
|
-
def
|
|
25
|
-
ogrnip.scan(/\D/).empty?
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def ogrnip_valid?(ogrnip)
|
|
31
|
+
def self.ogrnip_valid?(ogrnip)
|
|
29
32
|
first_code = ogrnip[0..13].to_i
|
|
30
33
|
second_code = (first_code / 13).floor * 13
|
|
31
34
|
result_sum = (first_code - second_code) % 10
|
data/lib/dockcheck/snils.rb
CHANGED
|
@@ -1,36 +1,38 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "#{__dir__}/dockhelper.rb"
|
|
4
|
+
|
|
3
5
|
class DockCheck::Snils
|
|
4
6
|
@@coefficients_map = [9, 8, 7, 6, 5, 4, 3, 2, 1]
|
|
5
7
|
|
|
6
|
-
def check(
|
|
7
|
-
snils =
|
|
8
|
+
def self.check(document)
|
|
9
|
+
snils = DockHelper.numberize_document(document[:content])
|
|
10
|
+
|
|
8
11
|
case snils.count
|
|
9
12
|
when 11
|
|
10
|
-
last_digits =
|
|
11
|
-
snils_valid?(snils, last_digits)
|
|
13
|
+
last_digits = document[:content].slice(9, 10).to_i
|
|
14
|
+
document[:correct] = snils_valid?(snils, last_digits)
|
|
12
15
|
else
|
|
13
|
-
|
|
16
|
+
document[:error] = 'Incorrect snils numbers count!'
|
|
14
17
|
end
|
|
18
|
+
|
|
19
|
+
document
|
|
15
20
|
end
|
|
16
21
|
|
|
17
|
-
def name
|
|
22
|
+
def self.name
|
|
18
23
|
:snils
|
|
19
24
|
end
|
|
20
25
|
|
|
21
26
|
private
|
|
22
|
-
def prepare_snils(numbers)
|
|
23
|
-
numbers.split('').map(&:to_i)
|
|
24
|
-
end
|
|
25
27
|
|
|
26
|
-
def control_sum_calc(inn, coefficients)
|
|
28
|
+
def self.control_sum_calc(inn, coefficients)
|
|
27
29
|
inn
|
|
28
30
|
.zip(coefficients)
|
|
29
31
|
.filter { |(a, b)| !b.nil? }
|
|
30
32
|
.reduce(0) { |acc, (a, b)| a * b + acc }
|
|
31
33
|
end
|
|
32
34
|
|
|
33
|
-
def check_control_sum(control_sum)
|
|
35
|
+
def self.check_control_sum(control_sum)
|
|
34
36
|
if control_sum < 100
|
|
35
37
|
control_sum
|
|
36
38
|
elsif control_sum == 100
|
|
@@ -41,7 +43,7 @@ class DockCheck::Snils
|
|
|
41
43
|
end
|
|
42
44
|
end
|
|
43
45
|
|
|
44
|
-
def snils_valid?(snils, last_digits)
|
|
46
|
+
def self.snils_valid?(snils, last_digits)
|
|
45
47
|
control_sum = control_sum_calc(snils, @@coefficients_map)
|
|
46
48
|
last_digits == check_control_sum(control_sum)
|
|
47
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.2
|
|
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-06
|
|
11
|
+
date: 2021-07-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|
|
@@ -32,8 +32,10 @@ extra_rdoc_files: []
|
|
|
32
32
|
files:
|
|
33
33
|
- lib/dockcheck.rb
|
|
34
34
|
- lib/dockcheck/bik.rb
|
|
35
|
+
- lib/dockcheck/dockhelper.rb
|
|
35
36
|
- lib/dockcheck/inn.rb
|
|
36
37
|
- lib/dockcheck/kpp.rb
|
|
38
|
+
- lib/dockcheck/ogrn.rb
|
|
37
39
|
- lib/dockcheck/ogrnip.rb
|
|
38
40
|
- lib/dockcheck/snils.rb
|
|
39
41
|
homepage: https://rubygems.org/gems/dockcheck
|
|
@@ -48,7 +50,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
48
50
|
requirements:
|
|
49
51
|
- - ">="
|
|
50
52
|
- !ruby/object:Gem::Version
|
|
51
|
-
version: 2.
|
|
53
|
+
version: 2.5.0
|
|
52
54
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
55
|
requirements:
|
|
54
56
|
- - ">="
|