票据识别
报销系统业务场景需求:
自动提取电子票据内容,实现自动化,减少财务人员工作量,提高工作效率;
开发语言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. 地址电话
12. 开户行及账号
三、销售方信息
13. 名称
14. 纳税人识别号
15. 地址电话
16. 开户行及账号
图片效果展示:
身份证信息提取
- 身份证信息:
- 姓名
- 性别
- 民族
- 出生
- 地址
- 公民身份号码
图片效果展示:
因包含私人信息,咱不展示;