今天给大家分享一下,这几天调用身份证认证API的流程。在此是使用nodejs写的后台。
前提
1.我们需要使用是百度的API,你就必须有一个百度智能云的账号。直接百度可能找不到!在此,附上网址链接:login.bce.baidu.com
2.注册在此不过多赘述,登录成功后跳转到如下界面:
3. 点击产品服务-人工智能-文字识别。4. 点击进入如下界面。5. 因为我已经创建了一个应用,在此,大家可以点击创建应用,填写以下名称,一切默认,点击立即创建即可。6. 在你的应用列表里就会出现一个应用。在接下来你要使用的AppID、Appkey、Secret Key都在此复制。
安装
- 我选择的是Node-SDK安装,再调用接口。安装Node-SDK方法很多,你可以到官网上去下载然后把你所需要的拖到自己的文件中,你也可以到GitHub上搜索下载。
- 我选择的是直接在安装好的node_modules基础上,直接输入命令:npm install baidu-aip-sdk。
调用
- 我是直接使用npm命令导入baidu-aip-sdk模块,所以,在此之前默认项目框架已经搭建完好。(采用MVC结构)目录大致如下:
- 为方便使用,就不在此再创建文件,在你所需要认证的文件内,直接新建对象。(我是在个人中心的应用层中写入)。
- 在应用层内调用baidu-aip-sdk模块,设置APPID/AK/SK。以下步骤均在应用层操作。
var AipOcrClient = require("baidu-aip-sdk").ocr; // 设置APPID/AK/SK var APP_ID = "你的 App ID"; var API_KEY = "你的 Api Key"; var SECRET_KEY = "你的 Secret Key"; // 新建一个对象,建议只保存一个对象调用服务接口 var client = new AipOcrClient(APP_ID, API_KEY, SECRET_KEY); var HttpClient = require("baidu-aip-sdk").HttpClient; // 设置request库的一些参数,例如代理服务地址,超时时间等 // request参数请参考 https://github.com/request/request#requestoptions-callback HttpClient.setRequestOptions({timeout: 5000}); // 也可以设置拦截每次请求(设置拦截后,调用的setRequestOptions设置的参数将不生效), // 可以按需修改request参数(无论是否修改,必须返回函数调用参数) // request参数请参考 https://github.com/request/request#requestoptions-callback HttpClient.setRequestInterceptor(function(requestOptions) { // 查看参数 console.log(requestOptions) // 修改参数 requestOptions.timeout = 5000; // 返回参数 return requestOptions; });
- 上传身份证正面。首先需要完成能够上传图片的基础上,再进行身份证识别。上传图片路由、应用层:
//router文件 router.post('/idCardFront', function(req, res, next) { userController.idCardFront(req, res) }) //controllerse文件 idCardFront: function(req, res) { var form = new formidable.IncomingForm() //创建上传表单对象 form.uploadDir = path.join(__dirname, '..', '/public/idCard') //设置上传文件的路径 form.keepExtensions = true //设置保留上传文件的扩展名 form.parse(req, function(err, fields, files) { if (err) { res.send('头像上传错误!') } console.log('...................') //fields是上传的表单字段数组,files是上传的文件列表 // console.log(files) //保存图片路径到数据库 //1.获取当前用户编号 let userId = req.user[0].base_info_Id //2.获取当前用户的图片名称 let headPic = path.parse(files.file.path).base // console.log('jpg格式:' + headPic) // console.log(files.file.path) res.json({ code: 200, data:headPic, msg: '身份证上传成功!审核通过!' }) }) }
- 在识别身份证之前,需要将你存在服务器的图片读取并以base64格式显示。
//读取服务器文件,以base64显示 let filePath = files.file.path let bitmap = fs.readFileSync(filePath); let image = Buffer.from(bitmap, 'binary').toString('base64');
- 调用百度接口。
client.idcard(image, idCardSide).then(function(result) { results = JSON.stringify(result) console.log(results) var id = {} res.json({ code: 200, data: results, msg:'身份证上传成功!审核通过!' }) }).catch(function(err) { // 如果发生网络错误 console.log(err); res.json({ code: 200, msg: '身份证上传成功!审核不通过!' }) });
7.运行postman,传入图片,进行身份证识别。
可以在服务器看到身份证上的信息代表认证成功!在此附上标准认证成功返回的json格式:
{ "log_id": 2648325511, "direction": 0, "image_status": "normal", "idcard_type": "normal", "edit_tool": "Adobe Photoshop CS3 Windows", "words_result": { "住址": { "location": { "left": 267, "top": 453, "width": 459, "height": 99 }, "words": "南京市江宁区弘景大道3889号" }, "公民身份号码": { "location": { "left": 443, "top": 681, "width": 589, "height": 45 }, "words": "330881199904173914" }, "出生": { "location": { "left": 270, "top": 355, "width": 357, "height": 45 }, "words": "19990417" }, "姓名": { "location": { "left": 267, "top": 176, "width": 152, "height": 50 }, "words": "伍云龙" }, "性别": { "location": { "left": 269, "top": 262, "width": 33, "height": 52 }, "words": "男" }, "民族": { "location": { "left": 492, "top": 279, "width": 30, "height": 37 }, "words": "汉" } }, "words_result_num": 6 }
这样,身份认证就完成啦!
作者:ClyingDeng
链接:https://juejin.cn/post/6844903952090136590
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。