import re
text = ''.join(c['text'] for c in sorted(chars, key=lambda c: c['x']))
text = re.sub(r'(?<=\d)[Oo]', '0', text)
print(bool(re.match(r'^[\u4e00-\u9fa5][A-Z]\d{5}$', text)))

保单号 粤B12345 识别成 粤 B1234S,8 认成 B,拼接后还整体右移一位,回填时长度校验直接失败。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,识别模型按字符切分,中文和数字行高不一致时基线会漂,S 和 5、B 和 8 在低分辨率下像素几乎重合。返回的坐标按字符给出,拼字符串时没按 x 排序。

「中英混排识别校正」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

处理上按这个顺序:按字符坐标重新排序再拼接;数字段做字形校正 O 转 0 I 转 1;上传分辨率提到 300dpi 再识别;用固定格式做长度和校验位验证。

改完只确认一件事:保单号 10 条样本全部通过正则 长度校验不再报错。

作者 9823189