六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 187|回复: 0

校验身份证号码(Google App Engine Python实现)

[复制链接]

升级  52%

38

主题

38

主题

38

主题

秀才

Rank: 2

积分
128
 楼主| 发表于 2012-12-10 13:17:47 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">算法介绍:
身份证号码中的校验码是身份证号码的最后一位,是根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,根据精密的计算公式计算出来的,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码,最后一位是数字校验码。
校验身份证可以分为下面几步:
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
5. 如果通过计算得到的余数和身份证最后一位一样, 则说明身份证号码是正确的
Python实现:
这里使用eclipse作为开发工具,在这之前需要安装Pydev插件,首先新建一个Pydev Googel App Engine Project
1. Python script文件(identitycheck.py)
<div class="cnblogs_code"> 1 import os 2 from google.appengine.ext import webapp 3 from google.appengine.ext.webapp.util import run_wsgi_app 4 from google.appengine.ext.webapp import template 5 6 class IdentityCheck(): 7     checkFactor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] 8     checkCode = { 0 : '1',  1 : '0',  2 : 'x',  3 : '9',  4 : '8',  5 : '7',   9                    6 : '6',  7 : '5',  8 : '4',  9 : '3',  10 : '2'}10     def checkIdentityNo(self,identityNo):11         checkNum = 012         13         for i in range(17):14             checkNum = checkNum + int(identityNo)*self.checkFactor15         16         self.checkResult = self.checkCode[checkNum % 11]17         if checkResult == identityNo[17]:18             return "This identity card number(" + identityNo + ") is valid."19         else:20             return "This identity card number(" + identityNo + ") is invalid."21             22 class checkResult(webapp.RequestHandler):23     def post(self):24         identityNo = self.request.get('id')25         result = None26         identityCheck = IdentityCheck()27         if identityNo:28             result = identityCheck.checkIdentityNo(identityNo)29         30         template_values ={ 'result' : result,31                            'inputNo' : identityNo,32                            'outputNo' : identityNo[0:-1] + str(identityCheck.checkResult)}33         path = os.path.join(os.path.dirname(__file__),'main.html')34         self.response.out.write(template.render(path, template_values))35 36 class MainPage(webapp.RequestHandler):37     def get(self):38         path = os.path.join(os.path.dirname(__file__),'main.html')39         self.response.out.write(template.render(path, None))40         41 42 application = webapp.WSGIApplication([('/', MainPage),43                                       ('/sign', checkResult)], debug=True)44 45 46 def main():47     run_wsgi_app(application)48 49 if __name__ == "__main__":50     main()
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表