身份证识别结果比对

身份证识别

xlsx中的数据是原始数据,txt文档中的数据是身份证识别的结果,通过比对xlsx和txt文档中的数据,来判断txt文档中的数据有多少识别正确,准确率是多少


import pandas as pd
import numpy as np

# xlsx路径和txt文档路径
xlsx_path = "身份证识别测试500.xlsx"
txt_path = "result_test.txt"

# xlsx表格数据
df_data = pd.read_excel(xlsx_path)  # 读取xlsx表格数据
# print(df_data)  # 打印所有的xlsx表格数据
# print(df_data["身份证号"])  # 打印身份证号数据
# print(df_data["姓名"])  # 打印姓名数据
df_datas = df_data.iloc[:, 1:3]  # 取出pandas数据中的身份证号和姓名两列
print(df_datas)  # 打印pandas类型的这两列数据
df_values = df_datas.values  # 取出pandas类型数据的值
# print(type(df_values))  # <class 'numpy.ndarray'>  numpy数组类型
print(df_values)  # 打印numpy数组类型数据

# txt文本数据
txt_data = np.loadtxt(fname=txt_path, dtype=np.str, encoding="utf-8", delimiter="\n")  # 读取文本数据
print(len(txt_data))  # 8462行文本
txt_list = list(txt_data)  # 将文本内容转化为列表形式保存
name_list = []  # 存放txt中姓名的列表
id_number_list = []  # 存放txt中身份证号的列表
for t in txt_list:  # 遍历文本中的每一行数据
    # print(t)  # 打印每一行文本内容
    if '"姓名":' in t:  # 如果找到了姓名相关的数据
        name_list.append(t.split(":")[1].replace('"', "").replace(" ", ""))  # 数据处理之后加入到姓名的列表中
    if '"公民身份号码":' in t:  # 如果找到了身份证号码相关的数据
        id_number_list.append(t.split(":")[1].replace('"', "").replace(" ", ""))  # 数据处理之后加入到身份证号码的列表中
    # print("====================================================================")
print(name_list)  # 打印添加好的姓名列表
print(id_number_list)  # 打印添加好的身份证号码列表

# pandas格式的数据,这次没有用到
# df_name = pd.DataFrame(name_list)  # 把姓名列表转化为pandas数据
# print(df_name)  # 打印转化后的pandas
# df_id_number = pd.DataFrame(id_number_list)  # 把身份证号转化为pandas数据
# print(df_id_number)  # 打印转化后的身份证号

name_num = 0  # 记录匹配的姓名变量
id_num = 0  # 记录匹配的身份证号变量
for i in df_values:  # 遍历numpy数组类型数据
    print(i)  # 每一行数据都是一个列表形式储存,有两个元素,第一个元素是身份证号码,第二个元素是姓名
    for n in name_list:  # 遍历姓名列表中的每一个元素
        if n == i[1]:  # 如果姓名列表中的元素可以和pandas转化后的numpy数组类型数据匹配
            name_num += 1  # 匹配变量+1
    for id in id_number_list:  # 遍历身份证号码列表中的每一个元素
        if id == i[0]:  # 如果身份证号码列表中的元素和pandas转化后的numpy数组类型数据匹配
            id_num += 1  # 匹配变量+1
    print("====================================================")  # 用很多等号来做每一次大的遍历的分隔线


print("---------------------------------结果比对---------------------------------")
print("txt文档中的姓名和身份证号的个数:", len(name_list), len(id_number_list))
print("xlsx表格中的数据总量:", len(df_values))
print("txt文档中和xlsx表格中姓名和身份证号一致对应的个数:", name_num, id_num)
print("txt文档中检测的姓名准确率:{nn}%".format(nn=(name_num / len(df_values)) * 100))
print("txt文档中检测的身份证号准确率:{ii}%".format(ii=(id_num / len(df_values)) * 100))
print("------------------------------------------------------------------------")

感谢大家的关注和支持
希望我写的文章能够让你们得到价值有所收获
一直在路上,还请各位多多指正!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值