身份证号合法性判别

简介: 身份证号合法性判别

【问题描述】我国身份证号码由数字与字母混合组成。早期身份证由15位数字构成,后来考虑到千年虫问题(15位的身份证号码只能为1900年1月1日到1999年12月31日出生的人编号),所以又增加了18位身份证号码编号规则。最后一位(第18位)校验码的计算方法如下:

 第一步:将身份证前17位数分别乘以不同的系数。从第1位到第17位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2,将17位数字和系数相乘的结果相加。
 第二步:将上一步结果除以11求余数,则余数只可能是0-10,身份证最后一位的对应字符为1、0、X、9、8、7、6、5、4、3、2。
 例如余数结果为3,则对应身份证号码的最后一位就是9,如果是10,身份证最后一位便是2。
 请根据上述算法判断输入的身份证号是否合法。

【输入形式】一行18位的字符串,代表一个身份证号
【输出形式】如果输入的是合法身份证号,请输出“YES”,否则输出“NO”
【样例输入】110000000000000000
【样例输出】NO
【样例说明】不合法身份证号,输出“NO”
【评分标准】共5个测试用例,全部通过为满分`

a = input()
alist = []
for i in range(0, 17):
    alist.append(a[i])
alist = [int(x) for x in alist]
s = 7 * alist[0] + 9 * alist[1] + 10 * alist[2] + 5 * alist[3] + 8 * alist[4] + 4 * alist[5] + 2 * alist[6] + 1 * alist[
    7] + 6 * alist[8] + 3 * alist[9] + 7 * alist[10] + 9 * alist[11] + 10 * alist[12] + 5 * alist[13] + 8 * alist[
        14] + 4 * alist[15] + 2 * alist[16]
if s % 11 == 0 and int(a[17]) == 1:
    print("YES")
elif s % 11 == 1 and a[17] == "0":
    print("YES")
elif s % 11 == 3 and a[17] == "9":
    print("YES")
elif s % 11 == 4 and a[17] == "8":
    print("YES")
elif s % 11 == 5 and a[17] == "7":
    print("YES")
elif s % 11 == 6 and a[17] == "6":
    print("YES")
elif s % 11 == 7 and a[17] == "5":
    print("YES")
elif s % 11 == 8 and a[17] == "4":
    print("YES")
elif s % 11 == 9 and a[17] == "3":
    print("YES")
elif s % 11 == 10 and a[17] == "2":
    print("YES")
elif s % 11 == 2 and a[17] == "X":
    print("YES")
else:
    print("NO")
相关文章
|
6月前
|
JavaScript
身份证号码自动判定出生年月及性别年龄
身份证号码自动判定出生年月及性别年龄
57 0
|
JavaScript 前端开发
身份证第18位校验码如何计算
身份证第18位校验码如何计算
82 0
|
6月前
证件校验正则
证件校验正则
41 0
|
前端开发 JavaScript
JS前端实现身份证号码合法性校验(校验码校验)
JS前端实现身份证号码合法性校验(校验码校验)
613 0
|
机器学习/深度学习 算法 大数据
如何通过空号检测,验证电话号码数据的准确性
空号检测接口通过结合数据查询和验证算法,为企业和个人提供了一种有效的方式来确定电话号码的有效性。它在营销、客户服务、身份验证和运营商等方面发挥着重要作用,提高了资源利用效率、用户体验和数据准确性。随着通信技术的发展,空号检测接口将继续发挥更大的作用,帮助解决电话号码有效性的挑战
491 0
电话号码验证器(FreeCodeCamp)
电话号码验证器(FreeCodeCamp)
401 0
电话号码验证器(FreeCodeCamp)
|
Web App开发 JavaScript