這是一個(gè)使用C#編寫(xiě)的小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 請(qǐng)求身份證識(shí)別
/// <summary>
///
/// </summary>
/// <param name="postUrl">請(qǐng)求地址</param>
/// <param name="photo">身份證圖片地址(外網(wǎng)可訪問(wèn))</param>
/// <param name="card_type">身份證照片類(lèi)型(正反)</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 打印正面數(shù)據(jù)
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("------------身份證正面數(shù)據(jù)-----------");
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 打印反面數(shù)據(jù)
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("------------身份證反面數(shù)據(jù)-----------");
Console.WriteLine("簽發(fā)機(jī)關(guān):" + 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>
/// 生成隨機(jī)串,隨機(jī)串包含字母或數(shù)字
/// </summary>
/// <returns> @return 隨機(jī)串</returns>
public static string GenerateNonceStr()
{
return DateTime.Now.ToString("yyMMddHHmm");
}
/// <summary>
/// 生成當(dāng)前時(shí)間戳
/// 標(biāo)準(zhǔn)北京時(shí)間布疙,時(shí)區(qū)為東八區(qū),自1970年1月1日 0點(diǎn)0分0秒以來(lái)的秒數(shù)
/// </summary>
/// <returns>@return 時(shí)間戳</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
{
//根據(jù)騰訊所給配置修改下方數(shù)據(jù)
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";
}
}