python练习题(三)
题目:
一、二选一
1、每个区生成1个符合身份证规则的身份证号码
2、随机生成10个符合身份证规则的身份证号码
二、要求:
1、身份证属于南京市
2、出生日期为1980-1-1 至 2019-8-1的人
三、扫盲:
320100 南京市
320102 玄武区
320104 秦淮区
320105 建邺区
320106 鼓楼区
320111 浦口区
320113 栖霞区
320114 雨花台区
320115 江宁区
320116 六合区
320117 溧水区
320118 高淳区
1、前1、2位数字表示江苏省的代码;
2、第3、4位数字表示南京市的代码;
3、第5、6位数字表示所在区(县、自治县、县级市)的代码;
4、第7—14位数字表示出生年、月、日;
5、第15、16位数字表示所在地的派出所的代码;
6、第17位数字表示性别(奇数表示男性,偶数表示女性);
7、第18位数字是校检码:校检码可以是0—9的数字,可以以是x。X是罗马数字的10
四、重点说明:
第18位的计算:
1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、将这17位数字和系数相乘的结果相加。
3、用加出来和除以11,看余数是多少?
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...)
小余的答案:
#!/opt/python27/bin/python
# -*- coding:utf-8 -*-
# author:why import random
'''
一、题目:
二选一
1、每个区生成1个符合身份证规则的身份证号码
2、随机生成10个符合身份证规则的身份证号码
二、要求:
1、身份证属于南京市
2、出生日期为1980-1-1 至 2019-8-1的人
三、扫盲:
320100 南京市 320102 玄武区 320104 秦淮区 320105 建邺区 320106 鼓楼区 320111 浦口区 320113 栖霞区 320114 雨花台区 320115 江宁区 320116 六合区 320117 溧水区 320118 高淳区
1、前1、2位数字表示江苏省的代码;
2、第3、4位数字表示南京市的代码;
3、第5、6位数字表示所在区(县、自治县、县级市)的代码;
4、第7—14位数字表示出生年、月、日;
5、第15、16位数字表示所在地的派出所的代码;
6、第17位数字表示性别(奇数表示男性,偶数表示女性);
7、第18位数字是校检码:校检码可以是0—9的数字,可以以是x。X是罗马数字的10
四、重点说明:
第18位的计算:
1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、将这17位数字和系数相乘的结果相加。
3、用加出来和除以11,看余数是多少?
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...)
''' class idGener:
def __init__(self):
id16 = ['','','','','','','','','','','','']
moduId = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] #第一位到第十七位的系数
id18Rema ={'':'','':'','':'X','':'','':'','':'','':'','':'','':'','':'','':''}
self.id16 = id16
self.moduId = moduId
self.id18Rema = id18Rema def id16Gener(self,id):
'''
取值,1-6位
:param id: 1-12 时取 固定值,其他取随机
:return: str 320102
'''
if id <= len(self.id16) and id > 0:
resId16 = self.id16[id-1]
else:
resId16 =random.sample(self.id16,1)
resId16 = resId16[0]
return resId16 def id714Gener(self):
'''
取值,7-14位
:return:
'''
id710 = random.sample(range(1980,2020),1)[0]
id1112 = random.sample(range(01,13),1)[0]
if id1112 == 02:# 判断闰月
if id710%4 == 0 and id710%100 != 0 :
id1314 = random.sample(range(01,29),1)[0]
else:
id1314 = random.sample(range(01, 30), 1)[0]
elif id1112 in (1,3,5,7,8,10,12):#31天
id1314 = random.sample(range(01,32),1)[0]
else:
id1314 = random.sample(range(01, 31),1)[0]
if id1112 < 10:
id1112Str = ''+str(id1112)
else:
id1112Str = str(id1112)
if id1314 <10:
id1314Str = ''+str(id1314)
else:
id1314Str = str(id1314)
return str(id710)+id1112Str+id1314Str def id1517Gener(self):
'''
随机生成0-9
:return: str
'''
id710 = random.sample(range(0, 10), 1)[0]
return str(id710) def id18Gener(self):
'''
1.求和取余
2.判断第18位
:return: 返回18位身份证
'''
id117Str = self.id16Gener(111)+self.id714Gener()+self.id1517Gener()+self.id1517Gener()+self.id1517Gener()
id117List = list(map(int, id117Str)) #转list
moduSumTol = 0
for i in range(0,len(id117List)):
moduSum = id117List[i] * self.moduId[i]
moduSumTol += moduSum
remainId = moduSumTol % 11
id18Str = self.id18Rema[str(remainId)]
id118Str = id117Str + id18Str
print id118Str if __name__ == '__main__':
id = idGener()
id.id18Gener()
小敏的答案:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : IdCard.py
# @Author: min
# @Date : 2019/9/5 '''
一、题目: 二选一
1、每个区生成1个符合身份证规则的身份证号码
2、随机生成10个符合身份证规则的身份证号码 二、要求: 1、身份证属于南京市
2、出生日期为1980-1-1 至 2019-8-1的人 三、扫盲: 1、前1、2位数字表示江苏省的代码;
2、第3、4位数字表示南京市的代码;
3、第5、6位数字表示所在区(县、自治县、县级市)的代码;
4、第7—14位数字表示出生年、月、日;
5、第15、16位数字表示所在地的派出所的代码;
6、第17位数字表示性别(奇数表示男性,偶数表示女性);
7、第18位数字是校检码:校检码可以是0—9的数字,可以以是x。X是罗马数字的10 四、重点说明: 第18位的计算:
1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、将这17位数字和系数相乘的结果相加。
3、用加出来和除以11,看余数是多少?
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...)
'''
import random def creatIdCard():
citylist = [320100, 320102, 320104, 320105, 320106, 320111, 320113, 320114, 320115, 320116, 320117, 320118]
city = random.choice (citylist)
year = random.randint (1980, 2019)
month = random.randint (1, 12)
if month in (1, 3, 5, 7, 8, 10, 12):
day = 31
elif month in (4, 6, 9, 11):
day = 30
elif month == 2:
if year % 400 == 0:
day = 29
else:
day = 28
police = random.randint (10, 99)
sex = random.randint (1, 9)
seventeen_str = str (city) + str (year) + str (month) + str (day) + str (police) + str (sex)
seventeen_list = list (map (int, seventeen_str))
stlist = []
num = 0
for i in range (16):
stlist.append (seventeen_list[i])
secret = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] for i in range (16):
num += stlist[i] * secret[i]
remainder = num % 11
eigthteen = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2] result = str (city) + str (year) + str (month) + str (day) + str (police) + str (sex) + str (eigthteen[remainder])
print result if __name__ == '__main__':
creatIdCard ()
四爷的答案:
# encoding: utf-8 import time
import random ary = []
ary1 = []
def regiun():
#生成身份证前六位
#列表里面的都是一些地区的前六位号码
first_list = ['','','','','','','','','','','',''] a1=(1980,1,1,0,0,0,0,0,0) #设置开始日期时间元组(1980-01-01 00:00:00)
a2=(2019,8,01,23,59,59,0,0,0) #设置结束日期时间元组(2019-08-01 23:59:59)
start=time.mktime(a1) #生成开始时间戳
end=time.mktime(a2) #生成结束时间戳 #随机生成日期字符串
for i in range(10):
str1 = ""
for j in range(3): #生成三位随机数字
ch = chr(random.randrange(ord(''), ord('') + 1))
str1 += ch
first = random.choice(first_list) #前六位,随机取一个
t=random.randint(start,end) #在开始和结束时间戳中随机取出一个
date_touple=time.localtime(t) #将时间戳生成时间元组
date=time.strftime("%Y%m%d",date_touple) #将时间元组转成格式化字符串(19760521)
ary.append(first + date+ str1)
#print ary for k in range(0, len(ary)):
count = 0
weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 权重项
checkcode = {'':'','':'','':'X','':'','':'','':'','':'','':'','':'','':'','':''} # 校验码对应的最后一位
ary2 = ary[k]
for m in range(0,len(ary2)): count = count + int(ary2[m]) * weight[m]
id = checkcode[str(count%11)] # 算出最后一位校验码
ary[k] = ary[k] + id
# print ary
return ary print regiun()
python练习题(三)的更多相关文章
- Python练习题 005:三个数字由大到小排序输出
[Python练习题 005]输入三个整数x,y,z,请把这三个数由小到大输出. ----------------------------------------------------------- ...
- Python练习题2
如果真的想学精,学什么都不是好学的,如果真的想把Python学的出神入化,几乎自己想做什么都可以,就要下定恒心,坚持下去. 接下来继续更新Python练习题2,通过更新前一部的练习题让自己也学到了不少 ...
- Python练习题 032:Project Euler 004:最大的回文积
本题来自 Project Euler 第4题:https://projecteuler.net/problem=4 # Project Euler: Problem 4: Largest palind ...
- Python练习题 023:比后面的人大2岁
[Python练习题 023] 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后 问 ...
- Python练习题 020:累积累加
[Python练习题 020] 求1+2!+3!+...+20!的和 -------------------------------------------------- 据说这题是"累积累 ...
- Python练习题 017:三支乒乓球队出赛名单
[Python练习题 017] 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比.请编程序找 ...
- Python练习题 009:水仙花数
[Python练习题 009] 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数& ...
- Python练习题 001:4个数字求不重复的3位数
听说做练习是掌握一门编程语言的最佳途径,那就争取先做满100道题吧. ----------------------------------------------------------------- ...
- 学习Python的三种境界
前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜西风凋碧树,独上高楼,望尽天涯路'.此第一境也.'衣带渐宽终不悔,为伊消得人 ...
- selenium webdriver (python) 第三版
感谢 感谢购买第二版的同学,谢谢你们对本人劳动成果的支持!也正是你们时常问我还出不出第三版了,也是你们的鼓励,让我继续学习整理本文档. 感谢乙醇前辈,第二版的文档是放在他的淘宝网站上卖的,感谢他的帮忙 ...
随机推荐
- idea设置项目【非springboot项目】热部署
1.首先打开Edit Configurations 或者 2.添加的项目一定是war: exploded,而不是war 3.server这边,On 'Update' action选Redeploy,O ...
- LeetCode 102. 二叉树的层次遍历(Binary Tree Level Order Traversal) 8
102. 二叉树的层次遍历 102. Binary Tree Level Order Traversal 题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 每 ...
- [转帖]Linux内核系统体系概述
Linux内核系统体系概述 https://www.cnblogs.com/alantu2018/p/8447369.html Linux 内核主要由 5 个模块构成,它们分别是: 进程调度模块 用来 ...
- QT release版QAudioDeviceInfo获取不到音频设备,而debug版可以获取到
新添加了两个模块:QCharts和Multimedia 但自己没有重新打包更新里面的库文件什么的... 坑爹... 害我找了这么久... 解决办法: 方法一: 将Qt安装目录下的plugins文件夹中 ...
- PHP get和post向服务器发送请求
1 .get请求 <?php //请求url地址 $token="xxx"; $url = "请求的地址"; //初始化curl $ch = curl_i ...
- vue项目过程的理解: main.js文件理解 router.js文件理解 以及组件 路由 等之间的关系
https://blog.csdn.net/qq_26229005/article/details/85040393 内容太多了,有空再整理
- Spring AOP日志实现(一)
前置通知:获取访问的类,访问的方法,带参数和不带参数的 日志表信息描述字段: 获取访问时长:
- zabbix的离线安装方法----孙祎晨,如需转载请注明出处,谢谢配合。
------------------------zabbix的离线安装步骤--------------------------------------------------------------- ...
- Yii2 redis 使用方法
/** * 基于 yii2.0 redis使用方法 *///项目根目录命令行执行 composer require --prefer-dist yiisoft/yii2-redis; //在配置文件中 ...
- springboot_2
1. 配置文件简介 spring boot使用一个全局配置文件:application.properties或者application.yml,放置在src/main/resources目录下或者类路 ...