题目:
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
小余的答案:
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
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
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
View Code