发票验真 + 识别,一套代码全搞定
发票验真 + 识别,一套代码全搞定

发票验真 + 识别,一套代码全搞定

大家好,我是正在实战各种 AI 项目的程序员晚枫。


🔍 识别 + 验真,缺一不可

只识别不验真的风险:

  • 假发票混入
  • 作废发票报销
  • 红冲发票重复使用
  • 税务风险

完整流程

1
发票 → OCR 识别 → 提取信息 → 税务验真 → 结果存储

今天:教你一套代码搞定识别 + 验真。


🛠️ 完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import poocr
import requests
import hashlib

# 配置
SECRET_ID = os.getenv('TENCENT_SECRET_ID')
SECRET_KEY = os.getenv('TENCENT_SECRET_KEY')
TAX_API_URL = "https://inv-veri.chinatax.gov.cn/api"

def recognize_invoice(image_path):
"""识别发票"""
result = poocr.ocr2excel.VatInvoiceOCR2Excel(
input_path=image_path,
output_path='./temp',
id=SECRET_ID,
key=SECRET_KEY
)
return parse_result(result)

def verify_invoice(invoice_data):
"""验真发票"""
# 准备验真参数
params = {
'invoice_code': invoice_data['发票代码'],
'invoice_number': invoice_data['发票号码'],
'invoice_date': invoice_data['开票日期'],
'amount': invoice_data['金额']
}

# 调用税务验真 API
response = requests.post(
f"{TAX_API_URL}/verify",
json=params,
headers={'Authorization': get_auth_token()}
)

result = response.json()

if result['status'] == 'valid':
return True, "验真通过"
elif result['status'] == 'invalid':
return False, "发票不存在或信息不符"
elif result['status'] == 'cancelled':
return False, "发票已作废"
else:
return None, "验真失败"

def process_invoice_with_verify(image_path):
"""识别 + 验真完整流程"""
print(f"📄 处理发票:{image_path}")

# 1. OCR 识别
print("🔍 正在识别...")
invoice_data = recognize_invoice(image_path)
print(f"✅ 识别完成:{invoice_data['发票号码']}")

# 2. 税务验真
print("🔐 正在验真...")
is_valid, message = verify_invoice(invoice_data)

if is_valid:
print(f"✅ 验真通过:{message}")
save_to_database(invoice_data, status='valid')
elif is_valid is False:
print(f"❌ 验真失败:{message}")
save_to_database(invoice_data, status='invalid')
else:
print(f"⚠️ 验真异常:{message}")
save_to_database(invoice_data, status='pending')

return invoice_data, is_valid, message

# 批量处理
for invoice_file in os.listdir('./invoices'):
process_invoice_with_verify(f'./invoices/{invoice_file}')

📊 验真结果处理

验真状态含义处理方式
valid真票正常入账
invalid假票退回,不报销
cancelled已作废退回,换发票
red_flushed已红冲退回,不报销
pending验真失败人工复核

💬 联系我

平台账号/链接
微信扫码加好友
微博@程序员晚枫
知乎@程序员晚枫
抖音@程序员晚枫
小红书@程序员晚枫
B 站Python 自动化办公社区

主营业务:AI 编程培训、企业内训、技术咨询


🎓 推荐课程


识别是基础,验真是保障。

两套结合,才能确保万无一失。

代码已备好,直接用吧。💪

🎓 AI 编程实战课程

想系统学习 AI 编程?程序员晚枫的 AI 编程实战课 帮你从零上手!