核酸检测录入python程序


若有侵权之类的,请联系删除
此教程仅供参考,不喜勿喷

一、背景

近来河南商丘地区疫情较为严重,全面开展核酸检测工作,据猜测,考虑到设备、以及老人小孩没有智能手机,无法进行核酸检测信息填报,本社区采用了人工信息的填报(即,所有信息采用手写的方式)。这导致后期信息上报到系统出现困难,其过程步骤过于繁琐。开发了这个程序,方便了核酸检测信息的录入,节省了大量时间(只收集姓名、身份证号、手机号即可,省去了地区、性别等)。
注:由于同一地区,而省去了地区的选择。

二、大致功能

  1. 身份证号查验
  2. 基本核酸检测信息上报到系统
  3. 生成供核酸检测APP扫描的二维码

三、模块讲解

一、身份证号查验

def check_id_data(id):   #核验身份证号是否合理
    var=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    var_id=['1','0','x','9','8','7','6','5','4','3','2']
    id = str(id)
    sum = 0
    if int(id[16])%2==0:
        gender="女"
        same=int(int(id[16])/2)
    else:
        gender="男"
        same=int((int(id[16])+1)/2)
    for i in range(0,17):
        sum += int(id[i])*var[i]
    sum %= 11
    CheckBit = str(id[17]);
    if "X"==CheckBit:
        CheckBit = "x"
    if (var_id[sum])==CheckBit:
        print("身份证号规则核验通过,校验码是:",var_id[sum])
        print("出生于:",id[6:10],"年",id[10:12],"月",id[12:14],"日","性别:",gender,"\n当地同性别同生日排名:",same)
        return sum
    else:
        print("出生于:",id[6:10],"年",id[10:12],"月",id[12:14],"日","性别:",gender,"\n当地同性别同生日排名:",same)
        print("但身份证号规则核验失败,校验码应为",var_id[sum],",当前校验码是:",id[17])
        return -1

二、基本核酸检测信息上报到系统

程序

def InformationReporting(name, id, phone):
    id = str(id)
    char = id[16] 
    gender_num = int(char)
    if gender_num%2 == 1:
        gender = '男'
    else:
        gender = '女'
    url = "http://36.133.44.216:9100/hsxxdj-service/p/core/yidd/addPerson?name=" + name + "&idcard=" + id + "&linkPhone=" + phone + "&currAddr=虞城县/城关镇/虞城县北街居委会/某某村&sex=" + gender + "&cardType=身份证"
    req = requests.get(url)
    result = req.json();
    print(result)
    result = str(result)
    if result[12:16] == "True":
        return True
    else:
        return False

关于网址以及地址

在这里插入图片描述

url = "http://36.133.44.216:9100/hsxxdj-service/p/core/yidd/addPerson?name=" + name + "&idcard=" + id + "&linkPhone=" + phone + "&currAddr=虞城县/城关镇/虞城县北街居委会/某某村&sex=" + gender + "&cardType=身份证"

在这里插入图片描述

上述查看源之后,将其对应的值修改即可
在这里插入图片描述
请将下面代码中的地址,替换至上报系统对应地址。(此地址不代表任何含义,使用的全是第一个选项)

虞城县/城关镇/虞城县北街居委会/某某村

在这里插入图片描述

三、生成供核酸检测APP扫描的二维码

程序

def GenerateQRCode(name, id):
    qr=qrcode.QRCode(version = 2,error_correction = qrcode.constants.ERROR_CORRECT_L,box_size=10,border=10,)
    strInput = '{"idcard":"' + id + '","name":"' + name +'"}'
    
    print('本码:'+strInput)
    bs=str(base64.b64encode(strInput.encode('utf-8')),"utf-8")
    print('转码:'+bs)
    qr.add_data(bs)
    qr.make(fit=True)
    img = qr.make_image()
    img.show()

关于生成二维码信息的缘由

(不同地区的二维码生成信息可能不一致,仅供参考)
通过其他程序扫描得知,它是一段base64的数据,通过解码得到了一串json数据(关于idcard和name),所以通过生成姓名和身份证号的json数据,进行base64编码,即可得到对应二维码

总程序

import sys
import qrcode
import base64
import datetime
import os
import sys
import requests,json

def InformationReporting(name, id, phone):
    id = str(id)
    char = id[16] 
    gender_num = int(char)
    if gender_num%2 == 1:
        gender = '男'
    else:
        gender = '女'
    url = "http://36.133.44.216:9100/hsxxdj-service/p/core/yidd/addPerson?name=" + name + "&idcard=" + id + "&linkPhone=" + phone + "&currAddr=虞城县/城关镇/虞城县北街居委会/某某村&sex=" + gender + "&cardType=身份证"
    req = requests.get(url)
    result = req.json();
    print(result)
    result = str(result)
    if result[12:16] == "True":
        return True
    else:
        return False
    
def GenerateQRCode(name, id):
    qr=qrcode.QRCode(version = 2,error_correction = qrcode.constants.ERROR_CORRECT_L,box_size=10,border=10,)
    strInput = '{"idcard":"' + id + '","name":"' + name +'"}'
    
    print('本码:'+strInput)
    bs=str(base64.b64encode(strInput.encode('utf-8')),"utf-8")
    print('转码:'+bs)
    qr.add_data(bs)
    qr.make(fit=True)
    img = qr.make_image()
    img.show()
    #path = 'E:/Aurora/Desktop/核酸/1/' + str_1 + '.jpg'
    #img.save(path)

def check_id_length(id):     #核验身份证号长度是否合理
    if len(str(id)) != 18:
        print("只支持18位身份证号查询")
        return False
    else:
        return True
def check_id_data(id):   #核验身份证号是否合理
    var=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    var_id=['1','0','x','9','8','7','6','5','4','3','2']
    id = str(id)
    sum = 0
    if int(id[16])%2==0:
        gender="女"
        same=int(int(id[16])/2)
    else:
        gender="男"
        same=int((int(id[16])+1)/2)
    for i in range(0,17):
        sum += int(id[i])*var[i]
    sum %= 11
    CheckBit = str(id[17]);
    if "X"==CheckBit:
        CheckBit = "x"
    if (var_id[sum])==CheckBit:
        print("身份证号规则核验通过,校验码是:",var_id[sum])
        print("出生于:",id[6:10],"年",id[10:12],"月",id[12:14],"日","性别:",gender,"\n当地同性别同生日排名:",same)
        return sum
    else:
        print("出生于:",id[6:10],"年",id[10:12],"月",id[12:14],"日","性别:",gender,"\n当地同性别同生日排名:",same)
        print("但身份证号规则核验失败,校验码应为",var_id[sum],",当前校验码是:",id[17])
        return -1
        
def main(name, id, phone):
    if check_id_length(id) == False:
        return False
    if check_id_data(id) == -1:
        return False
    if InformationReporting(name, id, phone):
        GenerateQRCode(name, id)

name = str(sys.argv[1])
id = str(sys.argv[2])
phone = str(sys.argv[3])
main(name, id, phone)
            

  • 5
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值