jxlwqq / id-validator.py

中华人民共和国居民身份证、中华人民共和国港澳居民居住证以及中华人民共和国台湾居民居住证号码验证工具(Python 版)
https://pypi.org/project/id-validator/
MIT License
360 stars 85 forks source link

關於區劃代碼的問題 #17

Closed stevenwdhu closed 3 years ago

stevenwdhu commented 3 years ago

實際使用過程中發現部分區劃代碼為 xxxx01 的身份證號被判定為無效號碼,查詢民政部的數據後發現廣東省代碼中均無 xxxx01(圖1),但對比查詢其他政府網站數據(註1-2)(圖2)後發現 xxxx01 應為市轄區的代碼,所以 id-validator 中引用的數據會導致將有效證件號誤判為無效的情況。

註1: http://www.gov.cn/test/2009-03/30/content_1272354.htm 註2: http://gdii.gd.gov.cn/ywfl/jsgz/content/post_939420.html

image image

jxlwqq commented 3 years ago

你好,有相关的身份证号码可以粘贴出来吗,号码前十位即可。

stevenwdhu commented 3 years ago

你好,有相关的身份证号码可以粘贴出来吗,号码前十位即可。

4404011958

jxlwqq commented 3 years ago

todo: \d\d\d\d01所代表的市辖区需要特殊处理下。

stevenwdhu commented 3 years ago

其實為了找到這個問題,我還把 helper 的代碼看了一遍,逐個檢測是哪裡導致的 False,所以我還想提個建議就是返回 False 的時候至少能指出是哪裡的問題,指明 address code/birthday/check bit 等。 不知是否需要另提一個 issue 呢?

jxlwqq commented 3 years ago

1980年、1982年版本中,未有制定省辖市市辖区的代码,所有带县的省辖市给予“××××20”的“市区”代码。 1984年版本开始对地级市(前称省辖市)市辖区制定代码,其中“××××01”表示市辖区的汇总码,同时撤销“××××20”的“市区”代码(追溯至1983年)。

https://zh.wikipedia.org/wiki/中华人民共和国行政区划代码_(1区)

jxlwqq commented 3 years ago

其實為了找到這個問題,我還把 helper 的代碼看了一遍,逐個檢測是哪裡導致的 False,所以我還想提個建議就是返回 False 的時候至少能指出是哪裡的問題,指明 address code/birthday/check bit 等。 不知是否需要另提一個 issue 呢?

谢谢,不需要另提一个 issue 了。另外 \d\d\d\d20 所代码的“市区”也是有问题的。这里一并处理。

jxlwqq commented 3 years ago

已发布:https://pypi.org/project/id-validator/1.0.16/

jxlwqq commented 3 years ago

其實為了找到這個問題,我還把 helper 的代碼看了一遍,逐個檢測是哪裡導致的 False,所以我還想提個建議就是返回 False 的時候至少能指出是哪裡的問題,指明 address code/birthday/check bit 等。 不知是否需要另提一個 issue 呢?

这个暂时不能改,改的话,api的返回值就变了,会影响目前已经依赖本包的项目。

vaneoooo commented 3 years ago

@jxlwqq 约一月前,我向您的邮箱发送过一个示例(涉及身份证号码)。不知现在是否修复

jxlwqq commented 3 years ago

@jxlwqq 约一月前,我向您的邮箱发送过一个示例(涉及身份证号码)。不知现在是否修复

已修复。

hubutui commented 3 years ago

查阅了一下 4501111990,那会儿叫永新区,后面改成了江南区,但是看数据集里的确也没有450111。

stevenwdhu commented 3 years ago

其實為了找到這個問題,我還把 helper 的代碼看了一遍,逐個檢測是哪裡導致的 False,所以我還想提個建議就是返回 False 的時候至少能指出是哪裡的問題,指明 address code/birthday/check bit 等。 不知是否需要另提一個 issue 呢?

这个暂时不能改,改的话,api的返回值就变了,会影响目前已经依赖本包的项目。

那是否可以考慮新增一個函數用以對格式有誤的證件號 debug 呢?

jxlwqq commented 3 years ago

查阅了一下 4501111990,那会儿叫永新区,后面改成了江南区,但是看数据集里的确也没有450111。

4501111990 这个是真实身份证吗?

我查了下 永新区 是 450106,江南区 是 450105

hubutui commented 3 years ago

查阅了一下 4501111990,那会儿叫永新区,后面改成了江南区,但是看数据集里的确也没有450111。

4501111990 这个是真实身份证吗?

我查了下 永新区 是 450106,江南区 是 450105

是真实的身份证啊,我也不清楚为什么数据集里的对不上.

jxlwqq commented 3 years ago

查阅了一下 4501111990,那会儿叫永新区,后面改成了江南区,但是看数据集里的确也没有450111。

1984年版本的市辖区代码分为城区和郊区两类,城区由“××××02”开始排起,郊区由“××××11”开始排起,后来版本已不再采用此方式,已制定的代码继续沿用。

官方的数据确实是遗漏了,一般 11 结尾的都是当时市辖区中的郊区。450111应该是当时南宁市市辖的“郊区”。

hubutui commented 3 years ago

查阅了一下 4501111990,那会儿叫永新区,后面改成了江南区,但是看数据集里的确也没有450111。

1984年版本的市辖区代码分为城区和郊区两类,城区由“××××02”开始排起,郊区由“××××11”开始排起,后来版本已不再采用此方式,已制定的代码继续沿用。

官方的数据确实是遗漏了,一般 11 结尾的都是当时市辖区中的郊区。450111应该是当时南宁市市辖的“郊区”。

对的,当时在永新区之前可能都是统称郊区了.这个应该比较好修复的?

jxlwqq commented 3 years ago

查阅了一下 4501111990,那会儿叫永新区,后面改成了江南区,但是看数据集里的确也没有450111。

1984年版本的市辖区代码分为城区和郊区两类,城区由“××××02”开始排起,郊区由“××××11”开始排起,后来版本已不再采用此方式,已制定的代码继续沿用。

官方的数据确实是遗漏了,一般 11 结尾的都是当时市辖区中的郊区。450111应该是当时南宁市市辖的“郊区”。

对的,当时在永新区之前可能都是统称郊区了.这个应该比较好修复的?

没有找到的地址码,我特殊处理下,稍后我发布新的版本。

jxlwqq commented 3 years ago

查阅了一下 4501111990,那会儿叫永新区,后面改成了江南区,但是看数据集里的确也没有450111。

已发布:https://pypi.org/project/id-validator/1.0.17/

ShikaiYan commented 3 years ago

民政部的数据中,老地区码缺失不少。我这边也遇到了这个问题。这个网站有收录,可以参考下:http://m.idcard.miaochaxun.com/412723.html

jxlwqq commented 3 years ago

修复了部分地区,地址码在废弃后,但是地方相关机构仍然在继续使用的问题。

jxlwqq commented 3 years ago

https://github.com/jxlwqq/id-validator/issues/60

jxlwqq commented 3 years ago

补充了官方遗失的地址码。欢迎更新到最新版试用。