Ocr票据自动识别

票据识别

报销系统业务场景需求:
自动提取电子票据内容,实现自动化,减少财务人员工作量,提高工作效率;

开发语言python

部分代码展示:

#!/user/bin/env python
# coding=utf-8

from importlib_metadata import re


class TicketData() :
    def __init__(self) :
        self.StartStation = ''      # 起始站
        self.Destination = ''       # 终点站
        self.TrainNum = ''          # 车次
        self.DrivingTime = ''       # 开车时间
        self.SeatNum = ''           # 座位号
        self.TicketPrice = ''       # 票价
        self.SeatType = ''          # 座位类型
        self.Passenger = ''         # 乘车人
        self.IDNum = ''             # 证件号
        self.TicketCode = ''        # 售票码
        self.TicketOffice = ''      # 售票站
        self.IsBottomUp = False

    #判断是否含有中文
    def CheckContainChinese(self, Content) :
        for ch in Content:
            if (u'\u4e00' <= ch <= u'\u9fff') :
                return True
        return False

    def Reset(self) :
        self.StartStation = ''
        self.Destination = ''
        self.TrainNum = ''
        self.DrivingTime = ''
        self.SeatNum = ''
        self.TicketPrice = ''
        self.SeatType = ''
        self.Passenger = ''
        self.IDNum = ''
        self.TicketCode = ''
        self.TicketOffice = ''
        self.IsBottomUp = False

    def ParseTicket(self, Content, Position) :
        Index = 0
        PosFirst = 0
        PosSencond = 0
        First = ''
        Sencond = ''
        self.Reset()

        for line in Content :
            if (line.find('12306') != -1) :
                if (Index < (len(Content) // 2)) :
                    self.IsBottomUp = True
            elif (line.find('年') != -1 and line.find('月') != -1 and line.find('日') != -1 and line.find('开') != -1) : # 发车时间
                self.DrivingTime = line
            elif (line.find('车') != -1 and line.find('号') != -1) :     # 座位号
                self.SeatNum = line
            elif (line.find('¥') != -1 and line.find('元') != -1) :     # 票价
                self.TicketPrice = line
            elif (line.find('座') != -1 or line.find('铺') != -1 or line.find('卧') != -1) :    # 车票类型
                self.SeatType = line
            elif (line.find('站') != -1) :      # 车站
                if(First == '') :
                    First = line
                    PosFirst = Position[Index][3][0]
                else :
                    Sencond = line
                    PosSencond = Position[Index][3][0]
            elif (line.find('****') != -1) :      # 乘车人
                Spilt = line.find('****')
                self.IDNum = line[0 : Spilt + 8] 
                self.Passenger = line[Spilt + 8 :]
            elif (((self.CheckContainChinese(line)) == False) and (len(line) < 7) and bool(re.search(r'\d', line))): # 车次
                self.TrainNum = line
            elif (line.find(' ') != -1 and ((self.CheckContainChinese(line)) == True)) :     # 销售
                Space = line.find(' ')
                self.TicketCode = line[0:Space]        # 售票码
                self.TicketOffice = line[Space+1:]      # 售票站
                
            Index += 1
        
        if(self.IsBottomUp) :
            if (PosSencond > PosFirst) :
                self.StartStation = Sencond
                self.Destination = First
            else :
                self.StartStation = First
                self.Destination = Sencond
        else :
            if (PosSencond > PosFirst) :
                self.StartStation = First
                self.Destination = Sencond
            else :
                self.StartStation = Sencond
                self.Destination = First

火车票信息提取

  • 火车票信息:
    1. 乘车人
    2. 证件号
    3. 起始站
    4. 终点站
    5. 车次
    6. 日期
    7. 座位号
    8. 票价
    9. 销售码
    10. 销售站
    11. 类型
      图片效果展示:请添加图片描述

发票内容提取

一、发票基础信息
1. 发票代码
2. 发票号码
3. 开票日期
4. 校验码
5. 价税合计
6. 收款人
7. 复核
8. 开票人
二、购买方
9. 名称
10. 纳税人识别号
11. 地址电话
12. 开户行及账号
三、销售方信息
13. 名称
14. 纳税人识别号
15. 地址电话
16. 开户行及账号
 
 图片效果展示:

请添加图片描述

身份证信息提取

  • 身份证信息:
    1. 姓名
    2. 性别
    3. 民族
    4. 出生
    5. 地址
    6. 公民身份号码
      图片效果展示:
      因包含私人信息,咱不展示;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值