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) 第三版
感谢 感谢购买第二版的同学,谢谢你们对本人劳动成果的支持!也正是你们时常问我还出不出第三版了,也是你们的鼓励,让我继续学习整理本文档. 感谢乙醇前辈,第二版的文档是放在他的淘宝网站上卖的,感谢他的帮忙 ...
随机推荐
- 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是
技术之瞳 阿里巴巴技术笔试心得习题2.65: 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是(D) A.DEFCBA B.DCEFBA C.FEDCBA D.FECDBA E.ABCDEF ...
- Meerkat软件
一.准备工作 meerkat 0.189版本和以前的版本相比,支持bwa mem 输出的bam文件,还支持全外显子数据count SV. meerkat原理 1.1 需要准备的软件 unix/Linu ...
- LeetCode 665. 非递减数列(Non-decreasing Array)
665. 非递减数列 665. Non-decreasing Array 题目描述 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是 ...
- lnmp 是不是该吐吐槽
lnmp 提供提供了便捷 , 并且手也伸的挺长的,它已不仅仅是个服务器环境那么简单 作为服务器继承环境来讲,可能每个人的认知程度不一,总之用了它需要服从它的规则 但从个人感觉上,其埋的坑还是让人不适, ...
- java当中请给出一个oracle的helloworld例子
[学习笔记] 2.oracle的helloworld例子: import java.sql.*;public class OracleHello{ public static void main ...
- 二进制知识(java中的位操作)
文章目录 前言 机器数 真值 原码 反码 补码 计算机中保存的都是补码 位操作 强制转换,精度丢失 前言 讲二进制的东西,必须要说明是多少位机器,八位机上的 1000 1000 和 十六位机上的 10 ...
- hugepage设置
1.设置memlock 编辑/etc/security/limits.conf 增加: * Soft memlock 稍小于RAM值 * hard memlock 稍小于RAM值 Memlock,锁定 ...
- golang之 iota 常量生成器
常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式.在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每 ...
- 数据结构-链式队列-C++
用链表搭建的栈与队列相对简单,队列的特点是先进先出,不啰嗦了,由于代码比较简单,相信光顾的人不会太多,下面直接贴代码. 头文件 #ifndef QUEUELI_H #define QUEUELI_H ...
- (转)基于FFPMEG2.0版本的ffplay代码分析
ref:http://zzhhui.blog.sohu.com/304810230.html 背景说明 FFmpeg是一个开源,免费,跨平台的视频和音频流方案,它提供了一套完整的录制.转换以及流化音视 ...