using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading.Tasks; using TencentCloud.Ocr.V20181119; using TencentCloud.Ocr.V20181119.Models; using Newtonsoft.Json; using TencentCloud.Common; using TencentCloud.Common.Profile; using Furion.DependencyInjection; using Furion; namespace EzTencentCloud { public class TencentCloudService: ITencentCloudService, IScoped { /// /// 剪裁后的身份证图片 /// public string CropIdCard { get; set; } public string GetIdCordImg() { if (string.IsNullOrEmpty(CropIdCard)) return ""; else return CropIdCard; } public IDCardOCRResponse IdCord(string ImageBase64, bool isFRONT) { try { Credential cred = new Credential { SecretId = App.Configuration["TencentCloud:SecretId"] ??"AKIDIPFp9CyThfMmvoQlpeCl34pKYVBahY9T", SecretKey = App.Configuration["TencentCloud:SecretKey"] ?? "4rNcaHhrkMhmb9QQ9bmgKipfFZcOt86n" }; ClientProfile clientProfile = new ClientProfile(); HttpProfile httpProfile = new HttpProfile(); httpProfile.Endpoint = ("ocr.tencentcloudapi.com"); clientProfile.HttpProfile = httpProfile; OcrClient client = new OcrClient(cred, "ap-beijing", clientProfile); IDCardOCRRequest req = new IDCardOCRRequest(); if (isFRONT) req.CardSide = "FRONT"; else req.CardSide = "BACK"; req.ImageBase64 = ImageBase64; req.Config = JsonConvert.SerializeObject(new { //身份证照片裁剪(去掉证件外多余的边缘、自动矫正拍摄角度) CropIdCard = true, // CropPortrait = true, //边框和框内遮挡告警 BorderCheckWarn = true, //PS检测告警 DetectPsWarn = true, //临时身份证告警 TempIdWarn = true, //身份证有效日期不合法告警 InvalidDateWarn = true, //图片质量分数(评价图片的模糊程度) Quality = true, }); IDCardOCRResponse resp = client.IDCardOCRSync(req); if (resp == null) throw new Exception("图片无法识别,请重新选择身份证图片"); var adv = JsonConvert.DeserializeObject(resp.AdvancedInfo); if (adv == null) throw new Exception("图片无法识别,请重新选择身份证图片"); if (adv?.BorderCodeValue != null && adv.BorderCodeValue > 50) throw new Exception("身份证图片不完整,请重新选择身份证图片"); if (adv?.Quality != null && adv.Quality < 50) throw new Exception("图片模糊,请重新选择身份证图片"); if (adv?.WarnInfos?.Where(x => x == -9100) == null) throw new Exception("身份证日期不合法,请重新选择身份证图片"); if (adv?.WarnInfos?.Where(x => x == -9106) == null) throw new Exception("该图片可能是被PS过,请重新选择身份证图片"); CropIdCard = adv.IdCard; return resp; } catch (Exception) { throw; } } } //返回扩展参数 internal class AdvancedInfo { /// /// idCard 裁剪后身份证照片的base64编码,请求 Config.CropIdCard 时返回; /// public string? IdCard { get; set; } /// /// 身份证头像照片的base64编码,请求 Config.CropPortrait 时返回; /// public string? Portrait { get; set; } /// /// 图片质量分数,请求 Config.Quality 时返回(取值范围:0 ~ 100,分数越低越模糊,建议阈值≥50); /// public int? Quality { get; set; } /// /// 身份证边框不完整告警阈值分数,请求 Config.BorderCheckWarn时返回(取值范围:0 ~ 100,分数越低边框遮挡可能性越低,建议阈值≤50); /// public int BorderCodeValue { get; set; } /// /// 告警信息,Code 告警码列表和释义: ///-9100 身份证有效日期不合法告警, ///-9101 身份证边框不完整告警, ///-9102 身份证复印件告警, ///-9103 身份证翻拍告警, ///-9105 身份证框内遮挡告警, ///-9104 临时身份证告警, ///-9106 身份证 PS 告警, ///-9107 身份证反光告警。 /// public List WarnInfos { get; set; } } }