文档章节

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

vinci321
 vinci321
发布于 02/07 21:03
字数 937
阅读 15
收藏 4
点赞 0
评论 0

幸好老子从原来的文章提取出一部分还可以用的信息。

 

步骤:

1, 从未被删除的数据中恢复了三千多个城市,分别插入到idcard_address表中。

2, 发现恢复的数据是新GB/T2600的版本,很多旧版本的编码没有了,行政编码的GB/T2600有9个版本,很多城市有了新的编码,但是用了老的编码的身份证仍然有效,所以要找齐所有的版本编码才算齐全,无奈年代久远,网络资料有限,能找到的最早版本为1999年版本,是一个扫描生成的PDF文档,无法复制粘贴,需要一个一个手打到excle里面然后用python从excle里面逐行读取,速度很慢,所以只截取了几个省份(北京天津河北山西内蒙古江西等)。

3, 文件的数据和idcard_address表的数据共同插入到新表中: idcard_address_all.

如下

建表

# 部分表
CREATE TABLE `idcard_address` (
  `id` int(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `address_id` int(6) unsigned NOT NULL DEFAULT '0' COMMENT '行政区划编号',
  `address_name` varchar(40) NOT NULL DEFAULT '' COMMENT '行政区划名称',
  PRIMARY KEY (`id`),
  KEY `idx_ai_an` (`address_id`,`address_name`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='行政区划表';

# 一起表
CREATE TABLE `idcard_address_all` (
  `id` int(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `address_id` int(6) unsigned NOT NULL DEFAULT '0' COMMENT '行政区划编号',
  `address_name` varchar(40) NOT NULL DEFAULT '' COMMENT '行政区划名称',
  PRIMARY KEY (`id`),
  KEY `idx_ai_an` (`address_id`,`address_name`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='行政区划表';

代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# encoding=utf-8
# Filename: cityZoneDB.py
'''全国行政区划号码数据库'''


import MySQLdb
import sys
import re
import os
reload(sys)
sys.setdefaultencoding('utf-8')

class CZDB:

    def __init__(self):

        self.host = 'localhost'
        self.port = '3306'
        self.username = 'root'
        self.password = '123456'
        self.dbname = 'python'
        self.charset = 'utf8'
        self.oldtable = 'idcard_address'
        self.newtable = 'idcard_address_all'

    def connect(self):
        try:
            self.dbConnection = MySQLdb.connect(host=self.host, user=self.username, passwd=self.password, db=self.dbname, charset='utf8')
            # 打开数据库连接
            if self.dbConnection:
                self.cursor = self.dbConnection.cursor()
                print '数据库连接成功'
                return True
            else:
                print '数据库连接失败'
                return False
        except:
            print '数据库连接失败'
            return False

    # 插入数据
    def insertData(self, cities):
        # 整理获取到的数据
        values = []
        for city in cities:
            value = (int(city[0]), city[1])
            values.append(value)

        self.connect()
        try:
            self.cursor.executemany("insert into idcard_address_all(`address_id`,`address_name`) values(%s,%s)", values)
            self.dbConnection.commit()
            print '成功插入%d条数据到%s表' % (len(values), self.newtable)
        except Exception as e:
            print e
            self.dbConnection.rollback()
        self.dbConnection.close()

    # 获取文件中的数据
    def getFileData(self):
        filedict = {}
        fo = open("/home/c80k2/桌面/爬虫/行政区划/测试", "r")
        fo.seek(os.SEEK_SET)
        for line in fo.readlines():
            if line.strip() != '':
                code = re.findall('\d\d\d\d\d\d', line)[0]
                name = line.replace(code, '').strip('\t\n')
                filedict[code] = name
        fo.close()
        print '成功获取/home/c80k2/桌面/爬虫/行政区划/测试的数据'
        return filedict

    # 从表中获取数据
    def getDBData(self):
        dbdict = {}
        try:
            self.connect()
            # 执行SQL语句
            self.cursor.execute("select address_id,address_name from %s" % self.oldtable)
            # 获取所有记录列表
            results = self.cursor.fetchall()
            for row in results:
                code = int(str(row[0]).strip('L'))
                dbdict[code] = row[1]
        except:
            print "Error: unable to fecth data"

        # 关闭数据库连接
        self.dbConnection.close()
        print '成功获取DB数据'
        return dbdict

    # 获取所有数据
    def getAllData(self):
        fileData = self.getFileData()
        dbData = self.getDBData()
        # 对fileData进行去重处理
        for key, value in fileData.items():
            if dbData.has_key(str(key)) or dbData.has_key(int(key)):
                continue
            else:
                dbData[int(key)] = value
        # 对新字典进行排序
        sortedCityDict = dbData.items()
        sortedCityDict.sort()
        print '成功获取全部数据'
        return sortedCityDict

    # 插入全部数据到数据库
    def insertAllData(self):
        cities = self.getAllData()
        self.insertData(cities)

czdb = CZDB()
czdb.insertAllData()

运行结果

成功获取/home/c80k2/桌面/爬虫/行政区划/测试的数据
数据库连接成功
成功获取DB数据
成功获取全部数据
数据库连接成功
成功插入3928条数据到idcard_address_all表
mysql> select count(1) from idcard_address;
+----------+
| count(1) |
+----------+
|     3744 |
+----------+
1 row in set (0.01 sec)

mysql> select count(1) from idcard_address_all;
+----------+
| count(1) |
+----------+
|     3928 |
+----------+
1 row in set (0.00 sec)

总结:

连mysql的时候不能直接在初始化方法中连接,这样会造成mysql 2006 'MySQL server has gone away' 的错误。

© 著作权归作者所有

共有 人打赏支持
vinci321
粉丝 6
博文 85
码字总数 205255
作品 0
一个身份证号码验证接口[0]

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

vinci321 ⋅ 01/23 ⋅ 0

在php中使用对称加密DES3,开发银行卡绑定,实名验证

对称加密:对称加密是一种数据加密算法,对一组数据的加密和解密都使用一样的密钥(key),可以有效保护金融数据,常见的对称加密有DES,3DES,AES、RC2、RC4、RC5。 DES3: 对DES算法的组合,指定...

皇冠小丑 ⋅ 06/03 ⋅ 0

互联网金融平台常见绑卡鉴权方式分析对比

1.背景 互联网金融平台账户进行开户或者支付业务时,绑卡鉴权环节是必经之路。 那么什么是绑卡鉴权?绑卡是将用户银行卡信息提供给金融平台,以后金融平台就用这个信息去银行完成支付。绑卡实...

萧竹 ⋅ 2017/07/13 ⋅ 0

jQuery进行简单验证的正则表达式

1、验证电话号码或者手机号码 1 2 3 4 5 6 7 8 9 10 \d{ ( 2、验证地址(中文、英文、数字) 1 2 3 4 5 6 7 8 9 3、验证用户名 1 2 3 4 5 6 7 8 9 10 4、验证密码 1 2 3 4 5 6 7 8 9 10 5、验...

笨小熊 ⋅ 2015/10/28 ⋅ 0

有道的查询IP,身份证,手机的API接口封掉了,你们验证身份证真伪用什么方法?

今天有用户给我说身份验证不能通过了,注册不了,发现有道的手机,IP,身份证的接口都疯了,你们怎么验证呢和查询归属地? http://www.youdao.com/smartresult-xml/search.s?type=ip&q=ip地址...

wrean2013 ⋅ 2013/08/12 ⋅ 17

收款收银台上快捷支付(无卡支付)方案说明

快捷支付 即首次支付时通过验证用户的银行卡信息(如银行卡号、开户姓名、身份证号以及银行开户手机号等),绑定银行卡进行支付,一次绑定后,即可快速支付,最安全快捷的支付方式。 收银台提...

燃烧NO1 ⋅ 2016/09/20 ⋅ 0

手机丢了,但是里面装了支付宝,后果会如何?

一定要看完,也别忘了跟朋友分享! 支付宝关联银行卡,如果手机丢了会发生什么关于支付宝安全的帖子不少,那些帖子说的都是手机身份证银行卡一起丢,光凭身份证和卡就可以取钱了,何必通过支...

BruceGao ⋅ 2014/12/16 ⋅ 7

10月1日起玩网游实名验证身份

昨日,国家新闻出版总署相关负责人在第九届中国国际数码互动娱乐展上宣布,国家八部委近日下发了《关于启动网络游戏防沉迷实名验证工作的通知》,备受关注的网络游戏防沉迷实名验证工作已经启...

红薯 ⋅ 2011/07/31 ⋅ 15

微信身份证来了!如何通过刷脸就能证明“我是我”?

2015年3月,当马云向德国总理默克尔演示扫脸技术,为她从淘宝上买1948年汉诺威纪念邮票时,刷脸认证对大众来说,还是一件新鲜事。 而现在,刷脸认证的应用已经无处不在了,解锁手机、购物、考...

郭佳 ⋅ 2017/12/28 ⋅ 0

广州试点“微信网络身份证”,开户机酒全搞定

雷锋网报道,据新华社消息,12月25日,广州第一张“微信身份证网上应用凭证”在广州市南沙区签发,为线上、线下政务服务以及旅馆业登记、物流寄递、飞机高铁、银行开户等实名制应用场景,提供...

伊莉 ⋅ 2017/12/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Mahout推荐算法之SlopOne

一、 算法原理 有别于基于用户的协同过滤和基于item的协同过滤,SlopeOne采用简单的线性模型估计用户对item的评分。如下图,估计UserB对ItemJ的偏好 图(1) 在真实情况下,该方法有如下几个...

xiaomin0322 ⋅ 30分钟前 ⋅ 0

LVM讲解

LVM是什么 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地...

李超小牛子 ⋅ 40分钟前 ⋅ 0

mysql更改密码、连接mysql、mysql常用命令

1. 更改mysql的root账户密码: mysql中root账户和系统root不是一个账户 1.1 更改环境变量PATH,增加mysql绝对路径 由于mysql安装目录为/usr/local/mysql/,所以系统不能直接使用mysql,需把/...

laoba ⋅ 41分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

猫耳m ⋅ 41分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

阿里云云栖社区 ⋅ 44分钟前 ⋅ 0

1.03-Maven中使用ueditor富文本编辑器

起因:在maven仓库未找到百度的ueditor的jar包 操作: 1.下载百度的ueditor的jar包 2.打开命令行,切换到ueditor的下载位置,运行一下命令: mvn install:install-file -Dfile=ueditor-1.1....

静以修身2025 ⋅ 50分钟前 ⋅ 0

几道Spring 面试题

1、BeanFactory 接口和 ApplicationContext 接口有什么区别? ApplicationContext 接口继承BeanFactory接口 Spring核心工厂是BeanFactory BeanFactory采取延迟加载,第一次getBean时才会初始...

职业搬砖20年 ⋅ 59分钟前 ⋅ 0

包饺子

http://storage.slide.news.sina.com.cn/slidenews/77_ori/2018_24/74766_826131_625489.gif

霜叶情 ⋅ 今天 ⋅ 0

xml解析

方法一: String s_xml1 = "<xml>" + "<head>lalalalal</head>" + "<body>1234</body>" + "</xml>"; try { DocumentBuilderFactory documentBuilderFactory......

GithubXD ⋅ 今天 ⋅ 0

reuse stream

Although Java streams were designed to be operated only once, programmers still ask how to reuse a stream. From a simple web search, we can find many posts with this same issue ......

idoz ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部