// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using PaddleOCRSharp;
using System.Text;
using System.Text.RegularExpressions;
namespace Admin.NET.Plugin.PaddleOCR;
///
/// 识别文本块工具类
///
public static class TextBlockUtil
{
///
/// 解析身份证姓名
///
///
///
public static string ReadIdCardName(List textBlocks)
{
var result = "";
foreach (var item in textBlocks)
{
var txt = item.Text.Replace(" ", "").Trim();
if (txt.Contains("性别") || txt.Contains("民族") || txt.Contains("住址") || txt.Contains("公民身份证号码") || txt.Contains("身份") || txt.Contains("号码"))
continue;
if (Regex.IsMatch(txt, @"^姓名[\u4e00-\u9fa5]{2,4}$"))
{
result = txt.TrimStart('姓', '名');
break;
}
else if (Regex.IsMatch(txt, @"^名[\u4e00-\u9fa5]{2,4}$"))
{
result = txt.TrimStart('名');
break;
}
else if (Regex.IsMatch(txt, @"^[\u4e00-\u9fa5]{2,4}$"))
{
result = txt;
break;
}
}
return result;
}
///
/// 解析身份证号码
///
///
///
public static string ReadIdCardNo(List textBlocks)
{
var result = "";
foreach (var item in textBlocks)
{
var txt = item.Text.Replace(" ", "").Trim();
if (Regex.IsMatch(txt, @"^\d{15}$|^\d{17}(\d|X|x)$"))
{
result = txt;
break;
}
}
return result;
}
///
/// 解析身份证地址
///
///
///
public static string ReadIdCardAddress(List textBlocks)
{
var sb = new StringBuilder();
string[] temps = { "省", "市", "县", "区", "镇", "乡", "村", "组", "室", "栋", "街道", "号" };
foreach (var item in textBlocks)
{
var txt = item.Text.Replace(" ", "").Trim();
if (txt.Contains("姓名") || txt.Contains("号码"))
continue;
if (temps.Where(t => txt.Contains(t)).Count() > 0)
{
sb.Append(txt);
}
}
sb = sb.Replace("住址", "");
return sb.ToString();
}
}