校验身份证号码并输出个人信息题求助
求解和讲解自己搞了两三天写不对 本帖最后由 永恒的蓝色梦想 于 2020-3-31 13:01 编辑A=(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
B=('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
def isValidID(ID):
return B==ID
def main():
ID=input()
if isValidID(ID):
temp=ID
print(f"身份证号码校验为合法号码!\n出生:{temp}年{ID}月{ID}日\n年龄:{2020-int(temp)}\n性别:{'男'if int(ID)&1 else'女'}")
else:
print('身份证校验位错误!')
if __name__=='__main__':
main() 描述没截全 我把老师的答案附上
ls = ( 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 )
id = input()
sum = 0
for i in range(17):
sum = sum + ls * int(id)
if str(id) == 'X':
if sum % 11 == 2:
print('身份证号码校验为合法号码!')
else:
print('身份证校验位错误!')
elif (sum % 11 + int(id)) % 11 == 1:
print('身份证号码校验为合法号码!')
else:
print('身份证校验位错误!') 描述如下
中国目前采用的是18位身份证号,其第7-10位数字是出生年,11-12位是出生月份,13-14是出生日期,第17位是性别,奇数为男性,偶数为女性,第18位是校验位。
如果身份证号码的其中一位填错了(包括最后一个校验位),则校验算法可以检测出来。如果身份证号的相邻2位填反了,则校验算法可以检测出来。校验规则如下:
1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2. 将这17位数字和系数相乘的结果相加。
3. 用加出来和除以11,看余数只可能是:0-1-2-3-4-5-6-7-8-9-10
分别对应的最后一位身份证的号码为:1-0-X-9-8-7-6-5-4-3-2
4. 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的X(大写英文字母X)。如果余数是10,身份证的最后一位号码就是2。
用户输入一个身份证号,校验其是否是合法的身份证号码,如身份证号码不合法输出 '身份证校验位错误!',如身份证号码合法则分别在4行中输出'身份证号码校验为合法号码!' 永恒的蓝色梦想 发表于 2020-3-31 12:09
描述没截全
描述如下
中国目前采用的是18位身份证号,其第7-10位数字是出生年,11-12位是出生月份,13-14是出生日期,第17位是性别,奇数为男性,偶数为女性,第18位是校验位。
如果身份证号码的其中一位填错了(包括最后一个校验位),则校验算法可以检测出来。如果身份证号的相邻2位填反了,则校验算法可以检测出来。校验规则如下:
1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2. 将这17位数字和系数相乘的结果相加。
3. 用加出来和除以11,看余数只可能是:0-1-2-3-4-5-6-7-8-9-10
分别对应的最后一位身份证的号码为:1-0-X-9-8-7-6-5-4-3-2
4. 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的X(大写英文字母X)。如果余数是10,身份证的最后一位号码就是2。
用户输入一个身份证号,校验其是否是合法的身份证号码,如身份证号码不合法输出 '身份证校验位错误!',如身份证号码合法则分别在4行中输出'身份证号码校验为合法号码!' import datetime
ls = ( 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 )
id = input()
def IDcheck(id):
sum = 0
for i in range(17):
sum = sum + ls * int(id)
if id == 'X':
if sum % 11 == 2:
return 1
else:
return 0
elif (sum % 11 + int(id)) % 11 == 1:
return 1
else:
return 0
if IDcheck(id) == 1:
year = id
month = id
day = id
if int(id) % 2 == 0:
sex = '女'
if int(id) % 2 == 1:
sex = '男'
print('身份证号码校验为合法号码!')
print('出生:{}年{}月{}日'.format(year, month, day))
print('年龄:{}'.format(datetime.datetime.now().year - int(year)))
print('性别:{}'.format(sex))
else:
print('身份证校验位错误!') 永恒的蓝色梦想 发表于 2020-3-31 12:26
第一题怎么写???? 永恒的蓝色梦想 发表于 2020-3-31 12:26
讲讲大佬你的代码性别男女写反了 李子豪 发表于 2020-3-31 12:55
讲讲大佬你的代码性别男女写反了
……我一直以为倒数第二位只有1、2来着……搞错了欸 李子豪 发表于 2020-3-31 12:52
第一题怎么写????
A=(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
B=('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
def isValidID(ID):
return B==ID
def main():
ID=input()
if isValidID(ID):
print(f"身份证号码校验为合法号码!")
else:
print('身份证校验位错误!')
if __name__=='__main__':
main() 永恒的蓝色梦想 发表于 2020-3-31 13:02
大佬抱抱给我讲讲嘤嘤嘤 李子豪 发表于 2020-3-31 13:04
大佬抱抱给我讲讲嘤嘤嘤
这个……你哪里不懂? 都不懂嘤嘤嘤能不能都讲讲!!! 永恒的蓝色梦想 发表于 2020-3-31 13:16
这个……你哪里不懂?
讲讲大佬 李子豪 发表于 2020-4-1 10:21
讲讲大佬
讲哪儿啊?还是说你一点不会? 永恒的蓝色梦想 发表于 2020-3-31 13:16
这个……你哪里不懂?
{:10_266:}都不懂分条讲讲 李子豪 发表于 2020-4-1 11:12
都不懂分条讲讲
如果要全讲的话,抱歉,我没那个时间
如果说你要是提出几条疑问的话,我倒是可以给你讲讲
页:
[1]