zoukankan      html  css  js  c++  java
  • 推算身份证的生日位

    
    #5321251987****1171
    # 获取日期列表,从01到31
    # t代表身份证号码的位数,w表示每一位的加权因子
    t = []
    w = []
    for i in range(0, 18):
        t1 = i + 1
        t.append(t1)
        w1 = (2 ** (t1 - 1)) % 11
        w.append(w1)
    # 队列w要做一个反序
    w = w[::-1]
    
    
    # 根据前17位的余数,计算第18位校验位的值
    def for_check(n):
        # t = 0
        for i in range(0, 12):
            if (n + i) % 11 == 1:
                t = i % 11
        if t == 10:
            t = 'X'
        return t
    
    
    # 根据身份证的前17位,求和取余,返回余数
    def for_mod(id):
        sum = 0
        for i in range(0, 17):
            sum += int(id[i]) * int(w[i])
            # print(int(id[i]),int(w[i]),sum)
        sum = sum % 11
        # print(sum)
        return sum
    
    
    # 验证身份证有效性
    def check_true(id):
        # print(for_check(for_mod(id[:-1])))
        if id[-1] == 'X':
            if for_check(for_mod(id[:-1])) == 'X':
                return True
            else:
                return False
        else:
            if for_check(for_mod(id[:-1])) == int(id[-1]):
                return True
            else:
                return False
    
    day = []
    for i in range(0,4):
        for j in range(0,10):
            d = str(i) + str(j)
            day.append(d)
            if d == '31':
                break
        if d == '31':
            break
    day = day[1:]
    
    # 获取月份列表,从01到12
    month = []
    for i in range(0,3):
        for j in range(0,10):
            d = str(i) + str(j)
            month.append(d)
            if d == '12':
                break
        if d == '12':
            break
    month = month[1:]
    
    # 获取年月列表,从0101到1231,剔除不存在的日期
    mmdd = []
    for i in month:
        for j in day:
            md = i + j
            mmdd.append(md)
    mmdd.remove('0230')
    mmdd.remove('0231')
    mmdd.remove('0431')
    mmdd.remove('0631')
    mmdd.remove('0931')
    mmdd.remove('1131')
    
    #以下代码用于遍历所有日期,打印出通过校验的身份证号码
    id1 = '5321251987'
    id3 = '1171'
    j = 0
    for i in mmdd:
        theid = id1 + i + id3
        if check_true(theid):
            print(theid)
            j += 1
    
  • 相关阅读:
    【转】 VC MFC 钩子 实现 自绘 窗体 标题栏 非客户区
    Scintilla开源库使用指南(二)
    Scintilla开源库使用指南(一)
    【转】MFC 多文档
    多视图识别
    获得MFC窗口其它类指针的方法
    sql2005 查看数据库或表大小的系统存储过程 sp_spaceused
    哪里是乐土?关于团队良性循环 (转)
    项目管理反思——前言
    项目经理思考——团队
  • 原文地址:https://www.cnblogs.com/c-x-a/p/10178032.html
Copyright © 2011-2022 走看看