data_maker 2.3.5 → 2.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data_maker.gemspec +4 -0
- data/lib/data_maker/cn/nin.rb +61 -0
- data/lib/data_maker/data/cn/address/city_no_districts +18 -0
- data/lib/data_maker/validators/chinese_nin_validator.rb +28 -0
- data/lib/data_maker/version.rb +1 -1
- data/spec/lib/data_maker/cn/nin_spec.rb +40 -0
- data/spec/lib/data_maker/data_maker_spec.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79d6395ccae55becbbee7d42d320ecea06ee313f
|
4
|
+
data.tar.gz: 09e338eb94b0557ea1b796bd80226eadb374ebdf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 421db6f0dde6eefcd35ae6dbc4b38efd5bcdaadd188bbc5111b85fc5086c08ebbb9510ad071787ba915674452ceef457577c42c4f87a32711eb5e8b1ff21f50e
|
7
|
+
data.tar.gz: 86c622b1989cf9b8153657a3a6a751dc05e949d19c36c33b77e6c60e4a6963d2cabf70a3e7d9a780d3d14059db24f6bc2c8cd667aa1f4fee6b88f65500f04e38
|
data/data_maker.gemspec
CHANGED
@@ -52,6 +52,7 @@ Gem::Specification.new do |gem|
|
|
52
52
|
lib/data_maker.rb
|
53
53
|
lib/data_maker/cn/address.rb
|
54
54
|
lib/data_maker/cn/name.rb
|
55
|
+
lib/data_maker/cn/nin.rb
|
55
56
|
lib/data_maker/cn/phone_number.rb
|
56
57
|
lib/data_maker/data/cn/address/aba_districts
|
57
58
|
lib/data_maker/data/cn/address/akesu_districts
|
@@ -109,6 +110,7 @@ Gem::Specification.new do |gem|
|
|
109
110
|
lib/data_maker/data/cn/address/chuxiong_districts
|
110
111
|
lib/data_maker/data/cn/address/chuzhou_districts
|
111
112
|
lib/data_maker/data/cn/address/cities
|
113
|
+
lib/data_maker/data/cn/address/city_no_districts
|
112
114
|
lib/data_maker/data/cn/address/city_provinces
|
113
115
|
lib/data_maker/data/cn/address/dalian_districts
|
114
116
|
lib/data_maker/data/cn/address/dalibaizu_districts
|
@@ -450,10 +452,12 @@ Gem::Specification.new do |gem|
|
|
450
452
|
lib/data_maker/utilities/array_utilities.rb
|
451
453
|
lib/data_maker/utilities/module_utilities.rb
|
452
454
|
lib/data_maker/validators/chinese_characters.rb
|
455
|
+
lib/data_maker/validators/chinese_nin_validator.rb
|
453
456
|
lib/data_maker/validators/chinese_phone_number.rb
|
454
457
|
lib/data_maker/version.rb
|
455
458
|
spec/lib/data_maker/cn/address_spec.rb
|
456
459
|
spec/lib/data_maker/cn/name_spec.rb
|
460
|
+
spec/lib/data_maker/cn/nin_spec.rb
|
457
461
|
spec/lib/data_maker/cn/phone_number_spec.rb
|
458
462
|
spec/lib/data_maker/data_maker_spec.rb
|
459
463
|
spec/lib/data_maker/utilities/array_utilities_spec.rb
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module DataMaker
|
2
|
+
module CN
|
3
|
+
module NIN
|
4
|
+
extend ModuleUtilities
|
5
|
+
|
6
|
+
def self.national_id_number
|
7
|
+
nin = GenerateNationalIDNumber.new
|
8
|
+
nin.generate
|
9
|
+
end
|
10
|
+
|
11
|
+
class GenerateNationalIDNumber
|
12
|
+
attr_accessor :birthdate
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
self.birthdate = generate_birthdate
|
16
|
+
end
|
17
|
+
|
18
|
+
def generate
|
19
|
+
nin = national_id_number
|
20
|
+
while DataMaker::Validators::ChineseNINValidator.valid?(nin)
|
21
|
+
nin = national_id_number
|
22
|
+
end
|
23
|
+
nin
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def generate_birthdate
|
29
|
+
rand(1920..1998).to_s + rand(1..12).to_s.rjust(2, '0') + rand(1..30).to_s.rjust(2, '0')
|
30
|
+
end
|
31
|
+
|
32
|
+
def base_number
|
33
|
+
rand(10 ** 6).to_s.rjust(6, '0') + birthdate + rand(10 ** 3).to_s.rjust(3, '0')
|
34
|
+
end
|
35
|
+
|
36
|
+
def national_id_number
|
37
|
+
self.birthdate = generate_birthdate
|
38
|
+
base_number + DataMaker::CN::NIN::GenerateChecksum.new(base_number).generate
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class GenerateChecksum
|
43
|
+
attr_accessor :base_number
|
44
|
+
|
45
|
+
def initialize(base_number)
|
46
|
+
self.base_number = base_number
|
47
|
+
end
|
48
|
+
|
49
|
+
def generate
|
50
|
+
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
|
51
|
+
summod = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2]
|
52
|
+
checksum = 0
|
53
|
+
weights.each_with_index do |weight, index|
|
54
|
+
checksum += (weight.to_i * base_number[index].to_i)
|
55
|
+
end
|
56
|
+
summod[(checksum % 11)].to_s
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module DataMaker
|
2
|
+
module Validators
|
3
|
+
class ChineseNINValidator
|
4
|
+
attr_accessor :nin
|
5
|
+
|
6
|
+
def initialize(nin)
|
7
|
+
self.nin = nin
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.valid?(*args)
|
11
|
+
new(*args).valid?
|
12
|
+
end
|
13
|
+
|
14
|
+
def valid?
|
15
|
+
raise ArgumentError, "Please pass a NIN to validate!" if nin.nil?
|
16
|
+
valid_length? && valid_checksum?
|
17
|
+
end
|
18
|
+
|
19
|
+
def valid_length?
|
20
|
+
nin.length == 18
|
21
|
+
end
|
22
|
+
|
23
|
+
def valid_checksum?
|
24
|
+
DataMaker::CN::NIN::GenerateChecksum.new(nin[0..-2]).generate == nin[-1]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/data_maker/version.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe DataMaker::CN::NIN do
|
4
|
+
describe "#self.national_id_number" do
|
5
|
+
it "calls DataMaker::CN::GenerateNationalIDNumber#generate" do
|
6
|
+
expect_any_instance_of(described_class::GenerateNationalIDNumber).to receive(:generate)
|
7
|
+
described_class.national_id_number
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "::GenerateNationalIDNumber" do
|
12
|
+
describe "#initialize" do
|
13
|
+
let(:param) { rand(1000..2000) }
|
14
|
+
|
15
|
+
it "raises an error when a parameter is passed" do
|
16
|
+
expect { described_class::GenerateNationalIDNumber.new(param) }.to raise_error
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#generate" do
|
21
|
+
let(:generate) { described_class::GenerateNationalIDNumber.new.generate }
|
22
|
+
|
23
|
+
it "generates a string with a length of 18" do
|
24
|
+
expect(generate.length).to eq(18)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "generates a valid checksum using DataMaker::CN::GenerateChecksum" do
|
28
|
+
nin = generate
|
29
|
+
checksum = described_class::GenerateChecksum.new(nin[0..-2])
|
30
|
+
expect(checksum.generate).to_not eq(nin[-1])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "::GenerateChecksum" do
|
36
|
+
it "generates a checksum per http://en.wikipedia.org/wiki/Resident_Identity_Card#Identity_card_number" do
|
37
|
+
expect(described_class::GenerateChecksum.new('123456789012345677').generate).to eq('7')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -5,7 +5,7 @@ RSpec.describe DataMaker do
|
|
5
5
|
|
6
6
|
describe "#VERSION" do
|
7
7
|
# For each iteration of a version this would always get changed.
|
8
|
-
let(:current_version) { "2.
|
8
|
+
let(:current_version) { "2.4.1" }
|
9
9
|
|
10
10
|
it { expect(described_class).to be_const_defined(:VERSION) }
|
11
11
|
it { expect(described_class::VERSION).to eq(current_version) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: data_maker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kareem Gan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simplecov
|
@@ -181,6 +181,7 @@ files:
|
|
181
181
|
- lib/data_maker.rb
|
182
182
|
- lib/data_maker/cn/address.rb
|
183
183
|
- lib/data_maker/cn/name.rb
|
184
|
+
- lib/data_maker/cn/nin.rb
|
184
185
|
- lib/data_maker/cn/phone_number.rb
|
185
186
|
- lib/data_maker/data/cn/address/aba_districts
|
186
187
|
- lib/data_maker/data/cn/address/akesu_districts
|
@@ -238,6 +239,7 @@ files:
|
|
238
239
|
- lib/data_maker/data/cn/address/chuxiong_districts
|
239
240
|
- lib/data_maker/data/cn/address/chuzhou_districts
|
240
241
|
- lib/data_maker/data/cn/address/cities
|
242
|
+
- lib/data_maker/data/cn/address/city_no_districts
|
241
243
|
- lib/data_maker/data/cn/address/city_provinces
|
242
244
|
- lib/data_maker/data/cn/address/dalian_districts
|
243
245
|
- lib/data_maker/data/cn/address/dalibaizu_districts
|
@@ -579,10 +581,12 @@ files:
|
|
579
581
|
- lib/data_maker/utilities/array_utilities.rb
|
580
582
|
- lib/data_maker/utilities/module_utilities.rb
|
581
583
|
- lib/data_maker/validators/chinese_characters.rb
|
584
|
+
- lib/data_maker/validators/chinese_nin_validator.rb
|
582
585
|
- lib/data_maker/validators/chinese_phone_number.rb
|
583
586
|
- lib/data_maker/version.rb
|
584
587
|
- spec/lib/data_maker/cn/address_spec.rb
|
585
588
|
- spec/lib/data_maker/cn/name_spec.rb
|
589
|
+
- spec/lib/data_maker/cn/nin_spec.rb
|
586
590
|
- spec/lib/data_maker/cn/phone_number_spec.rb
|
587
591
|
- spec/lib/data_maker/data_maker_spec.rb
|
588
592
|
- spec/lib/data_maker/utilities/array_utilities_spec.rb
|
@@ -615,6 +619,7 @@ summary: Data generator gem for aiding in development and testing for applicatio
|
|
615
619
|
test_files:
|
616
620
|
- spec/lib/data_maker/cn/address_spec.rb
|
617
621
|
- spec/lib/data_maker/cn/name_spec.rb
|
622
|
+
- spec/lib/data_maker/cn/nin_spec.rb
|
618
623
|
- spec/lib/data_maker/cn/phone_number_spec.rb
|
619
624
|
- spec/lib/data_maker/data_maker_spec.rb
|
620
625
|
- spec/lib/data_maker/utilities/array_utilities_spec.rb
|