[关闭]
@old123 2015-06-06T10:11:18.000000Z 字数 2152 阅读 821

综合训练报告

此处输入图片的描述

**姓名:隋云鹏
学号:1403050218
专业:安全工程(矿山通风安全)
班级:通风14-2班
指导讲师:邓立军
职称:讲师

     2015年 6月 7日 **
        **目录**
        1.摘要
        2.问题分析
        3.程序描述
        4.源程序
        5.总结

1、 摘要
现阶段中国身份证号是根据《身份证号纲要》制定,属于一组特征码。其中最后一位是校验码。随着计算机技术的发展,我们便考虑编写一套程序去简化身份证校验工作。减轻人工负担,实现校验智能化、迅速化、准确化的目标。
2、问题分析
由于校验身份证号属于一种检验、计算的过程。所以我认为,应当使用if循环,为了满足身份证校验工作,其中还用到了求和公式与加权平均数到等计算公式。最终为了得到结果,还需要引入else算法。保证结果的输出。
现行身份证号码是18位,前六位代表省市县,接着的八位是公元年月日,顺序码(第十五位至十七位) 表示在同一地址码所标识的区域范围内、 对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。 校验码(第十八位数) (1)十七位数字本体码加权求和公式, S = Sum(Ai*Wi),i=0,1,2……16,先对前17位数字的权求和 Ai:表示第i位置上的身份证号码数字值 Wi:表示第i位置上的加权因子(i=1、2、…17) Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (2)计算模(除以11得到余数Y) Y=mod(S,11) (3)通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码:1 0 X 9 8 7 6 5 4 3 2 (X为罗数字的10)可以保证公民的身份证符合国家标准。
3、程序描述
将前面的身份证号码17位数分别乘以不同的系数。第i位对应的数为[2^(18-i)]mod11。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;
将这17位数字和系数相乘的结果相加;
用加出来和除以11,看余数是多少?;
余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2;
通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2;
此处输入图片的描述
4、源程序

-- coding: utf-8 --

import random

yushu=[x for x in range(0,11)]
ma=['1','0','X','9','8','7','6','5','4','3','2','1']

def yanzheng(nid):

dicma=dict(zip(yushu,ma))

sum=0

for x,y in enumerate(nid[:-1]):

    sum+=((2**(18-x-1))%11)*int(y) #17位对应系数相乘的和

if nid[-1]==dicma[sum%11]: #校验码对照
    return '%s 真'%nid
else:
    return '%s 伪'%nid

def readfile(fname):
f=open('id.txt','rb')
for line in f.readlines():
print yanzheng(line.strip())
f.close()
def randnum():
idstr=''
for i in range(17): #前17位随机
idstr+=str(random.randint(0,9))

idstr+=random.choice(ma) #最后一位从列表种随意一个,因为有X
return idstr

if name=="main":
nid=raw_input('请输入您的身份证号:') #用户输入身份证号,没做任何验证
print yanzheng(nid) #验证身份证
readfile('id.txt') #从文件读出来再验证
print yanzheng(randnum()) #随机一个在验证
此处输入图片的描述
5、总结
时间就像流水一样,一个星期的时间又过去了,这次的综合训练是由我与他人合作完成的,综合训练真的非常锻炼我们的能力使我们渐渐的明白了电脑的正确使用方法,及高级数据结构、以及字符串、文件读写的使用,虽然我们这次选择的身份证校验对同学们来说不是特别的难,但是说实话一开始的时候我们两个真的很困难,有些手忙脚乱,但是通过在百度上的搜寻与查找,使我们对作业有了一点了解,逐渐的我们顺藤摸瓜,终于将这次的综合训练完成了,编写的代码兴许会让内行人耻笑,但是我们自己却很开心,因为这是我们的一次成功,属于自己的成功,这是我们编程世界的开始!希望老师可以喜欢并提出不足之处,我们会尽全力修改。
此处输入图片的描述
(1)python学习手册
(2)综合训练报告模板
第16组   人数:2人    第2次综合训练
组员

名字 Pull-Request 分工
张夺 https://github.com/anheihb03dlj/learn-python/pull/72 整理数据以及编写代码(组长)
隋云鹏 https://github.com/anheihb03dlj/learn-python/pull/25 撰写报告以及答辩演讲

题目:项目七 校验身份证号码真伪
难度:普通
开始时间:2015年6月2日
完成时间:2015年6月8日
(PS.第二次综合训练作业均在https://github.com/anheihb03dlj/learn-python/pull/25中。)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注