基于WPF和腾讯OCR的身份证照片转Excel方案

应用场景
-
企业人事管理:新员工入职时批量录入数百份身份证信息,传统手动录入易出错且耗时。通过OCR自动提取姓名、身份证号等字段,生成结构化Excel表格,效率提升10倍以上。
-
政务档案数字化:社区需将纸质身份证档案电子化。扫描后通过多区域OCR识别,自动校验身份证号有效性(如18位校验码),输出带户籍地址的表格,准确率可达98%。
-
金融开户审核:银行需核验客户身份证真实性。系统自动提取证件信息并与公安系统接口比对,标记异常数据(如过期证件),减少人工复核工作量。
界面设计

<Grid>
<!-- 文件选择区 -->
<StackPanel Orientation="Horizontal" Margin="10">
<Button Content="添加图片" Click="BtnAddImages_Click"/>
<Button Content="添加文件夹" Click="BtnAddFolder_Click"/>
</StackPanel>
<!-- 预览区 -->
<DataGrid x:Name="dgResults" AutoGenerateColumns="False" Margin="10">
<DataGrid.Columns>
<DataGridTextColumn Header="序号" Binding="{Binding Index}"/>
<DataGridTextColumn Header="姓名" Binding="{Binding Name}"/>
<DataGridTextColumn Header="身份证号" Binding="{Binding IdNumber}" Width="200"/>
<DataGridTemplateColumn Header="预览">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Thumbnail}" Height="40"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<!-- 操作区 -->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="10">
<Button Content="开始识别" Click="BtnRecognize_Click"/>
<Button Content="导出Excel" Click="BtnExport_Click"/>
</StackPanel>
</Grid>
详细代码步骤
1. 准备工作
- 注册腾讯云账号并获取OCR服务的SecretId和SecretKey
- 在WPF项目中安装TencentCloud.SDK.OCR NuGet包
2. 核心代码实现
腾讯OCR调用
public async Task<IdCardInfo> RecognizeIdCard(string imagePath)
{
var cred = new Credential("Your_SecretId", "Your_SecretKey");
var client = new OcrClient(cred, "ap-guangzhou");
var req = new IDCardOCRRequest {
ImageBase64 = Convert.ToBase64String(File.ReadAllBytes(imagePath)),
CardSide = "FRONT" // 识别正面
};
var resp = await client.IDCardOCR(req);
return new IdCardInfo {
Name = resp.Name,
IdNumber = resp.IdNum,
Address = resp.Address,
// 其他字段...
};
}
批量处理逻辑
private async void BtnRecognize_Click(object sender, RoutedEventArgs e)
{
var imageFiles = Directory.GetFiles(selectedFolder, "*.jpg")
.Concat(Directory.GetFiles(selectedFolder, "*.png"));
var results = new List<IdCardInfo>();
int index = 1;
foreach(var file in imageFiles)
{
var result = await RecognizeIdCard(file);
result.Index = index++;
result.Thumbnail = LoadThumbnail(file);
results.Add(result);
}
dgResults.ItemsSource = results;
}
导出Excel
private void BtnExport_Click(object sender, RoutedEventArgs e)
{
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add("身份证信息");
// 添加表头
worksheet.Cell(1, 1).Value = "序号";
worksheet.Cell(1, 2).Value = "姓名";
worksheet.Cell(1, 3).Value = "身份证号";
// 其他字段...
// 填充数据
int row = 2;
foreach(var item in dgResults.ItemsSource as IEnumerable<IdCardInfo>)
{
worksheet.Cell(row, 1).Value = item.Index;
worksheet.Cell(row, 2).Value = item.Name;
worksheet.Cell(row, 3).Value = item.IdNumber;
// 其他字段...
row++;
}
workbook.SaveAs("身份证信息.xlsx");
}
}
总结与优化
优点
- 高效处理:可一次性处理大量身份证图片,显著提高工作效率
- 准确性高:腾讯OCR识别准确率可达99%以上
- 结构化输出:自动整理为结构化数据并导出Excel
- 可视化界面:友好的用户界面,操作简单直观
优化建议
-
性能优化:
- 使用多线程并行处理不同图片的识别任务
- 添加进度条显示处理进度
-
错误处理:
- 添加详细的错误日志记录
- 对识别失败的图片提供重试机制
-
用户体验:
- 添加图片质量检测功能,提前过滤模糊图片
- 实现拖拽添加文件功能
-
功能扩展:
- 添加身份证有效性校验功能
- 支持其他证件类型识别(如驾驶证、行驶证)
-
安全优化:
- 对敏感信息进行脱敏处理
- 加密存储身份证信息
通过上述方案,可以高效地将大量手机拍摄的身份证信息转换为Excel表格数据,大幅提升工作效率并减少人工错误