文档章节

一个生成随机身份证号码的接口

vinci321
 vinci321
发布于 02/08 23:49
字数 721
阅读 18
收藏 0
点赞 0
评论 0

明天快到了

代码:

#usr/bin/python
# -*- coding: utf-8 -*-
# Filename:idMaker.py

import cityZoneDB
import idChecker
import re
import random
import time

class idMaker():
    def __init__(self):
        self.db = cityZoneDB.CZDB()
        self.ic = idChecker.idChecker()
        self.now = time.localtime()
        self.startYear = 1900
        # self.startTime = time.mktime(time.strptime(self.startYear,"%Y-%M-%d"))
        self.bigMonthes = (1, 3, 5, 7, 8, 10, 12)
        self.smallMonthes = (4, 6, 9, 11)
        self.weightList = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
        self.validationList = (1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2)

    # 获取所有行政区划记录总数
    def setZoneCodeCount(self):
        try:
            sql = "select id from %s order by id desc limit 1" % self.db.newtable
            self.db.connect()
            self.db.cursor.execute(sql)
            res = self.db.cursor.fetchall()
            if len(res) == 1:
                self.zoneCodeCount = int(res[0][0])
                return True
            else:
                print '获取数量失败'
                return False
            self.db.dbConnection.close()
        except Exception as e:
            print e.message
            print "Error: unable to fecth data"

    # 随机获取一个身份证号码
    def getRandomIdCode(self):
        zoneCodeId = self.getRandomZoneCode()
        birthday = self.getRandomBirthday()
        policeStationCode = self.getRandomPoliceStationCode()
        genderAndSerial = self.getRandomGenderAndSerial()
        elements = zoneCodeId+birthday+policeStationCode+genderAndSerial
        checkCode = self.getCheckCode(elements)
        idNumber = elements+checkCode
        if zoneCodeId and birthday and policeStationCode and genderAndSerial and checkCode:
            print '已生成随机身份证:%s,即将进行校验' % idNumber
            self.ic.validation(idNumber)
            return True
        else:
            print '生成随机身份证失败'
            return False

    # 随机获取一个行政编码
    def getRandomZoneCode(self):
        try:
            id = random.randrange(1, self.zoneCodeCount, 1)
            sql = "select address_id from %s where id=%d" % (self.db.newtable, id)
            self.db.connect()
            self.db.cursor.execute(sql)
            res = self.db.cursor.fetchall()
            if len(res) == 1:
                if self.getZoneName(int(res[0][0])):
                    return str(res[0][0])
            else:
                print '获取数量失败'
                return False
            self.db.dbConnection.close()
        except Exception as e:
            print e.message
            print "Error: unable to fecth data"

    # 随机生成一个合法的出生日期
    def getRandomBirthday(self):
        nowYear = int(time.strftime("%Y", self.now))-1
        randYear = random.randrange(self.startYear, int(nowYear))
        randMonth = random.randrange(1, 12)
        if self.ic.isLeapYear(randYear) and randMonth == 2:
            randDate = random.randrange(1, 29)
        elif randMonth == 2:
            randDate = random.randrange(1, 28)
        elif randMonth in self.bigMonthes:
            randDate = random.randrange(1, 31)
        elif randMonth in self.smallMonthes:
            randDate = random.randrange(1, 30)
        #格式转换
        randYear = str(randYear)
        randMonth = str(randMonth) if randMonth > 10 else '0'+str(randMonth)
        randDate = str(randDate) if randDate > 10 else '0'+str(randDate)
        birthday = '%s%s%s' % (randYear, randMonth, randDate)

        return birthday

    # 随机生成一个派出所号
    def getRandomPoliceStationCode(self):
        randCode = random.randrange(1, 100)
        return str(randCode) if randCode > 10 else '0'+str(randCode)

    # 随机生成一个性别和序列号
    def getRandomGenderAndSerial(self):
        return str(random.randrange(0, 9))

    # 通过算法生成校验码
    def getCheckCode(self, elements):
        i = sum = 0
        while i < 17:
            sum += int(elements[i]) * self.weightList[i]
            i += 1
        key = sum % 11
        return str(self.validationList[key])

    # 获取行政名称
    def getZoneName(self, zoneCode):
        try:
            cityCode = (int(zoneCode))/100*100
            provinceCode = (int(zoneCode)/10000)*10000
            sql = 'select address_name from %s where address_id in (%d, %d, %d)' % (self.db.newtable, provinceCode, cityCode, int(zoneCode))
            # 执行SQL语句
            self.db.cursor.execute(sql)
            # 获取所有记录列表
            cityNames = self.db.cursor.fetchall()
            if len(cityNames) == 3:
                # print '籍贯:'+cityNames[0][0]+cityNames[1][0]+cityNames[2][0]
                return '籍贯:'+cityNames[0][0]+cityNames[1][0]+cityNames[2][0]
            else:
                print '城市编号不存在'
                return False
        except Exception as e:
            print e.message
            print "Error: unable to fecth data"


