id_validator 0.1.0 → 0.2.0
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/LICENSE +21 -0
- data/README.md +3 -2
- data/lib/id_validator/concern/helper.rb +20 -23
- data/lib/id_validator/config.rb +11718 -6677
- data/lib/id_validator/version.rb +1 -1
- metadata +3 -3
- data/.idea/vcs.xml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bd01142bac23a42e104f98cbbbd5f863b187cc2eedcf0a63df79bbb43ea2d78
|
4
|
+
data.tar.gz: 793d358b5a92c519c137f798870b67fc904cb9ae33384ee432097a879c939e76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c876bffcf541eed5c9cedcae239cb9c9d3b31f92af697754ce78e7d1cf23c416cbb634d45d62b2103183ac16f239f491519956350bcb7ef2d28cfc3a5dffa84
|
7
|
+
data.tar.gz: dd5a98ed7ed655d159cef97f1295db5e6991522ad039b53ef8f0b9dfd615766a040b0d2cbd6da0e31fa940eb603cd58494fc6fbde40a40dc664e72b991f97001
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2018 renyijiu
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
[](https://travis-ci.com/renyijiu/id_validator)
|
2
|
-
|
2
|
+
[](https://badge.fury.io/rb/id_validator)
|
3
|
+
[](https://codeclimate.com/github/renyijiu/id_validator/maintainability)
|
3
4
|
|
4
5
|
# IdValidator
|
5
6
|
|
@@ -105,7 +106,7 @@ IdValidator.upgrade_id('610104620927690')
|
|
105
106
|
|
106
107
|
- [中华人民共和国民政部:行政区划代码](http://www.mca.gov.cn/article/sj/xzqh/)
|
107
108
|
|
108
|
-
- [中华人民共和国行政区划代码历史数据集](https://github.com/
|
109
|
+
- [中华人民共和国行政区划代码历史数据集](https://github.com/renyijiu/address-code-of-china)
|
109
110
|
|
110
111
|
- [国务院办公厅关于印发《港澳台居民居住证申领发放办法》的通知](http://www.gov.cn/zhengce/content/2018-08/19/content_5314865.htm)
|
111
112
|
|
@@ -26,7 +26,7 @@ module IdValidator
|
|
26
26
|
|
27
27
|
# 随意获取一个符合要求的地址码
|
28
28
|
def get_random_address_code(reg)
|
29
|
-
keys = IdValidator::Config.
|
29
|
+
keys = IdValidator::Config.latest_address_info.keys.shuffle
|
30
30
|
|
31
31
|
keys.find { |key| key.to_s =~ reg }.to_s
|
32
32
|
end
|
@@ -51,6 +51,15 @@ module IdValidator
|
|
51
51
|
def get_random_birthday_code
|
52
52
|
Time.at(rand * Time.now.to_i).strftime('%Y%m%d')
|
53
53
|
end
|
54
|
+
|
55
|
+
# 获取指定区划代码最新的地址名称
|
56
|
+
def get_address_info(address_code)
|
57
|
+
address_code = address_code.to_i
|
58
|
+
address_arr = IdValidator::Config.total_address_info.fetch(address_code, [])
|
59
|
+
|
60
|
+
address = address_arr.sort_by{|a| a[:end_year]}.last || {}
|
61
|
+
address.fetch(:address, nil)
|
62
|
+
end
|
54
63
|
end
|
55
64
|
|
56
65
|
module Helper
|
@@ -81,26 +90,15 @@ module IdValidator
|
|
81
90
|
|
82
91
|
# 获取地址信息
|
83
92
|
def get_address_info(address_code)
|
84
|
-
|
85
|
-
|
93
|
+
province_address_code = "#{address_code[0...2]}0000"
|
94
|
+
city_address_code = "#{address_code[0...4]}00"
|
86
95
|
|
87
|
-
|
88
|
-
city_address_code = "#{address_code[0...4]}00".to_i
|
89
|
-
|
90
|
-
province = address_code_hash[province_address_code] || abandoned_address_code_hash[province_address_code]
|
91
|
-
|
92
|
-
if address_code[0].to_i != 8
|
93
|
-
city = address_code_hash[city_address_code] || abandoned_address_code_hash[city_address_code]
|
94
|
-
district = address_code_hash[address_code.to_i] ||abandoned_address_code_hash[address_code.to_i]
|
95
|
-
else
|
96
|
-
city = nil
|
97
|
-
district = nil
|
98
|
-
end
|
96
|
+
is_mainland = (address_code[0].to_i != 8)
|
99
97
|
|
100
98
|
{
|
101
|
-
province:
|
102
|
-
city:
|
103
|
-
district:
|
99
|
+
province: Func.get_address_info(province_address_code),
|
100
|
+
city: is_mainland ? Func.get_address_info(city_address_code) : nil,
|
101
|
+
district: is_mainland ? Func.get_address_info(address_code) : nil
|
104
102
|
}
|
105
103
|
end
|
106
104
|
|
@@ -154,9 +152,9 @@ module IdValidator
|
|
154
152
|
|
155
153
|
# 检查是否已经废弃
|
156
154
|
def check_is_abandoned(address_code)
|
157
|
-
address = IdValidator::Config.
|
155
|
+
address = IdValidator::Config.latest_address_info.fetch(address_code.to_i, nil)
|
158
156
|
|
159
|
-
|
157
|
+
address.nil?
|
160
158
|
end
|
161
159
|
|
162
160
|
# 生成校验码
|
@@ -174,7 +172,7 @@ module IdValidator
|
|
174
172
|
|
175
173
|
# 生成地址码
|
176
174
|
def generate_address_code(address)
|
177
|
-
key = IdValidator::Config.
|
175
|
+
key = IdValidator::Config.latest_address_info.key(address).to_s
|
178
176
|
|
179
177
|
case
|
180
178
|
when key.empty?
|
@@ -218,8 +216,7 @@ module IdValidator
|
|
218
216
|
def generate_order_code(sex)
|
219
217
|
order_code = rand(1..999)
|
220
218
|
|
221
|
-
order_code
|
222
|
-
order_code = order_code % 2 == 0 ? order_code - 1 : order_code if sex == 1
|
219
|
+
order_code -= 1 if sex != (order_code % 2)
|
223
220
|
|
224
221
|
Func.get_str_pad(order_code, 3, '0', false)
|
225
222
|
end
|