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
原文地址:https://www.cnblogs.com/whycai/p/11639690.html