此案例主要用于对身份证信息的抓取,可用作身份证信息有源比对等场景。我用的是阿里云上申请的接口,首次购买赠送500次还是很实惠的。


如果在找不到也可以在上面搜索框中搜索。
具体代码:
static void Main(string[] args)
{
//印刷文字识别-身份证识别OCR
String url = "http://dm-51.data.aliyun.com/rest/160601/ocr/ocr_idcard.json";
String appcode = "自己AppCode";
String img_file = @"XX.jpg";//图片本地地址/图片url地址
//如果输入带有inputs, 设置为True,否则设为False
bool is_old_format = false;
//如果没有configure字段,config设为''
//String config = '';
String config = "{\\\"side\\\":\\\"back\\\"}"; //{ "side":"face"}
#身份证正反面类型:face/back //"image":"图片二进制数据的base64编码/图片url"
String method = "POST";
String querys = "";
FileStream fs = new FileStream(img_file, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] contentBytes = br.ReadBytes(Convert.ToInt32(fs.Length));
String base64 = System.Convert.ToBase64String(contentBytes);
String bodys;
if (is_old_format)
{
bodys = "{\"inputs\" :" +
"[{\"image\" :" +
"{\"dataType\" : 50," +
"\"dataValue\" :\"" + base64 + "\"" +
"}";
if (config.Length > 0)
{
bodys += ",\"configure\" :" +
"{\"dataType\" : 50," +
"\"dataValue\" : \"" + config + "\"}" +
"}";
}
bodys += "]}";
}
else
{
bodys = "{\"image\":\"" + base64 + "\"";
if (config.Length > 0)
{
bodys += ",\"configure\" :\"" + config + "\"";
}
bodys += "}";
}
HttpWebRequest httpRequest = null;
HttpWebResponse httpResponse = null;
if (0 < querys.Length)
{
url = url + "?" + querys;
}
if (url.Contains("https://"))
{
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(CheckValidationResult);
httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
}
else
{
httpRequest = (HttpWebRequest)WebRequest.Create(url);
}
httpRequest.Method = method;
httpRequest.Headers.Add("Authorization", "APPCODE " + appcode);
//根据API的要求,定义相对应的Content-Type
httpRequest.ContentType = "application/json; charset=UTF-8";
if (0 < bodys.Length)
{
byte[] data = Encoding.UTF8.GetBytes(bodys);
using (Stream stream = httpRequest.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
try
{
httpResponse = (HttpWebResponse)httpRequest.GetResponse();
}
catch (WebException ex)
{
httpResponse = (HttpWebResponse)ex.Response;
}
if (httpResponse.StatusCode != HttpStatusCode.OK)
{
Console.WriteLine("http error code: " + httpResponse.StatusCode);
Console.WriteLine("error in header: "
+ httpResponse.GetResponseHeader("X-Ca-Error-Message"));
Console.WriteLine("error in body: ");
Stream st = httpResponse.GetResponseStream();
StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));
Console.WriteLine(reader.ReadToEnd());
}
else
{
Stream st = httpResponse.GetResponseStream();
StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));
string rs = reader.ReadToEnd();
Console.WriteLine(rs);
}
Console.WriteLine("\n");
Console.ReadKey();
}
public static bool CheckValidationResult(object sender, X509Certificate certificate,
X509Chain chain, SslPolicyErrors errors)
{
return true;
}
返回示例:
正面返回结果:
{
"address" : "浙江省杭州市余杭区文一西路969号", #地址信息
"config_str" : "{\\\"side\\\":\\\"face\\\"}", #配置信息,同输入configure
"face_rect":{ #人脸位置
"angle": -90, #angle表示矩形顺时针旋转的度数
"center":{ #center表示人脸矩形中心坐标
"x" : 952,
"y" : 325.5
},
"size":{ #size表示人脸矩形长宽
"height":181.99,
"width":164.99
}
},
"card_region":[ #身份证区域位置,四个顶点表示,顺序是逆时针(左上、左下、右下、右上)
{"x":165,"y":657},
{"x":534,"y":658},
{"x":535,"y":31},
{"x":165,"y":30}
],
"face_rect_vertices":[ #人脸位置,四个顶点表示
{
"x":1024.6600341796875,
"y":336.629638671875
},
{
"x":906.66107177734375,
"y":336.14801025390625
},
{
"x":907.1590576171875,
"y":214.1490478515625
},
{
"x":1025.157958984375,
"y":214.63067626953125
}
],
"name" : "张三", #姓名
"nationality": "汉", #民族
"num" : "1234567890", #身份证号
"sex" : "男", #性别
"birth" : "20000101", #出生日期
"is_fake": false, #是否是复印件
"success" : true #识别结果,true表示成功,false表示失败
}
反面返回结果:
{
"config_str" : "{\\\"side\\\":\\\"back\\\"}", #配置信息,同输入configure
"start_date" : "19700101", #有效期起始时间
"end_date" : "19800101", #有效期结束时间
"issue" : "杭州市公安局", #签发机关
"is_fake": false, #是否是复印件
"success" : true #识别结果,true表示成功,false表示失败
}