im = idMaker()
im.setZoneCodeCount()
im.getRandomIdCode()

执行结果

/usr/bin/python2.7 /home/c80k2/PycharmProjects/spider/.idea/idMaker.py
数据库连接成功
数据库连接成功
已生成随机身份证:340322198705035182,即将进行校验
数据库连接成功
身份证号码:340322198705035182合法,籍贯:安徽省蚌埠市五河县,出生日期:1987年5月3日,是当时统计周期内该地区第51派出所辖区内当天出生的第4名女性

Process finished with exit code 0

 

© 著作权归作者所有

共有 人打赏支持
vinci321
粉丝 6
博文 85
码字总数 205255
作品 0
illi/PRC ID Generator

中国大陆居民身份证号计算工具 本程序最早是运行于Windows系统的C#程序,但是由于要求逐渐改变为PHP程序,当前本程序的PHP程序的进化程度已经超过了C#。 本程序用于保护个人隐私安全,请勿用...

illi ⋅ 2015/10/18 ⋅ 0

一个身份证验证接口[4]

代码: 结果: 测试数据来源: http://shenfenzheng.293.net/?tt_t=0.9766452528640315 的前五条。 可以看到,数据匹配。同时,用于测试的数据由程序随机组合而成,这个也容易实现。若干年前全...

vinci321 ⋅ 02/08 ⋅ 0

一个身份证号码验证接口[0]

背景:之前在地铁站遇到有警察查身份证,没有带身份证报身份证号码也可以,实际上是调用公安部身份证数据库的接口进行查询的,他们能做,为什么我不能做来看看? 实现功能: 输入一个身份证号...

vinci321 ⋅ 01/23 ⋅ 0

身份证号码生成器令网游实名注册形同虚设

来自新闻晨报的报道称目前流行一种“身份证号码生成器”的软件,使得网游实名注册形同虚设。 一种叫做“身份证号码生成器”的软件早已走俏网络。这个软件操作起来很方便,只要输入“省”、“...

红薯 ⋅ 2010/08/03 ⋅ 6

银行卡四元素校验接口

商户在发起查询银行账号、银行账号开户户名、身份证号、银行预留手机号认证 信息 接口名称:银行卡四元素校验接口 接口平台:聚合数据 接口地址:http://v.juhe.cn/verifybankcard4/query 支...

熊babi ⋅ 2016/03/23 ⋅ 1

GJP-Chrome-Extension-Tools v1.2.1 发布

GJP-Chrome-Extension-Tools v1.2.1 发布了。 v1.2.1版本新增功能: 鼠标右键即可自动生成身份证号码到剪切板,直接ctrl+V即可显示,更加加速你的测试速度! GJP-chrome-extension-tools 本项...

倚楼听风雨_ ⋅ 2016/05/30 ⋅ 6

新手上路之Hibernate(四):单向一对一关联映射(主键、唯一外键关联)

一、概念 一对一关联映射: 两个对象之间是一对一的关系,例如人和身份证号码之间的关系。 单向一对一关联映射: 即在一个对象中存在另一个对象的引用,而在另一个对象中则不存在该对象的引用...

Airship ⋅ 2016/12/12 ⋅ 0

再论验证码安全:请及时销毁你的验证码

