这是一个使用C#编写的小demo
代码如下
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace OCRDemoByIDCard
{
class Program
{
static void Main(string[] args)
{
//接口地址
string postUrl = "http://recognition.image.myqcloud.com/ocr/idcard";
//正面
string FrontJson = IDCard(postUrl, "");
PrintFront(FrontJson);
//反面
string BehindJson = IDCard(postUrl, "", 1);
PrintBehind(BehindJson);
Console.ReadKey();
}
#region 请求身份证识别
/// <summary>
///
/// </summary>
/// <param name="postUrl">请求地址</param>
/// <param name="photo">身份证图片地址(外网可访问)</param>
/// <param name="card_type">身份证照片类型(正反)</param>
/// <returns></returns>
static string IDCard(string postUrl, string photo, int card_type = 0)
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", OCRApi.HmacSha1Sign());
client.DefaultRequestHeaders.Host = OCRConfig.Host;
string[] numbers = new string[] { photo };
var task = client.PostAsJsonAsync(postUrl, new
{
appid = OCRConfig.appid,
bucket = OCRConfig.bucket,
card_type = card_type,
url_list = numbers
});
task.Wait();
var responseTask = task.Result.Content.ReadAsStringAsync();
responseTask.Wait();
var result = responseTask.Result;
return result.ToString();
}
#endregion
#region 打印正面数据
public static void PrintFront(string Json)
{
JObject result_list = (JObject)JsonConvert.DeserializeObject(Json);
JArray data = (JArray)JsonConvert.DeserializeObject(result_list["result_list"].ToString());
JObject user = (JObject)JsonConvert.DeserializeObject(data[0]["data"].ToString());
Console.WriteLine("------------身份证正面数据-----------");
Console.WriteLine("姓名:" + user["name"].ToString());
Console.WriteLine("性别:" + user["sex"].ToString());
Console.WriteLine("名族:" + user["nation"].ToString());
Console.WriteLine("出生日期:" + user["birth"].ToString());
Console.WriteLine("住址:" + user["address"].ToString());
Console.WriteLine("身份证:" + user["id"].ToString());
}
#endregion
#region 打印反面数据
public static void PrintBehind(string Json)
{
JObject result_list = (JObject)JsonConvert.DeserializeObject(Json);
JArray data = (JArray)JsonConvert.DeserializeObject(result_list["result_list"].ToString());
JObject user = (JObject)JsonConvert.DeserializeObject(data[0]["data"].ToString());
Console.WriteLine("------------身份证反面数据-----------");
Console.WriteLine("签发机关:" + user["authority"].ToString());
Console.WriteLine("有限期限:" + user["valid_date"].ToString());
}
#endregion
}
}
OCRApi
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
namespace OCRDemoByIDCard
{
public class OCRApi
{
/// <summary>
/// 生成随机串,随机串包含字母或数字
/// </summary>
/// <returns> @return 随机串</returns>
public static string GenerateNonceStr()
{
return DateTime.Now.ToString("yyMMddHHmm");
}
/// <summary>
/// 生成当前时间戳
/// 标准北京时间,时区为东八区,自1970年1月1日 0点0分0秒以来的秒数
/// </summary>
/// <returns>@return 时间戳</returns>
public static long GenerateCurrentTimeStamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds);
}
/// <summary>
/// 获取要加密的字符串
/// </summary>
/// <returns></returns>
private static string GetOrignal()
{
var current = GenerateCurrentTimeStamp();
var expired = GenerateCurrentTimeStamp() + 2592000;
return $"a={OCRConfig.appid}&b={OCRConfig.bucket}&k={OCRConfig.secret_id}&e={expired}&t={current}&r={GenerateNonceStr()}&u=0&f=";
}
/// <summary>
/// HMAC-SHA1加密算法
/// </summary>
/// <param name="secret">密钥</param>
/// <returns></returns>
public static string HmacSha1Sign()
{
var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(OCRConfig.secret_key));
var dataBuffer = Encoding.UTF8.GetBytes(GetOrignal());
var hashBytes = hmacsha1.ComputeHash(dataBuffer);
List<byte> bytes = new List<byte>();
bytes.AddRange(hashBytes);
bytes.AddRange(dataBuffer);
return Convert.ToBase64String(bytes.ToArray());
}
}
}
OCRConfig
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OCRDemoByIDCard
{
//根据腾讯所给配置修改下方数据
public class OCRConfig
{
public static string secret_id = "";
public static string secret_key = "";
public static string appid = "";
public static string bucket = "";
public static string Host = "recognition.image.myqcloud.com";
}
}