validates_russian 0.0.5 → 0.0.6
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/CHANGELOG.md +10 -0
- data/README.md +3 -3
- data/doc/english_readme.md +3 -1
- data/lib/validates_russian/okato_region_numbers.rb +3 -0
- data/lib/validates_russian/version.rb +1 -1
- data/lib/validators/okato_format_validator.rb +20 -0
- data/lib/validators/passport_format_validator.rb +8 -0
- data/lib/validators/snils_format_validator.rb +20 -0
- data/spec/validators/inn_format_validator_spec.rb +1 -0
- data/spec/validators/okato_format_validator_spec.rb +38 -0
- data/spec/validators/passport_format_validator_spec.rb +38 -0
- data/spec/validators/snils_format_validator_spec.rb +39 -0
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a9a6630d0d107ba996e35406d6e003de4c597c5
|
4
|
+
data.tar.gz: 72a174080a59d75f87e8fb108b976d05fa242d7a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc04c67c11c4a8dc19578dcb604fc527042538e1bc92ad5ea26188e6b93d80d505525fb167279a9fe7f011e18501cfd08b6bcd2ff3c4c59515b09779a2aaafe8
|
7
|
+
data.tar.gz: 310ca0b03a83734c11944762c0a81ae1342769db515b6f4563d17000ae0cf4309a9af2cb099dfec0015a66240ed3c8e31227d35cd5f6516a96c2e6ab83f2764a
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -14,9 +14,9 @@
|
|
14
14
|
* [ОГРН](http://ru.wikipedia.org/wiki/Основной_государственный_регистрационный_номер) (OgrnFormatValidator)
|
15
15
|
* [Корреспондентский счёт] (http://ru.wikipedia.org/wiki/Корреспондентский_счёт) (KsFormatValidator)
|
16
16
|
* [Рассчётный счёт] (http://ru.wikipedia.org/wiki/Расчётный_счёт) (RsFormatValidator)
|
17
|
-
*
|
18
|
-
* СНИЛС
|
19
|
-
* Значение паспорта
|
17
|
+
* [OKATO](http://ru.wikipedia.org/wiki/Общероссийский_классификатор_объектов_административно-территориального_деления) (OkatoFormatValidator)
|
18
|
+
* [СНИЛС](http://ru.wikipedia.org/wiki/Страховой_номер_индивидуального_лицевого_счёта) (SnilsFormatValidator)
|
19
|
+
* [Значение паспорта](http://ru.wikipedia.org/wiki/Паспорт_гражданина_Российской_Федерации) (PassportFormatValidator)
|
20
20
|
|
21
21
|
## Установка
|
22
22
|
|
data/doc/english_readme.md
CHANGED
@@ -9,11 +9,13 @@ Russian specific values validation:
|
|
9
9
|
|
10
10
|
* [INN](http://ru.wikipedia.org/wiki/Идентификационный_номер_налогоплательщика) (InnFormatValidator) Russian analogue of VAT identification number
|
11
11
|
* [OKPO](http://ru.wikipedia.org/wiki/Общероссийский_классификатор_предприятий_и_организаций) (OkpoFormatValidator) Legal code
|
12
|
-
* OKATO (TODO)
|
13
12
|
* [KPP](http://ru.wikipedia.org/wiki/Код_причины_постановки_на_учёт) (KppFormatValidator) Code of reason for registration
|
14
13
|
* [OGRN](http://ru.wikipedia.org/wiki/Основной_государственный_регистрационный_номер) (OgrnFormatValidator) Main state registration number
|
15
14
|
* [Correspondent Account Value] (http://ru.wikipedia.org/wiki/Корреспондентский_счёт) (KsFormatValidator)
|
16
15
|
* [Bank Account Value] (http://ru.wikipedia.org/wiki/Расчётный_счёт) (RsFormatValidator)
|
16
|
+
* [OKATO](http://ru.wikipedia.org/wiki/Общероссийский_классификатор_объектов_административно-территориального_деления) (OkatoFormatValidator)
|
17
|
+
* [SNILS](http://ru.wikipedia.org/wiki/Страховой_номер_индивидуального_лицевого_счёта) (SnilsFormatValidator)
|
18
|
+
* [Passport Value](http://ru.wikipedia.org/wiki/Паспорт_гражданина_Российской_Федерации) (PassportFormatValidator)
|
17
19
|
|
18
20
|
## Installation
|
19
21
|
|
@@ -0,0 +1,3 @@
|
|
1
|
+
module ValidatesRussian
|
2
|
+
OKATO_REGION_NUMBERS = %w{79 84 80 81 82 26 83 85 91 86 87 88 89 98 90 92 93 94 95 96 97 01 03 04 05 07 08 11 12 14 15 17 19 20 24 25 27 29 20 32 33 34 37 38 41 42 44 46 47 22 49 50 52 53 54 56 57 58 60 61 36 63 64 65 66 68 28 69 73 75 76 78 45 40 99 43 48 51 55 59 62 67 77 72 74}
|
3
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class OkatoFormatValidator < ValidatesRussian::Validator
|
2
|
+
validates_using do |okato|
|
3
|
+
next false unless okato =~ /^\d+$/
|
4
|
+
|
5
|
+
okato = okato.split(//).map(&:to_i)
|
6
|
+
|
7
|
+
next false unless [3, 6, 9].include?(okato.size)
|
8
|
+
next false unless calc(okato) == okato.last
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def self.calc(okato)
|
14
|
+
[1, 3].each do |i|
|
15
|
+
code = okato[0..-2].each_with_index.inject(0){ |s, p| s + p[0] * (p[1] + i) } % 11
|
16
|
+
return code if code < 10
|
17
|
+
end
|
18
|
+
0
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class PassportFormatValidator < ValidatesRussian::Validator
|
2
|
+
# see format here: http://ru.wikipedia.org/wiki/Паспорт_гражданина_Российской_Федерации
|
3
|
+
validates_using do |passport|
|
4
|
+
next false unless passport =~ /^\d+$/
|
5
|
+
next false unless ValidatesRussian::OKATO_REGION_NUMBERS.include?(passport[0..1])
|
6
|
+
next false unless passport.size == 10
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class SnilsFormatValidator < ValidatesRussian::Validator
|
2
|
+
validates_using do |snils|
|
3
|
+
next false unless snils =~ /^\d+$/
|
4
|
+
|
5
|
+
case snils.size
|
6
|
+
when 11 then next false unless calc(snils) == snils[-2..-1]
|
7
|
+
when 9 then next false unless snils.to_i <= 1001998
|
8
|
+
else next false
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def self.calc(snils)
|
15
|
+
snils = snils.split(//).map(&:to_i)
|
16
|
+
code = snils[0..-3].each_with_index
|
17
|
+
.inject(0){ |s, p| s + p[0] * (9 - p[1]) } % 101 % 100
|
18
|
+
code = (code < 10 ? code = '0' + code.to_s : code.to_s)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OkatoFormatValidator do
|
4
|
+
before(:each) do
|
5
|
+
TestModel.reset_callbacks(:validate)
|
6
|
+
TestModel.validates(:field, okato_format: true)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should be valid for valid values' do
|
10
|
+
valid_okatos = %w{
|
11
|
+
794038
|
12
|
+
457892
|
13
|
+
729267
|
14
|
+
729255
|
15
|
+
}
|
16
|
+
|
17
|
+
valid_okatos.each do |okato|
|
18
|
+
model = TestModel.new
|
19
|
+
model.field = okato
|
20
|
+
model.should be_valid
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should not be valid for invalid values' do
|
25
|
+
invalid_okatos = %w{
|
26
|
+
794033
|
27
|
+
794032
|
28
|
+
77150100
|
29
|
+
78fffffff
|
30
|
+
}.push('', ' ', nil, [], {})
|
31
|
+
|
32
|
+
invalid_okatos.each do |okato|
|
33
|
+
model = TestModel.new
|
34
|
+
model.field = okato
|
35
|
+
model.should_not be_valid
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PassportFormatValidator do
|
4
|
+
before(:each) do
|
5
|
+
TestModel.reset_callbacks(:validate)
|
6
|
+
TestModel.validates(:field, passport_format: true)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should be valid for valid values' do
|
10
|
+
valid_passports = %w{
|
11
|
+
6184729864
|
12
|
+
4023841230
|
13
|
+
0110019981
|
14
|
+
5710019971
|
15
|
+
}
|
16
|
+
|
17
|
+
valid_passports.each do |passport|
|
18
|
+
model = TestModel.new
|
19
|
+
model.field = passport
|
20
|
+
model.should be_valid
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should not be valid for invalid values' do
|
25
|
+
invalid_passports = %w{
|
26
|
+
1
|
27
|
+
231
|
28
|
+
77150100
|
29
|
+
78fffffff
|
30
|
+
}.push('', ' ', nil, [], {})
|
31
|
+
|
32
|
+
invalid_passports.each do |passport|
|
33
|
+
model = TestModel.new
|
34
|
+
model.field = passport
|
35
|
+
model.should_not be_valid
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SnilsFormatValidator do
|
4
|
+
before(:each) do
|
5
|
+
TestModel.reset_callbacks(:validate)
|
6
|
+
TestModel.validates(:field, snils_format: true)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should be valid for valid values' do
|
10
|
+
valid_snilses = %w{
|
11
|
+
11223344595
|
12
|
+
67238412306
|
13
|
+
001001998
|
14
|
+
001001997
|
15
|
+
}
|
16
|
+
|
17
|
+
valid_snilses.each do |snils|
|
18
|
+
model = TestModel.new
|
19
|
+
model.field = snils
|
20
|
+
model.should be_valid
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should not be valid for invalid values' do
|
25
|
+
invalid_snilses = %w{
|
26
|
+
77150100
|
27
|
+
67237412306
|
28
|
+
67238412307
|
29
|
+
11223344594
|
30
|
+
78fffffff
|
31
|
+
}.push('', ' ', nil, [], {})
|
32
|
+
|
33
|
+
invalid_snilses.each do |snils|
|
34
|
+
model = TestModel.new
|
35
|
+
model.field = snils
|
36
|
+
model.should_not be_valid
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validates_russian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Antonov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- gemfiles/Gemfile.activemodel-3.0
|
85
85
|
- gemfiles/Gemfile.activemodel-4.0
|
86
86
|
- lib/validates_russian.rb
|
87
|
+
- lib/validates_russian/okato_region_numbers.rb
|
87
88
|
- lib/validates_russian/okv.rb
|
88
89
|
- lib/validates_russian/region_numbers.rb
|
89
90
|
- lib/validates_russian/validator.rb
|
@@ -92,16 +93,22 @@ files:
|
|
92
93
|
- lib/validators/kpp_format_validator.rb
|
93
94
|
- lib/validators/ks_format_validator.rb
|
94
95
|
- lib/validators/ogrn_format_validator.rb
|
96
|
+
- lib/validators/okato_format_validator.rb
|
95
97
|
- lib/validators/okpo_format_validator.rb
|
98
|
+
- lib/validators/passport_format_validator.rb
|
96
99
|
- lib/validators/rs_format_validator.rb
|
100
|
+
- lib/validators/snils_format_validator.rb
|
97
101
|
- spec/spec_helper.rb
|
98
102
|
- spec/support/test_model.rb
|
99
103
|
- spec/validators/inn_format_validator_spec.rb
|
100
104
|
- spec/validators/kpp_format_validator_spec.rb
|
101
105
|
- spec/validators/ks_format_validator_spec.rb
|
102
106
|
- spec/validators/ogrn_format_validator_spec.rb
|
107
|
+
- spec/validators/okato_format_validator_spec.rb
|
103
108
|
- spec/validators/okpo_format_validator_spec.rb
|
109
|
+
- spec/validators/passport_format_validator_spec.rb
|
104
110
|
- spec/validators/rs_format_validator_spec.rb
|
111
|
+
- spec/validators/snils_format_validator_spec.rb
|
105
112
|
- validates_russian.gemspec
|
106
113
|
homepage: http://github.com/asiniy/validates_russian
|
107
114
|
licenses:
|
@@ -134,5 +141,8 @@ test_files:
|
|
134
141
|
- spec/validators/kpp_format_validator_spec.rb
|
135
142
|
- spec/validators/ks_format_validator_spec.rb
|
136
143
|
- spec/validators/ogrn_format_validator_spec.rb
|
144
|
+
- spec/validators/okato_format_validator_spec.rb
|
137
145
|
- spec/validators/okpo_format_validator_spec.rb
|
146
|
+
- spec/validators/passport_format_validator_spec.rb
|
138
147
|
- spec/validators/rs_format_validator_spec.rb
|
148
|
+
- spec/validators/snils_format_validator_spec.rb
|