data_maker 2.3.5 → 2.4.1
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/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
|