• python练习题(三)


    题目:

     1 一、二选一
     2 1、每个区生成1个符合身份证规则的身份证号码
     3 2、随机生成10个符合身份证规则的身份证号码
     4 二、要求:
     5 1、身份证属于南京市
     6 2、出生日期为1980-1-1 至 2019-8-1的人
     7 三、扫盲:
     8 320100 南京市 
     9 320102 玄武区 
    10 320104 秦淮区 
    11 320105 建邺区 
    12 320106 鼓楼区 
    13 320111 浦口区 
    14 320113 栖霞区 
    15 320114 雨花台区 
    16 320115 江宁区 
    17 320116 六合区 
    18 320117 溧水区 
    19 320118 高淳区 
    20 1、前1、2位数字表示江苏省的代码;
    21 2、第3、4位数字表示南京市的代码;
    22 3、第5、6位数字表示所在区(县、自治县、县级市)的代码;
    23 4、第7—14位数字表示出生年、月、日;
    24 5、第15、16位数字表示所在地的派出所的代码;
    25 6、第17位数字表示性别(奇数表示男性,偶数表示女性);
    26 7、第18位数字是校检码:校检码可以是0—9的数字,可以以是x。X是罗马数字的10
    27 四、重点说明:
    28 第18位的计算:
    29 1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
    30 2、将这17位数字和系数相乘的结果相加。
    31 3、用加出来和除以11,看余数是多少?
    32 4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。(即余数0对应1,余数1对应0,余数2对应X...)

    小余的答案:

      1 #!/opt/python27/bin/python
      2 # -*- coding:utf-8 -*-
      3 # author:why
      4 
      5 import random
      6 '''
      7 一、题目:
      8 二选一
      9 1、每个区生成1个符合身份证规则的身份证号码
     10 2、随机生成10个符合身份证规则的身份证号码
     11 二、要求:
     12 1、身份证属于南京市
     13 2、出生日期为1980-1-1 至 2019-8-1的人
     14 三、扫盲:
     15 320100 南京市  320102 玄武区 320104 秦淮区 320105 建邺区 320106 鼓楼区 320111 浦口区 320113 栖霞区 320114 雨花台区 320115 江宁区 320116 六合区 320117 溧水区 320118 高淳区 
     16 1、前1、2位数字表示江苏省的代码;
     17 2、第3、4位数字表示南京市的代码;
     18 3、第5、6位数字表示所在区(县、自治县、县级市)的代码;
     19 4、第7—14位数字表示出生年、月、日;
     20 5、第15、16位数字表示所在地的派出所的代码;
     21 6、第17位数字表示性别(奇数表示男性,偶数表示女性);
     22 7、第18位数字是校检码:校检码可以是0—9的数字,可以以是x。X是罗马数字的10
     23 四、重点说明:
     24 第18位的计算:
     25 1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
     26 2、将这17位数字和系数相乘的结果相加。
     27 3、用加出来和除以11,看余数是多少?
     28 4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。(即余数0对应1,余数1对应0,余数2对应X...)
     29 '''
     30 
     31 class idGener:
     32     def __init__(self):
     33         id16 = ['320100','320102','320104','320105','320106','320111','320113','320114','320115','320116','320117','320118']
     34         moduId = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]  #第一位到第十七位的系数
     35         id18Rema ={'0':'1','1':'0','2':'X','3':'9','4':'8','5':'7','6':'6','7':'5','8':'4','9':'3','10':'2'}
     36         self.id16 = id16
     37         self.moduId = moduId
     38         self.id18Rema = id18Rema
     39 
     40     def id16Gener(self,id):
     41         '''
     42         取值,1-6位
     43         :param id: 1-12 时取 固定值,其他取随机
     44         :return: str 320102
     45         '''
     46         if id <= len(self.id16) and id > 0:
     47             resId16 = self.id16[id-1]
     48         else:
     49             resId16 =random.sample(self.id16,1)
     50             resId16 = resId16[0]
     51         return resId16
     52 
     53     def id714Gener(self):
     54         '''
     55         取值,7-14位
     56         :return: 
     57         '''
     58         id710 = random.sample(range(1980,2020),1)[0]
     59         id1112 = random.sample(range(01,13),1)[0]
     60         if id1112 == 02:# 判断闰月
     61             if id710%4 == 0 and id710%100 != 0 :
     62                 id1314 = random.sample(range(01,29),1)[0]
     63             else:
     64                 id1314 = random.sample(range(01, 30), 1)[0]
     65         elif id1112 in (1,3,5,7,8,10,12):#31天
     66             id1314 = random.sample(range(01,32),1)[0]
     67         else:
     68             id1314 = random.sample(range(01, 31),1)[0]
     69         if id1112 < 10:
     70             id1112Str = '0'+str(id1112)
     71         else:
     72             id1112Str = str(id1112)
     73         if id1314 <10:
     74             id1314Str = '0'+str(id1314)
     75         else:
     76             id1314Str = str(id1314)
     77         return str(id710)+id1112Str+id1314Str
     78 
     79     def id1517Gener(self):
     80         '''
     81         随机生成0-9
     82         :return: str
     83         '''
     84         id710 = random.sample(range(0, 10), 1)[0]
     85         return str(id710)
     86 
     87     def id18Gener(self):
     88         '''
     89         1.求和取余
     90         2.判断第18位
     91         :return: 返回18位身份证
     92         '''
     93         id117Str = self.id16Gener(111)+self.id714Gener()+self.id1517Gener()+self.id1517Gener()+self.id1517Gener()
     94         id117List = list(map(int, id117Str)) #转list
     95         moduSumTol = 0
     96         for i in range(0,len(id117List)):
     97             moduSum = id117List[i] * self.moduId[i]
     98             moduSumTol += moduSum
     99         remainId = moduSumTol % 11
    100         id18Str = self.id18Rema[str(remainId)]
    101         id118Str = id117Str + id18Str
    102         print id118Str
    103 
    104 if __name__ == '__main__':
    105     id = idGener()
    106     id.id18Gener()
    View Code

    小敏的答案:

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @File  : IdCard.py
     4 # @Author: min
     5 # @Date  : 2019/9/5
     6 
     7 
     8 '''
     9 一、题目:
    10 
    11 二选一
    12 1、每个区生成1个符合身份证规则的身份证号码
    13 2、随机生成10个符合身份证规则的身份证号码
    14 
    15 二、要求:
    16 
    17 1、身份证属于南京市
    18 2、出生日期为1980-1-1 至 2019-8-1的人
    19 
    20 三、扫盲:
    21 
    22 1、前1、2位数字表示江苏省的代码;
    23 2、第3、4位数字表示南京市的代码;
    24 3、第5、6位数字表示所在区(县、自治县、县级市)的代码;
    25 4、第7—14位数字表示出生年、月、日;
    26 5、第15、16位数字表示所在地的派出所的代码;
    27 6、第17位数字表示性别(奇数表示男性,偶数表示女性);
    28 7、第18位数字是校检码:校检码可以是0—9的数字,可以以是x。X是罗马数字的10
    29 
    30 四、重点说明:
    31 
    32 第18位的计算:
    33 1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
    34 2、将这17位数字和系数相乘的结果相加。
    35 3、用加出来和除以11,看余数是多少?
    36 4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。(即余数0对应1,余数1对应0,余数2对应X...)
    37 '''
    38 import random
    39 
    40 
    41 def creatIdCard():
    42     citylist = [320100, 320102, 320104, 320105, 320106, 320111, 320113, 320114, 320115, 320116, 320117, 320118]
    43     city = random.choice (citylist)
    44     year = random.randint (1980, 2019)
    45     month = random.randint (1, 12)
    46     if month in (1, 3, 5, 7, 8, 10, 12):
    47         day = 31
    48     elif month in (4, 6, 9, 11):
    49         day = 30
    50     elif month == 2:
    51         if year % 400 == 0:
    52             day = 29
    53         else:
    54             day = 28
    55     police = random.randint (10, 99)
    56     sex = random.randint (1, 9)
    57     seventeen_str = str (city) + str (year) + str (month) + str (day) + str (police) + str (sex)
    58     seventeen_list = list (map (int, seventeen_str))
    59     stlist = []
    60     num = 0
    61     for i in range (16):
    62         stlist.append (seventeen_list[i])
    63     secret = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    64 
    65     for i in range (16):
    66         num += stlist[i] * secret[i]
    67     remainder = num % 11
    68     eigthteen = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
    69 
    70     result = str (city) + str (year) + str (month) + str (day) + str (police) + str (sex) + str (eigthteen[remainder])
    71     print result
    72 
    73 if __name__ == '__main__':
    74     creatIdCard ()
    View Code

    四爷的答案:

     1 # encoding: utf-8
     2 
     3 import time
     4 import random
     5 
     6 ary  = []
     7 ary1 = []
     8 def regiun():
     9         #生成身份证前六位
    10         #列表里面的都是一些地区的前六位号码
    11         first_list = ['320100','320102','320104','320105','320106','320111','320113','320114','320115','320116','320117','320118']
    12 
    13         a1=(1980,1,1,0,0,0,0,0,0)              #设置开始日期时间元组(1980-01-01 00:00:00)
    14         a2=(2019,8,01,23,59,59,0,0,0)    #设置结束日期时间元组(2019-08-01 23:59:59)
    15         start=time.mktime(a1)    #生成开始时间戳
    16         end=time.mktime(a2)      #生成结束时间戳
    17 
    18         #随机生成日期字符串
    19         for i in range(10):
    20             str1 = ""
    21             for j in range(3): #生成三位随机数字
    22                 ch = chr(random.randrange(ord('0'), ord('9') + 1))
    23                 str1 += ch
    24             first = random.choice(first_list)  #前六位,随机取一个
    25             t=random.randint(start,end)    #在开始和结束时间戳中随机取出一个
    26             date_touple=time.localtime(t)          #将时间戳生成时间元组
    27             date=time.strftime("%Y%m%d",date_touple)  #将时间元组转成格式化字符串(19760521)
    28             ary.append(first + date+ str1)
    29         #print ary
    30 
    31         for k in range(0, len(ary)):
    32             count = 0
    33             weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]  # 权重项
    34             checkcode = {'0':'1','1':'0','2':'X','3':'9','4':'8','5':'7','6':'6','7':'5','8':'4','9':'3','10':'2'}  # 校验码对应的最后一位
    35             ary2 = ary[k]
    36             for m in range(0,len(ary2)):
    37 
    38                 count = count + int(ary2[m]) * weight[m]
    39             id = checkcode[str(count%11)]  # 算出最后一位校验码
    40             ary[k] = ary[k] + id
    41        # print ary
    42         return ary
    43 
    44 print regiun()
    View Code
  • 相关阅读:
    设计模式
    雨夹雪背景特效
    lottie-前端实现AE动效
    响应式布局实现原理
    关于小程序(含uniapp)中使用npm模块
    使用脚手架快速搭建React项目
    vue项目接入友盟统计站点数据
    git常用命令
    uniapp请求方法的封装
    小程序获取用户登录及手机号登录
  • 原文地址:https://www.cnblogs.com/whycai/p/11639690.html
Copyright © 2020-2023  润新知