validates_russian 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|