ID_CheckerAPI-Python
源码以及程序下载跳转[这里下载]
1 |
|
学习***规则
居民身F证的号码是按照国家的标准编制的,由18位组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码,第17位代表性别(奇数为男,偶数为女),第18位为校验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身F证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身F证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身F证符合国家标准
详见CSDN
(1)十七位数字本体码加权求和公式
S = Ai * Wi, i = 2, … , 18
Y = mod(S, 11)
i: 表示号码字符从右至左包括校验码字符在内的位置序号
Ai:表示第i位置上的身F证号码字符值
Wi:表示第i位置上的加权因子
i: 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
(2)Y值对应的校验码字符值:
Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
试算一个:
*号是14010519590215222a1
i: 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Ai: 1 4 0 1 0 5 1 9 5 9 0 2 1 5 2 2 2 a1
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
根据公式
S = Ai * Wi=7+36+0+5+0+20+2+9+30+27+0+18+10+25+16+8+4=217
217/11=19+8/11
Y = mod(S, 11)=mod(217,11)=8
所以,检验码为4,该人的身F证号为140105195902152224
1 |
|
例如 **行政区划代码
编码
引用库
1 | import requests |
定义基本函数
取模函数
1 | def mod(dividend, divisor): |
根据前17位计算校验码
1 | def CN_ID_Compute(ID_1_17): |
输入处理基本信息得到前14位
1 | def input_imfo (): |
先初始化变量
然后转换**
再得到**日期
最后整理输出字符串
输入性别并转换为数字
1 | def input_sex(): |
编写主要的函数
定义
1 | def Last_4_ID_Try(BeTry,Sex,NAME,API,TME): |
提示信息和信息展示时间
1 | time.sleep(0.2) |
转换字符串为列表
1 | Try_CNID = list(BeTry) |
设置性别相关参数(包括次数,间隔,错误返回)
1 | if Sex == 0: |
中间变量
1 | time_mid = times |
计算输出等待时间
1 | wait_predict_s = times * TME |
开始循环TAB
1 | while times >= 0: |
输出进度百分比
1 | print(str(100-(int((times/time_mid)*100))) + "%") |
随机等待时间并等待
1 | time_sleep = random.uniform(TME-0.1,TME+0.1) |
将Try_CNID列表中的元素连接成一个字符串
1 | Try_CNIDstr = "".join(Try_CNID) |
消除python报错
1 | logging.captureWarnings(True) |
发送请求
1 | response = requests.get(API + CNID,verify=False) |
如果返回正确状态码200
1 | if response.status_code == 200: |
得到数据
1 | str_getres = str(response.text) |
数据断开位置分析
1 | position_beg_XXBMS = str_getres.find("\"XXBSM\"") |
导出数据
1 | OBJ_XXBMS = str_getres[position_beg_XXBMS + 9:position_beg_school - 3] |
姓名相似度数据定义
1 | OBJ_NAME_list = list(OBJ_NAME) |
计算相似度
1 | while namelength > 0 and mid_FUCK1 == OBJ_namelength: |
相似度等于姓名长度时输出数据并结束while循环TAB
1 | if trustNUM == True and similar_Num == mid_FUCK1: |
提前计算下一个数据
1 | j = int(i[0]) * 100 + int(i[1]) * 10 + int(i[2]) |
继续while循环
1 | times -= 1 |
定义全局变量
1 | I = (18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) |
编写main函数
1 | def main(): |