使用python怎么对身份证号进行校验
本篇文章为大家展示了使用python怎么对身份证号进行校验,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
身份证号校验规则
话说身份证号校验,最重要的肯定是校验。那么如何校验?如何又有15、18位身份证号之分?
1、1999年07月01日以前使用15位身份证号,也就是第一代身份证2、二代身份证增加位数至18,多出来的3位分别是出生年份的前两个数字和一位校验码3、身份证各位置代表信息如下
4、顺序码的前两位代表当地派出所代码,第三位是对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
5、校验码,身份证号18位,前17位为本体码,最后一位是算出来的校验码。校验规则如下:
前17位分别乘以【7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2】然后将17个乘积加一块取余11得到一个0-10范围的数字0-10分别对应【1,0,x,9,8,7,6,5,4,3,2】即校验位数字出现 x 是因为校验码为10但为了保证号码长度不变,换成了 x
python校验身份证号代码如下:
version1.1
defcheck_id_length(n): iflen(str(n))!=18: print("只支持18位身份证号查询") returnFalse else: returnTrue defcheck_id_data(n): var=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] var_id=['1','0','x','9','8','7','6','5','4','3','2'] n=str(n) sum=0 ifint(n[16])%2==0: gender="女" same=int(int(n[16])/2) else: gender="男" same=int((int(n[16])+1)/2) foriinrange(0,17): sum+=int(n[i])*var[i] sum%=11 if(var_id[sum])==str(n[17]): print("身份证号规则核验通过,校验码是:",var_id[sum]) print("出生于:",n[6:10],"年",n[10:12],"月",n[12:14],"日","性别:",gender,"\n当地同性别同生日排名:",same) returnsum else: print("出生于:",n[6:10],"年",n[10:12],"月",n[12:14],"日","性别:",gender,"\n当地同性别同生日排名:",same) print("但身份证号规则核验失败,校验码应为",var_id[sum],",当前校验码是:",n[17]) return0 n=input("请输入18位身份证号:") ifcheck_id_length(n): check_id_data(n) else: print("请重新输入")
代码说明
1、前六行定义了长度校验函数,校验长度是否为 182、7-28行定义了校验位验证函数,验证校验位是否正确3、29-33行调用了上述两行数以完成校验功能
其中
1、第8行定义了加权数字列表,列表元素类型为 int2、第9行定义了标准校验位列表,列表元素类型为 str3、第10行将接收到的身份证号转换为 str 类型,以方便切片提出中间位4、12-17行用于计算身份证号主性别以及当地(派出所管辖范围)同性别同生日人的顺序5、18-20分别进行了加权求和并取余, 这是也是这段小代码的核心算法6、21-28进行校验位对比,并输出对比结果,同时提出出生年月日
演示代码,加入显示判断
verion1.2
importtime defcheck_id_length(n): iflen(str(n))!=18: print("只支持18位身份证号查询") returnFalse else: returnTrue defcheck_id_data(n): n=str(n) n2=str(n[:16]) time_now=int(time.strftime("%Y",time.localtime())) is_digit=(not(n2.isdigit()))or(not(n[17].isdigit())and(n[17])!="x") if(is_digit): print("对不起,您这是火星身份证,暂不受理") elif(int(n[6:10]))>time_now: print(n[6:10],"年的人?您是穿越回来吗?") elif(int(n[10:12]))>12: print(n[10:12],"月出生?,您是捡来的吧!!") elif(int(n[12:14]))>31: print(n[12:14],"日出生?,您一定是充话费送的") else: check_id_data2(n) defcheck_id_data2(n): var=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] var_id=['1','0','x','9','8','7','6','5','4','3','2'] sum=0 ifint(n[16])%2==0: gender="女" same=int(int(n[16])/2) else: gender="男" same=int((int(n[16])+1)/2) foriinrange(0,17): sum+=int(n[i])*var[i] sum%=11 if(var_id[sum])==str(n[17]): print("身份证号规则核验通过,校验码是:",var_id[sum]) print("出生于:",n[6:10],"年",n[10:12],"月",n[12:14],"日","性别:",gender,"\n当地同性别同生日排名:",same) returnsum else: print("出生于:",n[6:10],"年",n[10:12],"月",n[12:14],"日","性别:",gender,"\n当地同性别同生日排名:",same) print("但身份证号规则核验失败,校验码应为",var_id[sum],",当前校验码是:",n[17]) return0 while(1): print("\n菜单,请输入数字\n----------------------") print("输入1手动输入身份证号") print("输入2选择测试号") print("不然就拜拜") print("----------------------") select=input("\n请输入:") if(select.isdigit()): pass else: print("说好的输入数字的呢,拜拜了您嘞") break select=int(select) if(select==1): n=input("请输入18位身份证号:") ifcheck_id_length(n): check_id_data(n) else: print("请重新输入") elifselect==2: print("\n----------------------") print("开始校验身份证号:61011519920317602") check_id_length(61011519920317602) print("\n----------------------") print("开始校验身份证号:610115199203176021") check_id_data(610115199203176021) print("\n----------------------") print("开始校验身份证号:610115199203176028") check_id_data(610115199203176028) else: break
上述内容就是使用python怎么对身份证号进行校验,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
Python中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...
-
python下thread模块创建线程的方法
本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来...