我在上一篇文章中讲到了如何使用C#模拟用户登录具有验证码网站。今天我就换位思考一下,站在网站开发人员的角度讲一讲验证码的的一个安全问题:及时销毁网站中的验证码。 为了方便大家理解,...

浣熊干面包 ⋅ 2012/01/18 ⋅ 0

storm starter学习(一)

官方提供的storm starter示例中,有很多应用的例子,对storm的应用场景理解很有帮助。本文结合源码来进行功能分解,记录一下,作为记忆索引吧。 先来看一个比较简单的示例:WordCountTopolo...

GoldenRoc ⋅ 2014/08/11 ⋅ 0

PHPRAP 1.0.2 发布,修复安装失败 Bug 和优化细节

PHPRAP,是一个PHP轻量级开源API接口文档管理系统,致力于减少前后端沟通成本,提高团队协作开发效率,打造PHP版的RAP。 更新记录 修复在MySQL5.5版本下安装数据初始化sql文件db.sql里addti...

够过瘾 ⋅ 2017/11/06 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Linux kernel脉络和主干总结

写在前面 前人常说,对Linux操作系统/内核的理解,是计算机行业从业者的内功,决定了你在技术领域想走多远。但内核的庞大以及学习曲线之陡峭,总让我在学习途中觉得犹如“管中窥豹”。 随着工...

Markz0928 ⋅ 23分钟前 ⋅ 0

在gcc中使用intel风格的内联汇编

很简单,内联汇编使用asm(“.intel_syntax noprefix/n”)声明一下,以后的内联汇编就可以用intel风格了,构建可执行文件时给gcc加上-masm=intel参数。 先写一个小程序测试一下: [cpp] view...

simpower ⋅ 34分钟前 ⋅ 0

NIO 之 ByteBuffer实现原理

相关文章 BIO、NIO、AIO 内部原理分析 NIO 之 Selector实现原理 NIO 之 Channel实现原理 前言 Java NIO 主要由下面3部分组成: Buffer Channel Selector 在传统IO中,流是基于字节的方式进行...

轨迹_ ⋅ 43分钟前 ⋅ 0

Jenkins docker权限问题

环境Ubuntu Server 工具 jenkins-war:2.89.2 报错信息 Cannot connect to the Docker daemon. Is the docker daemon running on this host?Build step 'Execute shell' marked build as fai......

Pulsar-V ⋅ 43分钟前 ⋅ 0

180621-一个简单的时间窗口设计与实现

如何设计一个计数的时间窗口 时间窗口,通常对于一些实时信息展示中用得比较多,比如维持一个五分钟的交易明细时间窗口,就需要记录当前时间,到五分钟之前的所有交易明细,而五分钟之前的数...

小灰灰Blog ⋅ 今天 ⋅ 0

Android之Dalvik、ART、JIT、AOT

Android之Dalvik、ART、JIT、AOT 本文内容:Dalvik、ART、JIT、AOT之间关系 本文定位:知识记录 学习过程记录,加深理解,提升文字组合表达能力。也希望能给学习的同学一些灵感 本文整理于[...

lichuangnk ⋅ 今天 ⋅ 0

Thrift RPC实战(五) thrift连接池

Thrift本身没有提供连接池,我们可以用Apache Commons Pool2来实现一个 一、定义对象工厂 BasePooledObjectFactory<T> extends BaseObject implements PooledObjectFactory<T> public class......

lemonLove ⋅ 今天 ⋅ 0

git 命令简写

简写 命令 g git gst git status gd git diff gdc git diff --cached gdv git diff -w "$@" | view - gl git pull gup git pull --rebase gp git push gc git commit -v gc! git commit -v ......

charley158 ⋅ 今天 ⋅ 0

Java中的锁使用与实现

1.Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 在Lock出现之前,java程序是靠synchronized关键字实现锁功能的,而Java SE5之后,...

ZH-JSON ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧四-类和方法注释模板设置

IDEA自带的注释模板不是太好用,我本人到网上搜集了很多资料系统的整理了一下制作了一份比较完整的模板来分享给大家,我不是专业玩博客的,写这篇文章只是为了让大家省事。 这里设置的注释模...

Mkeeper ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部