身份证识别配置

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": {
"AccessKeyId": "LTAI5tLfbdZwBoA9bCZVjZkF",
"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 YD_Event.Core.Options;
using AlibabaCloud.OpenApiClient.Models;
using AlibabaCloud.SDK.Ocr20191230;
using AlibabaCloud.SDK.Ocr20191230.Models;
using AlibabaCloud.SDK.Ocr_api20210707;
using AlibabaCloud.SDK.Ocr_api20210707.Models;
using System.Threading.Tasks;
using System;
using Newtonsoft.Json.Linq;
namespace YD_Event.Core.Infrastructure.Aliyun.Ocr;
@ -44,28 +45,38 @@ public class OcrService : ITransient
};
var client = new Client(config);
var request = new RecognizeIdentityCardRequest
var request = new RecognizeIdcardRequest
{
ImageURL = imageUrl,
Side = "face" // 默认正面
Url = imageUrl
};
// 使用 RuntimeOptions 可以自定义超时等配置,这里简单起见使用默认
var response = await client.RecognizeIdentityCardAsync(request);
var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
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;
// 解析结果
return new OcrResult
// Data是一个JSON字符串,包含识别结果
var json = JObject.Parse(response.Body.Data);
// 阿里云 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,
Name = data.Name,
Gender = data.Gender,
IdCardNumber = data.IDNumber,
BirthDate = data.BirthDate,
Message = "识别成功"
};
return new OcrResult
{
Success = true,
Name = name,
Gender = sex,
IdCardNumber = idNumber,
BirthDate = birthDate,
Message = "识别成功"
};
}
}
return new OcrResult { Success = false, Message = "未识别到有效身份证信息" };

View File

@ -9,7 +9,7 @@
</ItemGroup>
<ItemGroup>
<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="AspNetCoreRateLimit" Version="5.0.0" />
<PackageReference Include="EasyCaching.CSRedis" Version="1.9.2" />