基于SpringBoot调用百度ocr以及企查查接口实现对营业执照信息的提取并识别真伪
1、application.yml
#企查查配置
qichacha:
key: 60f3fb2adac94455bc49652c6090974d
secret: 3C09698691DCF8F45EB71317F1A25CCC
2、Controller层接口
@Autowired
private IMailService mailService;
@Value("${qichacha.key}")
private String key;
@Value("${qichacha.secret}")
private String secret;
/**
* 营业执照识别真伪
*/
@GetMapping("business_license")
public BusinessLicInfo businessLicense(){
//获取本地的绝对路径图片
File file = new File("D:\\3.png");
//进行BASE64位编码
String imageBase = BASE64.encodeImgageToBase64(file);
imageBase = imageBase.replaceAll("\r\n", "");
imageBase = imageBase.replaceAll("\\+", "%2B");
//百度云的文字识别接口,后面参数为获取到的token
String httpUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/business_license?access_token="+BaiDuOCR.getAuth();
//id_card_side=front 识别正面 id_card_side=back 识别背面
String httpArg = "detect_direction=true&id_card_side=front&image=" + imageBase;
String jsonResult = BaiDuOCR.request(httpUrl, httpArg);
System.out.println("返回的结果--------->" + jsonResult);
HashMap<String, String> map = BaiDuOCR.getBusniessLicHashMap(jsonResult);
BusinessLicInfo businessLicInfo = new BusinessLicInfo();
businessLicInfo.setAddress(map.get("地址"));
businessLicInfo.setCeo(map.get("法人"));
businessLicInfo.setCode(map.get("证件编号"));
businessLicInfo.setCompanyName(map.get("单位名称"));
businessLicInfo.setCreditId(map.get("社会信用代码"));
businessLicInfo.setDate(map.get("有效期"));
businessLicInfo.setType(map.get("类型"));
//判断营业执照的真伪
String url = "http://api.qichacha.com/ECIMatch/CompanyVerify?key=" + key + "&dtype=json" + "®No=" + businessLicInfo.getCreditId()
+ "&companyName=" + businessLicInfo.getCompanyName() + "&frname=" + businessLicInfo.getCeo();
int timestamp = DateUtil.getSecondTimestamp(new Date());
try {
String result = HttpClientUtil.doGet(url, MD5Util.MD5(key+timestamp+secret),timestamp+"");
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
return businessLicInfo;
}
3、相关工具类
3.1 DateUtils
import java.util.Date;
public class DateUtil {
public static int getSecondTimestamp(Date date){
if (null == date) {
return 0;
}
String timestamp = String.valueOf(date.getTime());
int length = timestamp.length();
if (length > 3) {
return Integer.valueOf(timestamp.substring(0,length-3));
} else {
return 0;
}
}
}
3.2 Http请求工具类
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class HttpClientUtil {
/**
* 带参数的get请求
* @param url
* @param param
* @return String
*/
public static String doGet(String url, Map<String, String> param) {
// 创建Httpclient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
String resultString = "";
CloseableHttpResponse response = null;
try {
// 创建uri
URIBuilder builder = new URIBuilder(url);
if (param != null) {
for (String key : param.keySet()) {
builder.addParameter(key, param.get(key));
}
}
URI uri = builder.build();
// 创建http GET请求
HttpGet httpGet = new HttpGet(uri);
// 执行请求
response = httpclient.execute(httpGet);
// 判断返回状态是否为200
if (response.getStatusLine().getStatusCode() == 200) {
resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (response != null) {
response.close();
}
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
/**
* 带参数的get请求
* @param url
* @param param
* @return String
*/
public static String doGet(String url,String token,String timeSpan,Object o) {
// 创建Httpclient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
String resultString = "";
CloseableHttpResponse response = null;
try {
// 创建uri
URIBuilder builder = new URIBuilder(url);
URI uri = builder.build();
// 创建http GET请求
HttpGet httpGet = new HttpGet(uri);
//添加header 头
httpGet.setHeader("Token",token);
httpGet.setHeader("Timespan",timeSpan);
// 执行请求
response = httpclient.execute(httpGet);
// 判断返回状态是否为200
if (response.getStatusLine().getStatusCode() == 200) {
resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (response != null) {
response.close();
}
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
//
// /**
// * 不带参数的get请求
// * @param url
// * @return String
// */
// public static String doGet(String url) {
// return doGet(url, null);
// }
/**
* 不带参数的get请求
*
* @param s
* @param url
* @return String
*/
public static String doGet(String url, String token, String timeSpan) {
return doGet(url, token,timeSpan,null);
}
/**
* 带参数的post请求
* @param url
* @param param
* @return String
*/
public static String doPost(String url, Map<String, String> param) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url);
// 创建参数列表
if (param != null) {
List<NameValuePair> paramList = new ArrayList<>();
for (String key : param.keySet()) {
paramList.add(new BasicNameValuePair(key, param.get(key)));
}
// 模拟表单
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
httpPost.setEntity(entity);
}
// 执行http请求
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
/**
* 不带参数的post请求
* @param url
* @return String
*/
public static String doPost(String url) {
return doPost(url, null);
}
/**
* 传送json类型的post请求
* @param url
* @param json
* @return String
*/
public static String doPostJson(String url, String json) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url);
// 创建请求内容
StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
// 执行http请求
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
}
至于百度OCR的调用可以参考我的上一边博文基于SpringBoot调用百度ocr实现图片的文字识别功能