// 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(); } }