李子豪 发表于 2020-3-31 12:06:57

校验身份证号码并输出个人信息题求助

求解和讲解自己搞了两三天写不对

永恒的蓝色梦想 发表于 2020-3-31 12:06:58

本帖最后由 永恒的蓝色梦想 于 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()

永恒的蓝色梦想 发表于 2020-3-31 12:09:22

描述没截全

李子豪 发表于 2020-3-31 12:09:49

我把老师的答案附上
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('身份证校验位错误!')

李子豪 发表于 2020-3-31 12:15: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行中输出'身份证号码校验为合法号码!'

李子豪 发表于 2020-3-31 12:17:48

永恒的蓝色梦想 发表于 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行中输出'身份证号码校验为合法号码!'

李子豪 发表于 2020-3-31 12:22:51

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:52:30

永恒的蓝色梦想 发表于 2020-3-31 12:26


第一题怎么写????

李子豪 发表于 2020-3-31 12:55:17

永恒的蓝色梦想 发表于 2020-3-31 12:26


讲讲大佬你的代码性别男女写反了

永恒的蓝色梦想 发表于 2020-3-31 12:59:51

李子豪 发表于 2020-3-31 12:55
讲讲大佬你的代码性别男女写反了

……我一直以为倒数第二位只有1、2来着……搞错了欸

永恒的蓝色梦想 发表于 2020-3-31 13:02:18

李子豪 发表于 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:04:43

永恒的蓝色梦想 发表于 2020-3-31 13:02


大佬抱抱给我讲讲嘤嘤嘤

永恒的蓝色梦想 发表于 2020-3-31 13:16:31

李子豪 发表于 2020-3-31 13:04
大佬抱抱给我讲讲嘤嘤嘤

这个……你哪里不懂?

李子豪 发表于 2020-3-31 19:08:56

都不懂嘤嘤嘤能不能都讲讲!!!

李子豪 发表于 2020-4-1 10:21:38

永恒的蓝色梦想 发表于 2020-3-31 13:16
这个……你哪里不懂?

讲讲大佬

永恒的蓝色梦想 发表于 2020-4-1 10:23:31

李子豪 发表于 2020-4-1 10:21
讲讲大佬

讲哪儿啊?还是说你一点不会?

李子豪 发表于 2020-4-1 11:12:59

永恒的蓝色梦想 发表于 2020-3-31 13:16
这个……你哪里不懂?

{:10_266:}都不懂分条讲讲

永恒的蓝色梦想 发表于 2020-4-1 11:18:36

李子豪 发表于 2020-4-1 11:12
都不懂分条讲讲

如果要全讲的话,抱歉,我没那个时间
如果说你要是提出几条疑问的话,我倒是可以给你讲讲
页: [1]
查看完整版本: 校验身份证号码并输出个人信息题求助