⾝份证号码校验算法(附Python代码)
1、数字含义
中国⼤陆第⼆代⾝份证号码由18位数据或字母组成,每位数据都有特定的含义,结果如下:
每组数字都有不同的含义:
1) 第1⾄2位数字代表所在省(直辖市、⾃治区)的代码;
2) 第3⾄4位数字代表所在地级市(⾃治州)的代码;
3) 第5⾄6位数字代表所在区(县、⾃治县、县级市)的代码;
4) 第7-14位数字代表出⽣年、⽉、⽇;
5) 第15-16位数字代表所在的派出所代码;
6) 第17位数字表⽰性别,奇数表⽰男性,偶数表⽰⼥性;
7) 第18位是校验码,及个⼈信息码,由前17位数字计算得到。
也就是说⾝份证号码不是随便产⽣的,它是⽤来检验⾝份的正确性。在没有全国个⼈⾝份证信息库时。可以通过检验码来校验⾝份证的正确性。校验码由0-9的数据和字母X组成,其实X表⽰10(这并不是英⽂字母X,⽽是希腊数字10的缩写)。是由号码编制单位按统⼀的计算公式计算出来的,校验⾝份证号码正确性也是通过这个公式实现。
soothing2、算法介绍
html注释是什么意思⾸先,对前17位信息数字按照特定的⽅式加权,公式如下:
python基础代码大全下载即各位置的数字和权重的乘积之和,权重计算公式说明:例如位置18(即第⼀位数字)的权重应该是2的17次⽅的结果对11取余。
计算出S后再⽤S对11取余,根据余数确定校验位数字,对照表如下:
⽐如例⼦中的⾝份证号计算出来的S为189,对11取余结果为2,查表2对应的校验码为X,所以该⾝份证号最后⼀位应该为X。
3、Python代码
def checkIDNumber(num_str):
str_to_int = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5,
安卓手机打开php文件>免费永久的linux服务器
'6': 6, '7': 7, '8': 8, '9': 9, 'X': 10}
check_dict = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7',
6: '6', 7: '5', 8: '4', 9: '3', 10: '2'}
if len(num_str) != 18:
raise TypeError(u'请输⼊标准的第⼆代⾝份证号码')
check_num = 0
for index, num in enumerate(num_str):
if index == 17:
right_code = (check_num % 11)
if num == right_code:
print(u"⾝份证号: %s 校验通过" % num_str)
else:
print(u"⾝份证号: %s 校验不通过, 正确尾号应该为:%s" % (num_str, right_code))        check_num += str_(num) * (2 ** (17 - index) % 11)
if __name__ == '__main__':
laughing怎么读
num_str1 = '340524************'
num_str2 = '340524************'
checkIDNumber(num_str1)
checkIDNumber(num_str2)
参考: