文档章节

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

vinci321
 vinci321
发布于 02/08 23:49
字数 721
阅读 39
收藏 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
博文 173
码字总数 217682
作品 0
私信 提问
illi/PRC ID Generator

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

illi
2015/10/18
0
0
一个身份证号码验证接口[0]

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

vinci321
01/23
0
0
一个身份证验证接口[4]

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

vinci321
02/08
3
0
身份证号码生成器令网游实名注册形同虚设

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

红薯
2010/08/03
7.4K
6
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
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

Docker Java API 选型

因为工作原因需要使用Java调用装有docker环境的机器完成打镜像 上传镜像库的操作,进过调查,发现了两个比较常用的Java API工具,分别是 docker-java 和 spotify-docker-client,Github地址分...

MrPei
10分钟前
1
0
关ASCII码中的特殊字符10和13

10 : 是 LF 即 "\n" 13:是CR 即 "\r" 在不同的操作系统中,表示的方式是不一样的。在UNIX系统中,换行符使用"\n" , 在 windows 系统中换行使用 "\r\n"; 在旧版macOS中换行使用回车符"/r",...

Canaan_
12分钟前
0
0
MaxCompute 表(Table)设计规范

表的限制项 表(Table)设计规范 表设计主要目标 表设计的影响 表设计步骤 表数据存储规范 按数据分层规范数据生命周期 按数据的变更和历史规范数据的保存 数据导入通道与表设计 分区设计与逻辑...

阿里云官方博客
18分钟前
1
0
border实现等高布局

效果图 实现上图效果的全部html+css代码 <div class="box"> <nav> <h3 class="nav">导航1</h3> <h3 class="nav">导航2</h3> </nav> <section> <div cla......

呵呵闯
29分钟前
1
0
MaxCompute 表(Table)设计规范

表的限制项 表(Table)设计规范 表设计主要目标 表设计的影响 表设计步骤 表数据存储规范 按数据分层规范数据生命周期 按数据的变更和历史规范数据的保存 数据导入通道与表设计 分区设计与逻辑...

阿里云云栖社区
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部