我写了一个验证身份证号码的程序,它是以一定内存空间(大概100M)换取cpu消耗,然后它的运算量就降低了,前十四位的验证就相当于转换类型再查表一样,所以它的验证号码速度比一般的方式快。如果还不明白就说明你写框架写多了,或者你不了解java基础。测试结果只代表算法效率,测一个号码是因为正确号码运算次数基本相同,如果你们用自己的电脑测,13亿次循环应该不到1分钟。这种设计思路,也可以套用其他格式信息验证上去。
(1)十七位数字本体码加权求和
公式 S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)计算模 Y = mod(S, 11)
(3)通过模得到对应的校验码
Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
这个用循环就能做到了。
另外,用switch-case语句比if-esle快,这大概都知道吧。
然后说一下数据查询效率,方式有:数组位图(array),BitSet,二分法,HashSet
查询时间:array≈bitSet <二分法 <HashSet
空间消耗:bitSet>array >二分法 >HashSet
所以我用array存储数据做查询,然后运行效率大概就是 在i3本子上面100秒查完全国人民的身份证号码。
今天把循环去掉,换成最基本的运算式子,结果为80秒执行完13亿次验证,但是越高效的代码越不人性化。
请不要讨论连接公安网数据库问题,因为这个程序起的作用是高速过滤器,验证通过再查询数据库,不通过就滤掉了。更不要说查询一次数据库比几十次整点运算快,它们是两个层面的,如果硬要比的话,对于一个身份证号码来说,查询数据库肯定比cpu运行几十次整点运算慢的多,而且差几个数量级
先说一下具体思路:首先,身份证号的前6位是全国行政区划代码(就是省市县连起来的代码),我就把国家统计局的2004-2013年的全部代码拿过来,用程序分析,除掉五六位为00的,总共3000+,为了以尽量少的方式存放在代码里,我就用程序分析出每个不间断的序列,首尾成对地存放在数组里面,如110111,110118 表示110111到1101117,然后用布尔数组存储到对应下标,有这个代码,对应下标为true。然后年月日也是这个原理,先用循环生成所有的日期的可能性然后把值减去19000101(就是上一个百年虫日期),用样存放到布尔数组里面。最后验证校验码以及前17位是否为数字,18位是否为数字或者X。
再说一下身份证校验码,第18位的校验方法:(1)十七位数字本体码加权求和
公式 S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)计算模 Y = mod(S, 11)
(3)通过模得到对应的校验码
Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
这个用循环就能做到了。
另外,用switch-case语句比if-esle快,这大概都知道吧。
然后说一下数据查询效率,方式有:数组位图(array),BitSet,二分法,HashSet
查询时间:array≈bitSet <二分法 <HashSet
空间消耗:bitSet>array >二分法 >HashSet
所以我用array存储数据做查询,然后运行效率大概就是 在i3本子上面100秒查完全国人民的身份证号码。
今天把循环去掉,换成最基本的运算式子,结果为80秒执行完13亿次验证,但是越高效的代码越不人性化。
请不要讨论连接公安网数据库问题,因为这个程序起的作用是高速过滤器,验证通过再查询数据库,不通过就滤掉了。更不要说查询一次数据库比几十次整点运算快,它们是两个层面的,如果硬要比的话,对于一个身份证号码来说,查询数据库肯定比cpu运行几十次整点运算慢的多,而且差几个数量级
1. [代码]IdCardValidator.java
1
2
3
4
5
6
7
8
9
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
|
/**
* @Company asiainfo-linkage
* @author WANGDENG
*/
public
class
IdCardValidator {
private
static
final
IdCardValidator VALIDATOR=
new
IdCardValidator();
//单例常量
private
static
final
boolean
[] regions=
new
boolean
[
659005
];
//存放所有省市县数据
private
static
final
boolean
[] dates =
new
boolean
[
20141231
-
19000100
];
//存放1900年至2014年12月31日日期数据
private
static
final
String verifyLastData=
"10X98765432"
;
//最后一位校验成功对应字符的序列
private
static
final
int
[] last=
new
int
[
41
];
// 身份证最后一位号码校验
// private static final int[] WI = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,5, 8, 4, 2 };//最后一位校验因子
public
static
IdCardValidator getInstance(){
//返回单例
return
VALIDATOR;
}
/**
* 用于生成某年某月对应天数
* @param year
* @param month
* @return
*/
private
static
int
daysInMonth(
int
year,
int
month) {
int
daysInMonth;
switch
(month) {
case
1
:
case
3
:
case
5
:
case
7
:
case
8
:
case
10
:
case
12
:
daysInMonth =
31
;
break
;
case
2
:
if
(((year %
4
==
0
) && (year %
100
!=
0
)) || (year %
400
==
0
)) {
//闰年
daysInMonth =
29
;
}
else
{
daysInMonth =
28
;
}
break
;
default
:
daysInMonth =
30
;
}
return
daysInMonth;
}
/**
* 重载方法,用于校验带性别信息的身份证号码
* @param idCard
* @param isMale
* @return
*/
public
boolean
isValid(String idCard,
boolean
isMale){
return
isValid(idCard)&&(idCard.charAt(
16
)%
2
==
0
^isMale);
}
/**
* 校验身份证号码的方法,这个看不懂看下面注释掉的,原理一样。
* @param idCard
* @return
* 校验因子为:{ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,5, 8, 4, 2 };
*/
public
boolean
isValid(String idCard) {
if
(
null
== idCard || idCard.length() !=
18
)
return
false
;
// 验证长度
int
sum =
0
, regionCode =
0
, dateCode =
0
;
char
[] arr = idCard.toCharArray();
//计算与校验码对应的值'0'对应ASCII值为48,校验因子总和100.
sum = arr[
0
] *
7
+ arr[
1
] *
9
+ arr[
2
] *
10
+ arr[
3
] *
5
+ arr[
4
] *
8
+ arr[
5
] *
4
+ arr[
6
] *
2
+ arr[
7
] *
1
+ arr[
8
] *
6
+ arr[
9
] *
3
+ arr[
10
]*
7
+ arr[
11
] *
9
+ arr[
12
]*
10
+ arr[
13
]*
5
+ arr[
14
]*
8
+ arr[
15
] *
4
+ arr[
16
] *
2
-
4800
;
//验证前17位为数字,第18位为X或数字
if
(arr[
0
] >
57
|| arr[
1
] >
57
|| arr[
2
] >
57
|| arr[
3
] >
57
|| arr[
4
] >
57
|| arr[
5
] >
57
|| arr[
6
] >
57
|| arr[
7
] >
57
|| arr[
8
] >
57
|| arr[
9
] >
57
|| arr[
10
] >
57
|| arr[
11
] >
57
|| arr[
12
] >
57
|| arr[
13
] >
57
|| arr[
14
] >
57
|| arr[
15
] >
57
|| arr[
16
] >
57
|| arr[
0
] <
48
|| arr[
1
] <
48
|| arr[
2
] <
48
|| arr[
3
] <
48
|| arr[
4
] <
48
|| arr[
5
] <
48
|| arr[
6
] <
48
|| arr[
7
] <
48
|| arr[
8
] <
48
|| arr[
9
] <
48
|| arr[
10
] <
48
|| arr[
11
] <
48
|| arr[
12
] <
48
|| arr[
13
] <
48
|| arr[
14
] <
48
|| arr[
15
] <
48
|| arr[
16
] <
48
||(arr[
17
]<
88
&& arr[
17
] >
57
)
|| arr[
17
] <
48
|| arr[
17
] >
88
)
return
false
;
// 验证第18位校验码
if
(sum %
11
!= last[arr[
17
] -
48
])
return
false
;
//获取省市县片段,5333328=111111*48
regionCode = arr[
0
] *
100000
+ arr[
1
] *
10000
+ arr[
2
] *
1000
+ arr[
3
] *
100
+ arr[
4
] *
10
+ arr[
5
]-
5333328
;
//获取日期片段 552333429=11111111*48+19000101
dateCode = arr[
6
] *
10000000
+ arr[
7
] *
1000000
+ arr[
8
] *
100000
+ arr[
9
] *
10000
+ arr[
10
] *
1000
+ arr[
11
] *
100
+ arr[
12
]*
10
+ arr[
13
]-
552333429
;
return
regions[regionCode]&&dates[dateCode];
//最后校验省市县和日期
}
// public boolean isValid(String idCard){
// if (null == idCard || idCard.length() != 18)return false; //验证长度
// int a = 0, sum = 0,regionCode=0,dateCode=0;
// char[] arr=idCard.toCharArray();
// for (int i = 0; i < 17; i++) {
// a = arr[i] - 48;if (a >10 || a < 0)return false; //验证前17位为数字
// sum =sum+ WI[i] * a; //计算校验值
// switch(i){
// case 0:case 1:case 2:case 3:case 4: //快速找到对应条件
// case 5:regionCode=regionCode*10+a;break; //获取省市县片段
// case 6:case 7:case 8:case 9:case 10:
// case 11:case 12:case 13:dateCode=dateCode*10+a;break;//获取日期片段
// default: break;
// }
// }
// a = arr[17]-48; //获取第18为数字
// if(sum % 11!=last[a])return false; // 验证第18位校验码
// if (!(a==40||a < 10 && a > 0))return false; // 验证第18位为数字或X
// return regions[regionCode]&&dates[dateCode-19000101];//最后校验省市县和日期
// }
public
static
void
main(String[] args) {
//测试
long
t1=System.currentTimeMillis();
for
(
int
i=
0
;i<
1300000000
;i++)
IdCardValidator.getInstance().isValid(
"36062219800101325X"
);
long
t2=System.currentTimeMillis();
System.out.println(
"方法耗时"
+(t2-t1)/
1000
+
"秒"
);
}
static
{
for
(
int
j=
0
,len=verifyLastData.length();j<len;j++)last[verifyLastData.charAt(j)-
48
]= j;
for
(
int
year =
1900
; year <
2015
; year++) {
//日期数据加载
for
(
int
month =
1
; month <=
12
; month++) {
for
(
int
day =
1
; day <= daysInMonth(year, month); day++) {
dates[year*
10000
+month*
100
+day-
19000101
]=
true
;
}
}
}
int
[] regionArray={
//省市县压缩后数据
110101
,
110110
,
110111
,
110118
,
110228
,
110230
,
120101
,
120117
,
120221
,
120222
,
120223
,
120224
,
120225
,
120226
,
130101
,
130106
,
130107
,
130109
,
130121
,
130122
,
130123
,
130134
,
130181
,
130186
,
130201
,
130206
,
130207
,
130210
,
130223
,
130226
,
130227
,
130228
,
130229
,
130231
,
130281
,
130282
,
130283
,
130284
,
130301
,
130305
,
130321
,
130325
,
130401
,
130405
,
130406
,
130407
,
130421
,
130422
,
130423
,
130436
,
130481
,
130482
,
130501
,
130504
,
130521
,
130536
,
130581
,
130583
,
130601
,
130605
,
130621
,
130639
,
130681
,
130685
,
130701
,
130704
,
130705
,
130707
,
130721
,
130734
,
130801
,
130805
,
130821
,
130829
,
130901
,
130904
,
130921
,
130931
,
130981
,
130985
,
131001
,
131004
,
131022
,
131027
,
131028
,
131029
,
131081
,
131083
,
131101
,
131103
,
131121
,
131129
,
131181
,
131183
,
140101
,
140102
,
140105
,
140111
,
140121
,
140124
,
140181
,
140182
,
140201
,
140204
,
140211
,
140213
,
140221
,
140228
,
140301
,
140304
,
140311
,
140312
,
140321
,
140323
,
140401
,
140403
,
140411
,
140412
,
140421
,
140422
,
140423
,
140432
,
140481
,
140482
,
140501
,
140503
,
140521
,
140523
,
140524
,
140526
,
140581
,
140582
,
140601
,
140604
,
140621
,
140625
,
140701
,
140703
,
140721
,
140730
,
140781
,
140782
,
140801
,
140803
,
140821
,
140831
,
140881
,
140883
,
140901
,
140903
,
140921
,
140933
,
140981
,
140982
,
141001
,
141003
,
141021
,
141035
,
141081
,
141083
,
141101
,
141103
,
141121
,
141131
,
141181
,
141183
,
150101
,
150106
,
150121
,
150126
,
150201
,
150208
,
150221
,
150224
,
150301
,
150305
,
150401
,
150405
,
150421
,
150427
,
150428
,
150431
,
150501
,
150503
,
150521
,
150527
,
150581
,
150582
,
150601
,
150603
,
150621
,
150628
,
150701
,
150703
,
150721
,
150728
,
150781
,
150786
,
150801
,
150803
,
150821
,
150827
,
150901
,
150903
,
150921
,
150930
,
150981
,
150982
,
152201
,
152203
,
152221
,
152225
,
152501
,
152503
,
152522
,
152532
,
152921
,
152924
,
210101
,
210107
,
210111
,
210115
,
210122
,
210125
,
210181
,
210182
,
210201
,
210205
,
210211
,
210214
,
210224
,
210225
,
210281
,
210284
,
210301
,
210305
,
210311
,
210312
,
210321
,
210322
,
210323
,
210324
,
210381
,
210382
,
210401
,
210405
,
210411
,
210412
,
210421
,
210424
,
210501
,
210506
,
210521
,
210523
,
210601
,
210605
,
210624
,
210625
,
210681
,
210683
,
210701
,
210704
,
210711
,
210712
,
210726
,
210728
,
210781
,
210783
,
210801
,
210805
,
210811
,
210812
,
210881
,
210883
,
210901
,
210906
,
210911
,
210912
,
210921
,
210923
,
211001
,
211006
,
211011
,
211012
,
211021
,
211022
,
211081
,
211082
,
211101
,
211104
,
211121
,
211123
,
211201
,
211203
,
211204
,
211205
,
211221
,
211222
,
211223
,
211225
,
211281
,
211283
,
211301
,
211304
,
211321
,
211323
,
211324
,
211325
,
211381
,
211383
,
211401
,
211405
,
211421
,
211423
,
211481
,
211482
,
220101
,
220107
,
220112
,
220113
,
220122
,
220123
,
220181
,
220184
,
220201
,
220205
,
220211
,
220212
,
220221
,
220222
,
220281
,
220285
,
220301
,
220304
,
220322
,
220324
,
220381
,
220383
,
220401
,
220404
,
220421
,
220423
,
220501
,
220504
,
220521
,
220522
,
220523
,
220525
,
220581
,
220583
,
220601
,
220603
,
220604
,
220606
,
220621
,
220624
,
220625
,
220626
,
220681
,
220682
,
220701
,
220703
,
220721
,
220725
,
220801
,
220803
,
220821
,
220823
,
220881
,
220883
,
222401
,
222407
,
222424
,
222425
,
222426
,
222427
,
230101
,
230105
,
230106
,
230113
,
230123
,
230130
,
230181
,
230185
,
230201
,
230209
,
230221
,
230222
,
230223
,
230226
,
230227
,
230228
,
230229
,
230232
,
230281
,
230282
,
230301
,
230308
,
230321
,
230322
,
230381
,
230383
,
230401
,
230408
,
230421
,
230423
,
230501
,
230504
,
230505
,
230507
,
230521
,
230525
,
230601
,
230607
,
230621
,
230625
,
230701
,
230717
,
230722
,
230723
,
230781
,
230782
,
230801
,
230806
,
230811
,
230812
,
230822
,
230823
,
230826
,
230827
,
230828
,
230829
,
230833
,
230834
,
230881
,
230883
,
230901
,
230905
,
230921
,
230922
,
231001
,
231006
,
231024
,
231026
,
231081
,
231082
,
231083
,
231086
,
231101
,
231103
,
231121
,
231122
,
231123
,
231125
,
231181
,
231183
,
231201
,
231203
,
231221
,
231227
,
231281
,
231284
,
232701
,
232705
,
232721
,
232724
,
310101
,
310102
,
310103
,
310111
,
310112
,
310121
,
310230
,
310231
,
320101
,
320108
,
320111
,
320112
,
320113
,
320117
,
320124
,
320126
,
320201
,
320207
,
320211
,
320212
,
320281
,
320283
,
320301
,
320306
,
320311
,
320313
,
320321
,
320325
,
320381
,
320383
,
320401
,
320403
,
320404
,
320406
,
320411
,
320413
,
320481
,
320483
,
320501
,
320510
,
320581
,
320586
,
320601
,
320603
,
320611
,
320613
,
320621
,
320622
,
320623
,
320624
,
320681
,
320685
,
320701
,
320702
,
320703
,
320704
,
320705
,
320707
,
320721
,
320725
,
320801
,
320805
,
320811
,
320812
,
320826
,
320827
,
320829
,
320832
,
320901
,
320904
,
320921
,
320926
,
320981
,
320983
,
321001
,
321004
,
321011
,
321013
,
321023
,
321024
,
321081
,
321082
,
321084
,
321085
,
321088
,
321089
,
321101
,
321103
,
321111
,
321113
,
321181
,
321184
,
321201
,
321204
,
321281
,
321285
,
321301
,
321303
,
321311
,
321312
,
321322
,
321325
,
330101
,
330107
,
330108
,
330111
,
330122
,
330123
,
330127
,
330128
,
330182
,
330184
,
330185
,
330186
,
330201
,
330202
,
330203
,
330207
,
330211
,
330213
,
330225
,
330227
,
330281
,
330284
,
330301
,
330305
,
330322
,
330323
,
330324
,
330325
,
330326
,
330330
,
330381
,
330383
,
330401
,
330403
,
330411
,
330412
,
330421
,
330422
,
330424
,
330425
,
330481
,
330484
,
330501
,
330504
,
330521
,
330524
,
330601
,
330603
,
330621
,
330622
,
330624
,
330625
,
330681
,
330684
,
330701
,
330704
,
330723
,
330724
,
330726
,
330728
,
330781
,
330785
,
330801
,
330804
,
330822
,
330823
,
330824
,
330826
,
330881
,
330882
,
330901
,
330904
,
330921
,
330923
,
331001
,
331005
,
331021
,
331025
,
331081
,
331083
,
331101
,
331103
,
331121
,
331128
,
331181
,
331182
,
340101
,
340105
,
340111
,
340112
,
340121
,
340125
,
340181
,
340182
,
340201
,
340205
,
340207
,
340209
,
340221
,
340224
,
340225
,
340226
,
340301
,
340305
,
340311
,
340312
,
340321
,
340324
,
340401
,
340407
,
340421
,
340422
,
340501
,
340505
,
340506
,
340507
,
340521
,
340524
,
340601
,
340605
,
340621
,
340622
,
340701
,
340704
,
340711
,
340712
,
340721
,
340722
,
340801
,
340804
,
340811
,
340812
,
340822
,
340829
,
340881
,
340882
,
341001
,
341005
,
341021
,
341025
,
341101
,
341104
,
341122
,
341123
,
341124
,
341127
,
341181
,
341183
,
341201
,
341205
,
341221
,
341223
,
341225
,
341227
,
341282
,
341283
,
341301
,
341303
,
341321
,
341325
,
341401
,
341403
,
341421
,
341425
,
341501
,
341504
,
341521
,
341526
,
341601
,
341603
,
341621
,
341624
,
341701
,
341703
,
341721
,
341724
,
341801
,
341803
,
341821
,
341826
,
341881
,
341882
,
350101
,
350106
,
350111
,
350112
,
350121
,
350126
,
350128
,
350129
,
350181
,
350183
,
350201
,
350202
,
350203
,
350204
,
350205
,
350207
,
350211
,
350214
,
350301
,
350306
,
350322
,
350323
,
350401
,
350404
,
350421
,
350422
,
350423
,
350431
,
350481
,
350482
,
350501
,
350506
,
350521
,
350522
,
350524
,
350528
,
350581
,
350584
,
350601
,
350604
,
350622
,
350630
,
350681
,
350682
,
350701
,
350703
,
350721
,
350726
,
350781
,
350785
,
350801
,
350803
,
350821
,
350826
,
350881
,
350882
,
350901
,
350903
,
350921
,
350927
,
350981
,
350983
,
360101
,
360106
,
360111
,
360112
,
360121
,
360125
,
360201
,
360204
,
360222
,
360223
,
360281
,
360282
,
360301
,
360303
,
360313
,
360314
,
360321
,
360324
,
360401
,
360404
,
360421
,
360422
,
360423
,
360431
,
360481
,
360483
,
360501
,
360503
,
360521
,
360522
,
360601
,
360603
,
360622
,
360623
,
360681
,
360682
,
360701
,
360703
,
360721
,
360736
,
360781
,
360783
,
360801
,
360804
,
360821
,
360831
,
360881
,
360882
,
360901
,
360903
,
360921
,
360927
,
360981
,
360984
,
361001
,
361003
,
361021
,
361031
,
361101
,
361103
,
361121
,
361131
,
361181
,
361182
,
370101
,
370106
,
370112
,
370114
,
370124
,
370127
,
370181
,
370182
,
370201
,
370204
,
370205
,
370206
,
370211
,
370215
,
370281
,
370286
,
370301
,
370307
,
370321
,
370324
,
370401
,
370407
,
370481
,
370482
,
370501
,
370504
,
370521
,
370524
,
370601
,
370603
,
370611
,
370614
,
370634
,
370635
,
370681
,
370688
,
370701
,
370706
,
370724
,
370726
,
370781
,
370787
,
370801
,
370803
,
370811
,
370812
,
370826
,
370833
,
370881
,
370884
,
370901
,
370904
,
370911
,
370912
,
370921
,
370922
,
370923
,
370924
,
370982
,
370984
,
371001
,
371003
,
371081
,
371084
,
371101
,
371104
,
371121
,
371123
,
371201
,
371204
,
371301
,
371303
,
371311
,
371313
,
371321
,
371330
,
371401
,
371403
,
371421
,
371429
,
371481
,
371483
,
371501
,
371503
,
371521
,
371527
,
371581
,
371582
,
371601
,
371603
,
371621
,
371627
,
371701
,
371703
,
371721
,
371729
,
410101
,
410107
,
410108
,
410109
,
410122
,
410123
,
410181
,
410186
,
410201
,
410206
,
410211
,
410212
,
410221
,
410226
,
410301
,
410308
,
410311
,
410312
,
410322
,
410330
,
410381
,
410382
,
410401
,
410405
,
410411
,
410412
,
410421
,
410424
,
410425
,
410426
,
410481
,
410483
,
410501
,
410504
,
410505
,
410507
,
410522
,
410524
,
410526
,
410528
,
410581
,
410582
,
410601
,
410604
,
410611
,
410612
,
410621
,
410623
,
410701
,
410705
,
410711
,
410712
,
410721
,
410722
,
410724
,
410729
,
410781
,
410783
,
410801
,
410805
,
410811
,
410812
,
410821
,
410824
,
410825
,
410826
,
410881
,
410884
,
410901
,
410903
,
410922
,
410924
,
410926
,
410929
,
411001
,
411003
,
411023
,
411026
,
411081
,
411083
,
411101
,
411105
,
411121
,
411123
,
411201
,
411203
,
411221
,
411223
,
411224
,
411225
,
411281
,
411283
,
411301
,
411304
,
411321
,
411331
,
411381
,
411382
,
411401
,
411404
,
411421
,
411427
,
411481
,
411482
,
411501
,
411504
,
411521
,
411529
,
411601
,
411603
,
411621
,
411629
,
411681
,
411682
,
411701
,
411703
,
411721
,
411730
,
419001
,
419002
,
420101
,
420108
,
420111
,
420118
,
420201
,
420206
,
420222
,
420223
,
420281
,
420282
,
420301
,
420304
,
420321
,
420326
,
420381
,
420382
,
420501
,
420507
,
420525
,
420530
,
420581
,
420584
,
420601
,
420603
,
420606
,
420608
,
420624
,
420627
,
420682
,
420685
,
420701
,
420705
,
420801
,
420803
,
420804
,
420805
,
420821
,
420823
,
420881
,
420882
,
420901
,
420903
,
420921
,
420924
,
420981
,
420983
,
420984
,
420985
,
421001
,
421004
,
421022
,
421025
,
421081
,
421082
,
421083
,
421084
,
421087
,
421088
,
421101
,
421103
,
421121
,
421128
,
421181
,
421183
,
421201
,
421203
,
421221
,
421225
,
421281
,
421282
,
421301
,
421304
,
421321
,
421322
,
421381
,
421382
,
422801
,
422803
,
422822
,
422824
,
422825
,
422829
,
429004
,
429007
,
429021
,
429022
,
430101
,
430106
,
430111
,
430113
,
430121
,
430123
,
430124
,
430125
,
430181
,
430182
,
430201
,
430205
,
430211
,
430212
,
430221
,
430222
,
430223
,
430226
,
430281
,
430282
,
430301
,
430303
,
430304
,
430305
,
430321
,
430322
,
430381
,
430383
,
430401
,
430402
,
430405
,
430409
,
430412
,
430413
,
430421
,
430425
,
430426
,
430427
,
430481
,
430483
,
430501
,
430504
,
430511
,
430512
,
430521
,
430526
,
430527
,
430530
,
430581
,
430582
,
430601
,
430604
,
430611
,
430612
,
430621
,
430622
,
430623
,
430625
,
430626
,
430627
,
430681
,
430683
,
430701
,
430704
,
430721
,
430727
,
430781
,
430782
,
430801
,
430803
,
430811
,
430812
,
430821
,
430823
,
430901
,
430904
,
430921
,
430924
,
430981
,
430982
,
431001
,
431004
,
431021
,
431029
,
431081
,
431082
,
431101
,
431104
,
431121
,
431130
,
431201
,
431203
,
431221
,
431231
,
431281
,
431282
,
431301
,
431303
,
431321
,
431323
,
431381
,
431383
,
433101
,
433102
,
433122
,
433128
,
433130
,
433131
,
440101
,
440108
,
440111
,
440117
,
440183
,
440185
,
440201
,
440202
,
440203
,
440206
,
440222
,
440223
,
440224
,
440225
,
440229
,
440230
,
440232
,
440234
,
440281
,
440283
,
440301
,
440302
,
440303
,
440309
,
440401
,
440405
,
440501
,
440502
,
440507
,
440508
,
440511
,
440516
,
440523
,
440524
,
440601
,
440602
,
440604
,
440609
,
440701
,
440702
,
440703
,
440706
,
440781
,
440782
,
440783
,
440786
,
440801
,
440805
,
440811
,
440812
,
440823
,
440824
,
440825
,
440826
,
440881
,
440884
,
440901
,
440904
,
440923
,
440924
,
440981
,
440984
,
441201
,
441204
,
441223
,
441227
,
441283
,
441285
,
441301
,
441304
,
441322
,
441325
,
441401
,
441403
,
441421
,
441425
,
441426
,
441428
,
441481
,
441482
,
441501
,
441503
,
441521
,
441522
,
441523
,
441524
,
441581
,
441582
,
441601
,
441603
,
441621
,
441626
,
441701
,
441703
,
441721
,
441722
,
441723
,
441724
,
441781
,
441782
,
441801
,
441803
,
441821
,
441822
,
441823
,
441824
,
441825
,
441828
,
441881
,
441883
,
445101
,
445103
,
445121
,
445123
,
445201
,
445203
,
445221
,
445223
,
445224
,
445225
,
445281
,
445282
,
445301
,
445303
,
445321
,
445324
,
445381
,
445382
,
450101
,
450104
,
450105
,
450106
,
450107
,
450110
,
450122
,
450128
,
450201
,
450206
,
450221
,
450227
,
450301
,
450306
,
450311
,
450312
,
450321
,
450333
,
450401
,
450402
,
450403
,
450406
,
450421
,
450424
,
450481
,
450482
,
450501
,
450504
,
450512
,
450513
,
450521
,
450522
,
450601
,
450604
,
450621
,
450622
,
450681
,
450682
,
450701
,
450704
,
450721
,
450723
,
450801
,
450805
,
450821
,
450822
,
450881
,
450882
,
450901
,
450903
,
450921
,
450925
,
450981
,
450982
,
451001
,
451003
,
451021
,
451032
,
451101
,
451103
,
451121
,
451124
,
451201
,
451203
,
451221
,
451230
,
451281
,
451282
,
451301
,
451303
,
451321
,
451325
,
451381
,
451382
,
451401
,
451403
,
451421
,
451426
,
451481
,
451482
,
460101
,
460102
,
460105
,
460109
,
460201
,
460202
,
460321
,
460324
,
469001
,
469004
,
469005
,
469008
,
469021
,
469040
,
500101
,
500120
,
500222
,
500239
,
500240
,
500244
,
500381
,
500385
,
510101
,
510102
,
510104
,
510109
,
510112
,
510116
,
510121
,
510123
,
510124
,
510125
,
510129
,
510130
,
510131
,
510133
,
510181
,
510185
,
510301
,
510305
,
510311
,
510312
,
510321
,
510323
,
510401
,
510404
,
510411
,
510412
,
510421
,
510423
,
510501
,
510505
,
510521
,
510523
,
510524
,
510526
,
510601
,
510602
,
510603
,
510604
,
510623
,
510624
,
510626
,
510627
,
510681
,
510684
,
510701
,
510702
,
510703
,
510705
,
510722
,
510728
,
510781
,
510782
,
510801
,
510803
,
510811
,
510813
,
510821
,
510825
,
510901
,
510902
,
510903
,
510905
,
510921
,
510924
,
511001
,
511003
,
511011
,
511012
,
511024
,
511026
,
511028
,
511029
,
511101
,
511103
,
511111
,
511114
,
511123
,
511125
,
511126
,
511127
,
511129
,
511130
,
511132
,
511134
,
511181
,
511182
,
511301
,
511305
,
511321
,
511326
,
511381
,
511382
,
511401
,
511403
,
511421
,
511426
,
511501
,
511504
,
511521
,
511530
,
511601
,
511603
,
511621
,
511624
,
511681
,
511682
,
511701
,
511703
,
511721
,
511726
,
511781
,
511782
,
511801
,
511804
,
511821
,
511828
,
511901
,
511903
,
511921
,
511924
,
512001
,
512003
,
512021
,
512023
,
512081
,
512082
,
513221
,
513234
,
513321
,
513339
,
513401
,
513402
,
513422
,
513438
,
520101
,
520104
,
520111
,
520115
,
520121
,
520124
,
520181
,
520182
,
520201
,
520202
,
520203
,
520204
,
520221
,
520223
,
520301
,
520304
,
520321
,
520331
,
520381
,
520383
,
520401
,
520403
,
520421
,
520426
,
520501
,
520503
,
520521
,
520528
,
520601
,
520604
,
520621
,
520629
,
522201
,
522202
,
522222
,
522231
,
522301
,
522302
,
522322
,
522329
,
522401
,
522402
,
522422
,
522429
,
522601
,
522602
,
522622
,
522637
,
522701
,
522703
,
522722
,
522724
,
522725
,
522733
,
530101
,
530104
,
530111
,
530115
,
530121
,
530123
,
530124
,
530130
,
530181
,
530182
,
530301
,
530303
,
530321
,
530327
,
530328
,
530329
,
530381
,
530382
,
530401
,
530403
,
530421
,
530429
,
530501
,
530503
,
530521
,
530525
,
530601
,
530603
,
530621
,
530631
,
530701
,
530703
,
530721
,
530725
,
530801
,
530803
,
530821
,
530830
,
530901
,
530903
,
530921
,
530928
,
532301
,
532302
,
532322
,
532330
,
532331
,
532332
,
532501
,
532504
,
532522
,
532533
,
532601
,
532602
,
532621
,
532629
,
532801
,
532802
,
532822
,
532824
,
532901
,
532902
,
532922
,
532933
,
533102
,
533104
,
533122
,
533125
,
533321
,
533322
,
533323
,
533326
,
533421
,
533424
,
540101
,
540103
,
540121
,
540128
,
542121
,
542130
,
542132
,
542134
,
542221
,
542230
,
542231
,
542234
,
542301
,
542302
,
542322
,
542339
,
542421
,
542431
,
542521
,
542528
,
542621
,
542628
,
610101
,
610105
,
610111
,
610117
,
610122
,
610123
,
610124
,
610127
,
610201
,
610205
,
610222
,
610223
,
610301
,
610305
,
610322
,
610325
,
610326
,
610332
,
610401
,
610405
,
610422
,
610432
,
610481
,
610482
,
610501
,
610503
,
610521
,
610529
,
610581
,
610583
,
610601
,
610603
,
610621
,
610633
,
610701
,
610703
,
610721
,
610731
,
610801
,
610803
,
610821
,
610832
,
610901
,
610903
,
610921
,
610930
,
611001
,
611003
,
611021
,
611027
,
620101
,
620106
,
620111
,
620112
,
620121
,
620124
,
620201
,
620202
,
620301
,
620303
,
620321
,
620322
,
620401
,
620404
,
620421
,
620424
,
620501
,
620504
,
620521
,
620526
,
620601
,
620603
,
620621
,
620624
,
620701
,
620703
,
620721
,
620726
,
620801
,
620803
,
620821
,
620827
,
620901
,
620903
,
620921
,
620925
,
620981
,
620983
,
621001
,
621003
,
621021
,
621028
,
621101
,
621103
,
621121
,
621127
,
621201
,
621203
,
621221
,
621229
,
622901
,
622902
,
622921
,
622928
,
623001
,
623002
,
623021
,
623028
,
630101
,
630106
,
630121
,
630124
,
632121
,
632124
,
632126
,
632129
,
632221
,
632225
,
632321
,
632325
,
632521
,
632526
,
632621
,
632627
,
632721
,
632727
,
632801
,
632803
,
632821
,
632824
,
640101
,
640102
,
640104
,
640107
,
640121
,
640123
,
640181
,
640182
,
640201
,
640203
,
640205
,
640206
,
640221
,
640222
,
640301
,
640304
,
640323
,
640325
,
640381
,
640382
,
640401
,
640403
,
640422
,
640426
,
640501
,
640503
,
640521
,
640523
,
650101
,
650110
,
650121
,
650122
,
650201
,
650206
,
652101
,
652102
,
652122
,
652124
,
652201
,
652202
,
652222
,
652224
,
652301
,
652304
,
652323
,
652326
,
652327
,
652329
,
652701
,
652702
,
652722
,
652724
,
652801
,
652802
,
652822
,
652830
,
652901
,
652902
,
652922
,
652930
,
653001
,
653002
,
653022
,
653025
,
653101
,
653102
,
653121
,
653132
,
653201
,
653202
,
653221
,
653228
,
654002
,
654004
,
654021
,
654029
,
654201
,
654203
,
654221
,
654222
,
654223
,
654227
,
654301
,
654302
,
654321
,
654327
,
659001
,
659005
};
for
(
int
i=
0
,len=regionArray.length/
2
;i<len;i++){
for
(
int
j=regionArray[
2
*i];j<regionArray[
2
*i+
1
];j++)
//压缩的省市县数据解压
regions[j]=
true
;
}
}
}
|