身份证识别配置

This commit is contained in:
马梓彭 2026-03-20 12:13:33 +08:00
parent e3261fe596
commit f24804481f
3 changed files with 31 additions and 20 deletions

View File

@ -153,6 +153,6 @@
"AliyunOCR": { "AliyunOCR": {
"AccessKeyId": "LTAI5tLfbdZwBoA9bCZVjZkF", "AccessKeyId": "LTAI5tLfbdZwBoA9bCZVjZkF",
"AccessKeySecret": "4DmFIY77zwdp1gaRUTmBMf7WfdsNsC", "AccessKeySecret": "4DmFIY77zwdp1gaRUTmBMf7WfdsNsC",
"Endpoint": "ocr.cn-shanghai.aliyuncs.com" "Endpoint": "ocr-api.cn-hangzhou.aliyuncs.com"
} }
} }

View File

@ -3,10 +3,11 @@ using Furion.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using YD_Event.Core.Options; using YD_Event.Core.Options;
using AlibabaCloud.OpenApiClient.Models; using AlibabaCloud.OpenApiClient.Models;
using AlibabaCloud.SDK.Ocr20191230; using AlibabaCloud.SDK.Ocr_api20210707;
using AlibabaCloud.SDK.Ocr20191230.Models; using AlibabaCloud.SDK.Ocr_api20210707.Models;
using System.Threading.Tasks; using System.Threading.Tasks;
using System; using System;
using Newtonsoft.Json.Linq;
namespace YD_Event.Core.Infrastructure.Aliyun.Ocr; namespace YD_Event.Core.Infrastructure.Aliyun.Ocr;
@ -44,28 +45,38 @@ public class OcrService : ITransient
}; };
var client = new Client(config); var client = new Client(config);
var request = new RecognizeIdentityCardRequest var request = new RecognizeIdcardRequest
{ {
ImageURL = imageUrl, Url = imageUrl
Side = "face" // 默认正面
}; };
// 使用 RuntimeOptions 可以自定义超时等配置,这里简单起见使用默认 var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
var response = await client.RecognizeIdentityCardAsync(request); var response = await client.RecognizeIdcardWithOptionsAsync(request, runtime);
if (response.Body != null && response.Body.Data != null && response.Body.Data.FrontResult != null) if (response.Body != null && !string.IsNullOrEmpty(response.Body.Data))
{ {
var data = response.Body.Data.FrontResult; // Data是一个JSON字符串,包含识别结果
// 解析结果 var json = JObject.Parse(response.Body.Data);
return new OcrResult
// 阿里云 OCR 统一识别 API 身份证返回的结构一般在 data.face.data 下或者直接是平铺的属性
// 我们直接使用 SelectToken 来兼容获取
var name = (string?)json.SelectToken("..data.name") ?? (string?)json.SelectToken("..name") ?? (string?)json.SelectToken("..data.face.data.name");
var sex = (string?)json.SelectToken("..data.sex") ?? (string?)json.SelectToken("..sex") ?? (string?)json.SelectToken("..data.gender");
var idNumber = (string?)json.SelectToken("..data.idNumber") ?? (string?)json.SelectToken("..idNumber");
var birthDate = (string?)json.SelectToken("..data.birthDate") ?? (string?)json.SelectToken("..birthDate");
if (!string.IsNullOrEmpty(idNumber))
{ {
Success = true, return new OcrResult
Name = data.Name, {
Gender = data.Gender, Success = true,
IdCardNumber = data.IDNumber, Name = name,
BirthDate = data.BirthDate, Gender = sex,
Message = "识别成功" IdCardNumber = idNumber,
}; BirthDate = birthDate,
Message = "识别成功"
};
}
} }
return new OcrResult { Success = false, Message = "未识别到有效身份证信息" }; return new OcrResult { Success = false, Message = "未识别到有效身份证信息" };

View File

@ -9,7 +9,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="AlibabaCloud.SDK.Dysmsapi20170525" Version="4.3.0" /> <PackageReference Include="AlibabaCloud.SDK.Dysmsapi20170525" Version="4.3.0" />
<PackageReference Include="AlibabaCloud.SDK.Ocr20191230" Version="4.0.2" /> <PackageReference Include="AlibabaCloud.SDK.Ocr-api20210707" Version="3.1.3" />
<PackageReference Include="Aliyun.OSS.SDK.Core" Version="2.5.3" /> <PackageReference Include="Aliyun.OSS.SDK.Core" Version="2.5.3" />
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" /> <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
<PackageReference Include="EasyCaching.CSRedis" Version="1.9.2" /> <PackageReference Include="EasyCaching.CSRedis" Version="1.9.2" />