faker-russian 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +60 -3
- data/lib/faker/russian.rb +3 -0
- data/lib/faker/russian/bik.rb +1 -1
- data/lib/faker/russian/constants.rb +11 -12
- data/lib/faker/russian/correspondent_account.rb +24 -0
- data/lib/faker/russian/inn.rb +1 -1
- data/lib/faker/russian/kpp.rb +1 -1
- data/lib/faker/russian/okato.rb +1 -1
- data/lib/faker/russian/rs.rb +14 -0
- data/lib/faker/russian/snils.rb +24 -0
- data/lib/faker/russian/version.rb +1 -1
- data/spec/faker/russian/correspondent_account_spec.rb +45 -0
- data/spec/faker/russian/rs_spec.rb +47 -0
- data/spec/faker/russian/snils_spec.rb +31 -0
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13effb3bee907fce3e3f2eacfa191c4605194bf0
|
4
|
+
data.tar.gz: 4ab47b15a8dfb24c32e6e77d6c2f36b6092753b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a67c45ad8fe641a491eeb9a17b4b3055719009fa39436f9c9cf7775d25f643a942a9126d11428f3574cdd3cb018a02d88a772aa1f66cb9d090e19c45fd81b57c
|
7
|
+
data.tar.gz: 24819bb70fa43a51a8e6169f19959bd40606a40dce0ca11d9253f242aa5c8ba0262553d6d84dda1e544548115b0c300c214df8585ef770342d09939dda8a5535
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -13,10 +13,10 @@
|
|
13
13
|
* [ОКПО](http://ru.wikipedia.org/wiki/Общероссийский_классификатор_предприятий_и_организаций) (Faker::Russian.okpo)
|
14
14
|
* [КПП](http://ru.wikipedia.org/wiki/Код_причины_постановки_на_учёт) (Faker::Russian.kpp)
|
15
15
|
* (TODO) [ОГРН](http://ru.wikipedia.org/wiki/Основной_государственный_регистрационный_номер) (Faker::Russian.ogrn)
|
16
|
-
*
|
17
|
-
*
|
16
|
+
* [Корреспондентский счёт] (http://ru.wikipedia.org/wiki/Корреспондентский_счёт) (Faker::Russian.correspondent_account)
|
17
|
+
* [Расчётный счёт] (http://ru.wikipedia.org/wiki/Расчётный_счёт) (Faker::Russian.rs)
|
18
18
|
* [OKATO](http://ru.wikipedia.org/wiki/Общероссийский_классификатор_объектов_административно-территориального_деления) (Faker::Russian.okato)
|
19
|
-
*
|
19
|
+
* [СНИЛС](http://ru.wikipedia.org/wiki/Страховой_номер_индивидуального_лицевого_счёта) (Faker::Russian.snils)
|
20
20
|
* (TODO) [Значение паспорта](http://ru.wikipedia.org/wiki/Паспорт_гражданина_Российской_Федерации) (Faker::Russian.passport)
|
21
21
|
|
22
22
|
Для проверки сгенерированных значений можешь использовать [gem 'validates_russian'](https://github.com/asiniy/validates_russian)
|
@@ -108,6 +108,48 @@
|
|
108
108
|
Faker::Russian.kpp(sequence_number: 1) # => '381201001'
|
109
109
|
```
|
110
110
|
|
111
|
+
### Корреспондентский счёт
|
112
|
+
|
113
|
+
Генерируется корреспондентский счет
|
114
|
+
|
115
|
+
```ruby
|
116
|
+
Faker::Russian.correspondent_account
|
117
|
+
```
|
118
|
+
|
119
|
+
Также можно использовать последовательности (не более 1 000 000 000):
|
120
|
+
|
121
|
+
``` ruby
|
122
|
+
Faker::Russian.correspondent_account(sequence_number: 1) # => '30100000000717354021'
|
123
|
+
Faker::Russian.correspondent_account(sequence_number: 1) # => '30100000000717354021'
|
124
|
+
```
|
125
|
+
|
126
|
+
Можно указать БИК для которого генерируется счет:
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
Faker::Russian.correspondent_account(bik: '0440754281') # => '30100000341569331281'
|
130
|
+
```
|
131
|
+
|
132
|
+
### Расчетный счет
|
133
|
+
|
134
|
+
Генерирует Расчетный счет со случайным номером ОКВ
|
135
|
+
|
136
|
+
``` ruby
|
137
|
+
Faker::Russian.rs # => '88638068000072709375'
|
138
|
+
```
|
139
|
+
|
140
|
+
Можно указать ОКВ
|
141
|
+
|
142
|
+
``` ruby
|
143
|
+
Faker::Russian.rs(okv: 810) # => '86815810000597174799'
|
144
|
+
```
|
145
|
+
|
146
|
+
Также можно использовать последовательности (не более 1 000 000 000):
|
147
|
+
|
148
|
+
``` ruby
|
149
|
+
Faker::Russian.rs(sequence_number: 1) # => '98539706000946286476'
|
150
|
+
Faker::Russian.rs(sequence_number: 1) # => '98539706000946286476'
|
151
|
+
```
|
152
|
+
|
111
153
|
### ОКАТО
|
112
154
|
|
113
155
|
Генерирует ОКАТО со случайным номером региона и случайной длиной
|
@@ -137,6 +179,21 @@
|
|
137
179
|
Faker::Russian.okato(sequence_number: 1) # => '517'
|
138
180
|
```
|
139
181
|
|
182
|
+
### СНИЛС
|
183
|
+
|
184
|
+
Генерирует 11-ти значный СНИЛС
|
185
|
+
|
186
|
+
``` ruby
|
187
|
+
Faker::Russian.snils # => '15200583517'
|
188
|
+
```
|
189
|
+
|
190
|
+
Также можно использовать последовательности:
|
191
|
+
|
192
|
+
``` ruby
|
193
|
+
Faker::Russian.snils(sequence_number: 1) # => '71735402183'
|
194
|
+
Faker::Russian.snils(sequence_number: 1) # => '71735402183'
|
195
|
+
```
|
196
|
+
|
140
197
|
## Инструкции разработчикам
|
141
198
|
|
142
199
|
Читай [CONTRIBUTING.md](CONTRIBUTING.md)
|
data/lib/faker/russian.rb
CHANGED
data/lib/faker/russian/bik.rb
CHANGED
@@ -5,7 +5,7 @@ module Faker
|
|
5
5
|
options.assert_valid_keys(:sequence_number, :okato_region_number)
|
6
6
|
|
7
7
|
sequence = find_sequence(options[:sequence_number])
|
8
|
-
okato_region_number =
|
8
|
+
okato_region_number = find_region_number(options[:okato_region_number], sequence, :okato_region_numbers)
|
9
9
|
|
10
10
|
'04' + okato_region_number + sprintf("%06d", sequence.rand(1_000_000))
|
11
11
|
end
|
@@ -3,8 +3,12 @@ module Faker
|
|
3
3
|
module Constants
|
4
4
|
REGION_NUMBERS = %w{01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 83 86 87 89}
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
OKATO_REGION_NUMBERS = %w{01 03 04 05 07 08 11 12 14 15 17 19 20 22 24 25 26 27 28 29 32 33 34 36 37 38 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99}
|
7
|
+
|
8
|
+
OKV = %w{388 728 156 230 132 144 756 752 152 203 191 238 826 654 646 953 952 950 174 262 348 608 940 858 860 478 800 949 788 496 398 834 882 050 968 938 972 706 417 760 702 941 690 408 960 682 222 710 462 360 643 116 072 446 586 776 512 578 934 901 604 946 376 554 532 524 064 232 566 498 943 484 504 458 969 480 426 440 748 434 422 430 694 340 008 428 981 104 414 192 188 976 931 977 170 418 598 320 404 454 973 634 124 886 352 364 368 400 356 392 558 985 967 970 818 978 704 214 242 780 840 090 136 516 932 678 784 807 208 270 332 600 980 344 292 324 936 328 951 410 548 108 096 986 068 937 975 060 974 084 048 764 052 590 044 971 533 051 032 012 944 036 810}.freeze
|
9
|
+
|
10
|
+
def find_region_number(number = nil, sequence, region_number_type)
|
11
|
+
region_numbers = Faker::Russian::Constants.const_get(region_number_type.to_s.upcase)
|
8
12
|
|
9
13
|
if number.present?
|
10
14
|
raise('there is no region with that number!') unless region_numbers.include?(number.to_s)
|
@@ -14,19 +18,14 @@ module Faker
|
|
14
18
|
end
|
15
19
|
end
|
16
20
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
if number.present?
|
23
|
-
raise('there is no okato region with that number!') unless region_numbers.include?(number.to_s)
|
24
|
-
number.to_s
|
21
|
+
def find_okv(okv = nil, sequence)
|
22
|
+
if okv && okv.to_s.length > 0
|
23
|
+
raise ArgumentError.new("There is no OKV \"%s\"" % okv.to_s) unless OKV.include?(okv.to_s)
|
24
|
+
okv.to_s
|
25
25
|
else
|
26
|
-
|
26
|
+
OKV[sequence.rand(OKV.size)]
|
27
27
|
end
|
28
28
|
end
|
29
|
-
|
30
29
|
end
|
31
30
|
end
|
32
31
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Faker
|
2
|
+
module Russian
|
3
|
+
module CorrespondentAccount
|
4
|
+
def correspondent_account(options = {})
|
5
|
+
options.assert_valid_keys(:sequence_number, :bik)
|
6
|
+
|
7
|
+
sequence = find_sequence(options[:sequence_number])
|
8
|
+
member_number = find_member_number(options[:bik], sequence)
|
9
|
+
|
10
|
+
'301' + sprintf("%014d", sequence.rand(1_000_000_000)) + member_number
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def find_member_number(bik, sequence)
|
16
|
+
if bik && bik.length > 3
|
17
|
+
bik[-3..-1]
|
18
|
+
else
|
19
|
+
"%03d" % sequence.rand(1_000)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/faker/russian/inn.rb
CHANGED
@@ -5,7 +5,7 @@ module Faker
|
|
5
5
|
options.assert_valid_keys(:sequence_number, :region_number, :kind)
|
6
6
|
|
7
7
|
sequence = find_sequence(options[:sequence_number])
|
8
|
-
region_number = find_region_number(options[:region_number], sequence)
|
8
|
+
region_number = find_region_number(options[:region_number], sequence, :region_numbers)
|
9
9
|
kind = find_kind(options[:kind], sequence)
|
10
10
|
sequence_digits = find_digits(kind, sequence)
|
11
11
|
|
data/lib/faker/russian/kpp.rb
CHANGED
@@ -5,7 +5,7 @@ module Faker
|
|
5
5
|
options.assert_valid_keys(:sequence_number, :region_number)
|
6
6
|
|
7
7
|
sequence = find_sequence(options[:sequence_number])
|
8
|
-
region_number = find_region_number(options[:region_number], sequence)
|
8
|
+
region_number = find_region_number(options[:region_number], sequence, :region_numbers)
|
9
9
|
|
10
10
|
region_number + two_region_numbers(sequence) + '01001'
|
11
11
|
end
|
data/lib/faker/russian/okato.rb
CHANGED
@@ -5,7 +5,7 @@ module Faker
|
|
5
5
|
options.assert_valid_keys(:sequence_number, :okato_region_number, :length)
|
6
6
|
|
7
7
|
sequence = find_sequence(options[:sequence_number])
|
8
|
-
okato_region_number =
|
8
|
+
okato_region_number = find_region_number(options[:okato_region_number], sequence, :okato_region_numbers)
|
9
9
|
okato_without_calc = okato_region_number + find_length_digits(options[:length], sequence)
|
10
10
|
okato_without_calc + calc_okato(okato_without_calc)
|
11
11
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Faker
|
2
|
+
module Russian
|
3
|
+
module Rs
|
4
|
+
def rs(options = {})
|
5
|
+
options.assert_valid_keys(:sequence_number, :okv)
|
6
|
+
|
7
|
+
sequence = find_sequence(options[:sequence_number])
|
8
|
+
okv_digits = find_okv(options[:okv], sequence)
|
9
|
+
|
10
|
+
('%05d' % sequence.rand(100_000)) + okv_digits + ('%012d' % sequence.rand(1_000_000_000))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Faker
|
2
|
+
module Russian
|
3
|
+
module Snils
|
4
|
+
def snils(options = {})
|
5
|
+
options.assert_valid_keys(:sequence_number)
|
6
|
+
|
7
|
+
sequence = find_sequence(options[:sequence_number])
|
8
|
+
snils_digits = '%09d' % sequence.rand(1_000_000_000)
|
9
|
+
|
10
|
+
snils_digits + check_digits(snils_digits)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def check_digits(snils_digits)
|
16
|
+
digits = snils_digits.split('').map(&:to_i)
|
17
|
+
checksum = digits.each_with_index.inject(0) do |sum, (digit, index)|
|
18
|
+
sum + digit * (9 - index)
|
19
|
+
end % 101 % 100
|
20
|
+
'%02d' % checksum
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Faker::Russian do
|
4
|
+
describe '#correspondent_account' do
|
5
|
+
let(:bik) { Faker::Russian.bik }
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
DummyModel.reset_callbacks(:validate)
|
9
|
+
DummyModel.validates(:field, ks_format: true)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'generate valid correspondent account without arguments' do
|
13
|
+
100.times do
|
14
|
+
expect(DummyModel.new(field: Faker::Russian.correspondent_account)).to be_valid
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'generate valid correspondent account with bik' do
|
19
|
+
100.times do
|
20
|
+
expect(DummyModel.new(field: Faker::Russian.correspondent_account(bik: bik))).to be_valid
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'generate correspondent account for given bik' do
|
25
|
+
100.times do
|
26
|
+
expect(Faker::Russian.correspondent_account(bik: bik)[-3..-1]).to eq bik[-3..-1]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'generate difference correspondent account with sequence' do
|
31
|
+
sequenced_cas = 1000.times.map{ |n| Faker::Russian.correspondent_account(sequence_number: n) }
|
32
|
+
expect(sequenced_cas.size).to eq(sequenced_cas.uniq.size)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'generate same correspondent accounts for sequence' do
|
36
|
+
array1 = 1000.times.map{ |n| Faker::Russian.correspondent_account(sequence_number: n) }
|
37
|
+
array2 = 1000.times.map{ |n| Faker::Russian.correspondent_account(sequence_number: n) }
|
38
|
+
expect(array1).to eq(array2)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'permit just a few options' do
|
42
|
+
expect{ Faker::Russian.correspondent_account(shit: 'shit') }.to raise_error(ArgumentError)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Faker::Russian do
|
4
|
+
describe '#rs' do
|
5
|
+
let(:okv) { 810 }
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
DummyModel.reset_callbacks(:validate)
|
9
|
+
DummyModel.validates(:field, rs_format: true)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'generate valid rs without arguments' do
|
13
|
+
100.times do
|
14
|
+
expect(DummyModel.new(field: Faker::Russian.rs)).to be_valid
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'generate rs with given okv number' do
|
19
|
+
expect(Faker::Russian.rs(okv: okv)[5..7]).to eq okv.to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'generate valid rs with okv number' do
|
23
|
+
100.times do
|
24
|
+
expect(DummyModel.new(field: Faker::Russian.rs(okv: okv))).to be_valid
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'raises error if given okv number is invalid' do
|
29
|
+
expect{ Faker::Russian.rs(okv: '001') }.to raise_error(ArgumentError)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'generate difference rs with sequence' do
|
33
|
+
sequenced_rs = 1000.times.map{ |n| Faker::Russian.rs(sequence_number: n) }
|
34
|
+
expect(sequenced_rs.size).to eq(sequenced_rs.uniq.size)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'generate same rs for sequence' do
|
38
|
+
array1 = 1000.times.map{ |n| Faker::Russian.rs(sequence_number: n) }
|
39
|
+
array2 = 1000.times.map{ |n| Faker::Russian.rs(sequence_number: n) }
|
40
|
+
expect(array1).to eq(array2)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'permit just a few options' do
|
44
|
+
expect{ Faker::Russian.rs(shit: 'shit') }.to raise_error(ArgumentError)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Faker::Russian do
|
4
|
+
describe '#snils' do
|
5
|
+
before(:all) do
|
6
|
+
DummyModel.reset_callbacks(:validate)
|
7
|
+
DummyModel.validates(:field, snils_format: true)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'generate valid snils without arguments' do
|
11
|
+
100.times do
|
12
|
+
expect(DummyModel.new(field: Faker::Russian.snils)).to be_valid
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'generate difference snils with sequence' do
|
17
|
+
sequenced_snils = 1000.times.map{ |n| Faker::Russian.snils(sequence_number: n) }
|
18
|
+
expect(sequenced_snils.size).to eq(sequenced_snils.uniq.size)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'generate same snils for sequence' do
|
22
|
+
array1 = 1000.times.map{ |n| Faker::Russian.snils(sequence_number: n) }
|
23
|
+
array2 = 1000.times.map{ |n| Faker::Russian.snils(sequence_number: n) }
|
24
|
+
expect(array1).to eq(array2)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'permit just a few options' do
|
28
|
+
expect{ Faker::Russian.snils(shit: 'shit') }.to raise_error(ArgumentError)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faker-russian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -100,17 +100,23 @@ files:
|
|
100
100
|
- lib/faker/russian.rb
|
101
101
|
- lib/faker/russian/bik.rb
|
102
102
|
- lib/faker/russian/constants.rb
|
103
|
+
- lib/faker/russian/correspondent_account.rb
|
103
104
|
- lib/faker/russian/inn.rb
|
104
105
|
- lib/faker/russian/kpp.rb
|
105
106
|
- lib/faker/russian/okato.rb
|
106
107
|
- lib/faker/russian/okpo.rb
|
108
|
+
- lib/faker/russian/rs.rb
|
107
109
|
- lib/faker/russian/sequence.rb
|
110
|
+
- lib/faker/russian/snils.rb
|
108
111
|
- lib/faker/russian/version.rb
|
109
112
|
- spec/faker/russian/bik_spec.rb
|
113
|
+
- spec/faker/russian/correspondent_account_spec.rb
|
110
114
|
- spec/faker/russian/inn_spec.rb
|
111
115
|
- spec/faker/russian/kpp_spec.rb
|
112
116
|
- spec/faker/russian/okato_spec.rb
|
113
117
|
- spec/faker/russian/okpo_spec.rb
|
118
|
+
- spec/faker/russian/rs_spec.rb
|
119
|
+
- spec/faker/russian/snils_spec.rb
|
114
120
|
- spec/spec_helper.rb
|
115
121
|
- spec/support/dummy_model.rb
|
116
122
|
homepage: http://github.com/asiniy/faker-russian
|
@@ -139,9 +145,12 @@ specification_version: 4
|
|
139
145
|
summary: Faker russian specific values. INN, OGRN, et.c.
|
140
146
|
test_files:
|
141
147
|
- spec/faker/russian/bik_spec.rb
|
148
|
+
- spec/faker/russian/correspondent_account_spec.rb
|
142
149
|
- spec/faker/russian/inn_spec.rb
|
143
150
|
- spec/faker/russian/kpp_spec.rb
|
144
151
|
- spec/faker/russian/okato_spec.rb
|
145
152
|
- spec/faker/russian/okpo_spec.rb
|
153
|
+
- spec/faker/russian/rs_spec.rb
|
154
|
+
- spec/faker/russian/snils_spec.rb
|
146
155
|
- spec/spec_helper.rb
|
147
156
|
- spec/support/dummy_model.rb
|