文章目录

  • 一、拍照
  • 二、上传
  • 三、识别
  • 四、实际演示

为了减轻采集身份证信息时频繁输入的负担,有必要开发出直接获取身份证信息的功能,打开小程序开发指南,搜索发现恰好有相关API提供
整个操作可分为三步走,首先用相机对身份证拍照或者选择手机上已拍好的身份证照片,然后把身份证照片上传到微信小程序服务器,当然如果有自己的服务器最好上传到自己的服务器,最后调用ocr识别模块进行信息识别

一、拍照

核心方法:wx.chooseImage(Object object)

<view bindtap = "chooseImg"><text>选择照片</text></view>
chooseImg: function () {var self = thiswx.chooseImage({count: 1,sizeType: ['original', 'compressed'],sourceType: ['album', 'camera'],success(res) {// tempFilePath可以作为img标签的src属性显示图片,回调结果const tempFilePaths = res.tempFilePaths// ["http://tmp/f3zhptK14bYufe32ad6da213512bffb42e2069144d58.png"]console.log(tempFilePaths )// 后续操作见第二步操作【上传】}})},

二、上传

核心方法1:wx.cloud.uploadFile

PS:UploadTask wx.uploadFile(Object object)
如果开发者有自己的服务器的话,可以使用此方法将图片上传到开发者服务器以保证数据安全和维护方便

为了生成一个唯一的文件名,需要用到uuid,而uuid是在utils中的一个工具类方法

const wxuuid = function () {var s = [];var hexDigits = "0123456789abcdef";for (var i = 0; i < 36; i++) {s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);}s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01s[8] = s[13] = s[18] = s[23] = "-";var uuid = s.join("");return uuid}
module.exports = {wxuuid: wxuuid
}

也可以直接截取文件名

const name = tempFilePaths[0].substr(tempFilePaths[0].indexOf('tmp') + 4,tempFilePaths[0].length)

建议还是使用uuid方式

var util = require('../../utils/util.js');

此处代码接第一步操作

     // 由于count等于1,所以此处的tempFilePaths数组长度只有1const suffix = tempFilePaths[0].substr(tempFilePaths[0].lastIndexOf('.'),tempFilePaths[0].length)// 得到选择图片的后缀名后,加上uuid则组成了待上传的文件名const newName = util.wxuuid() + suffixwx.cloud.uploadFile({cloudPath: newName ,filePath: tempFilePaths[0], // 文件路径success: res => {// get resource ID console.log(res.fileID)// 此处要得到图片的url,就需要用fileID去换this.getUrlById(res.fileID)},fail: err => {// handle errorconsole.log(err)}})

核心方法2:Cloud.getTempFileURL(fileList: string[]): Promise

getUrlById:function(resId){var self = thiswx.cloud.getTempFileURL({fileList: [{fileID: resId,maxAge: 60 * 60, // one hour}]}).then(res => {// get temp file URLconsole.log(res.fileList[0].tempFileURL)// 后续操作见第三步操作【识别】this.getSfz(res.fileList[0].tempFileURL)}).catch(error => {// handle error})},

三、识别

核心方法:ocr.idcard

微信小程序ocr可识别银行卡、身份证、驾驶证、行驶证、营业执照等,本文仅以身份证识别为例。


注意:使用说明中明确表明免费额度100次/天,但是普通个人开发者想要使用免费额度的话也得走服务市场购买免费额度才能正常使用,否则会报如下错误

{"errMsg":"cloud.callFunction:ok","result":{"errCode":101003,"errMsg":"openapi.ocr.idcard:fail not enough market quota hint: [R0ZEGa03053705] rid: 60349ef9-77517716-18d8122a"},"requestID":"66fc3287-759f-11eb-8a74-525400a255c0"
}

购买时需要指定一个小程序



购买成功后,免费额度方可正常使用

如果使用开发文档中默认的值imgUrl: ‘ENCODE_URL’,则会报如下错误

{"errMsg":"cloud.callFunction:ok","result":{"errCode":101000,"errMsg":"openapi.ocr.idcard:fail invalid image url hint: [5Fd9Va07430396] rid: 6034a0af-3674090a-33369c90"},"requestID":"6bfc6c3c-75a0-11eb-aa81-525400b84760"
}

此时我们把图片url改成一个百度的图片地址,不带身份证信息的,比如这张https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1742408536,1078898080&fm=26&gp=0.jpg,那么就会报如下错误

{"errMsg":"cloud.callFunction:ok","result":{"errCode":101001,"errMsg":"openapi.ocr.idcard:fail certificate not found hint: [b5J7va09763705] rid: 6034a198-149dec4a-0d4ad930"},"requestID":"f7226d85-75a0-11eb-b8fc-5254001c5def"
}

最后只要我们把图片url换成有身份证信息的地址,那么就能识别成功

此处代码接第二步操作

 getSfz: function (url) {wx.cloud.init({traceUser: true})wx.cloud.callFunction({name: 'getOcrSfz',data: {imgUrl: url, // 传给云函数的参数},complete: res => {console.log('getSfz=' + JSON.stringify(res))}})},

此处是调用的云函数getOcrSfz,云函数记得执行【上传并部署:云端安装依赖】操作
config.json

{"permissions": {"openapi": ["ocr.idcard"]}
}

index.js

// 云函数入口文件
const cloud = require('wx-server-sdk')cloud.init()// 云函数入口函数
exports.main = async (event, context) => {try {let imgUrl = event.imgUrl;const result = await cloud.openapi.ocr.idcard({type: 'photo',imgUrl: imgUrl})return result} catch (err) {return err}
}

四、实际演示

我们在网上找了一张测试用的身份证照片,通过选择照片-上传照片-识别照片三步走之后得到的信息如下

{"errMsg":"cloud.callFunction:ok","result":{"type":"Front","name":"奥巴马","id":"123456196108047890","addr":"华盛顿特区宜宾法尼亚大道1600号白宫","gender":"男","nationality":"青尼汉","birth":"1961-8-4","cardProperty":1,"errMsg":"openapi.ocr.idcard:ok","errCode":0},"requestID":"02180070-7644-11eb-ae53-525400fbcc42"
}

从以上信息可以看到,除了民族识别错误,其他都是正确的,根据本人亲测,只要使用有效的身份证照片来识别的话,那么识别的结果都是正确无误的

【微信小程序】身份证拍照、上传并OCR识别相关推荐

  1. php微信小程序多图上传,tp5实现微信小程序多图片上传到服务器功能

    最近在做一个教育类的小商城的微信小程序,用到了上传多个图片文件到服务器端,这里做一个讲解,希望对大家有所帮助. 1,小程序端: 在wxml文件中: 删除 点击上传作业 在js文件中: Page({ / ...

  2. uniapp 微信小程序开发 图片上传压缩

    uniapp 微信小程序开发 图片上传压缩 安卓上传图片并压缩 思路 全部代码 安卓上传图片并压缩 由于后端接口对图片的大小有限制,所以在上传图片是需要压缩处理: uni.chooseImage({c ...

  3. 微信小程序之文件上传PHP后台接收

    微信小程序之文件上传(word,excel图片等) 微信前台代码 .html <!--pages/demo4/demo4.wxml--> <view class="cont ...

  4. 微信开发上传视频到服务器,微信小程序中实现上传视频的开发代码

    微信小程序中实现上传视频的开发代码,视频,接口,上传,代码,服务器 微信小程序中实现上传视频的开发代码 易采站长站,站长之家为您整理了微信小程序中实现上传视频的开发代码的相关内容. 本篇文章给大家带来 ...

  5. Flask与微信小程序之文件上传与显示

    文章目录 Flask与微信小程序之文件上传与显示 背景 flask_uploads应用 flask_uploads的使用步骤 1 安装flask-uploads模块 2 在文件夹中导入需要用到的库 3 ...

  6. 微信小程序实现录音上传

    微信小程序实现录音上传 准备 开始 准备 1.微信开发者工具 2.Api文档 开始 打开微信开发者工具 项目->新建项目 选择小程序 appid是在微信公众平台申请的. 链接 新建完成后,项目自 ...

  7. 微信小程序媒体文件上传到微信服务器

    微信小程序媒体文件上传到微信服务器官方给出的事例如下: curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/up ...

  8. 微信小程序上传多张图片到服务器,怎么在微信小程序中同时上传多张图片

    怎么在微信小程序中同时上传多张图片 发布时间:2021-04-16 18:05:52 来源:亿速云 阅读:99 作者:Leah 今天就跟大家聊聊有关怎么在微信小程序中同时上传多张图片,可能很多人都不太 ...

  9. 微信小程序多文件上传之wx-multipart

    微信小程序多文件上传之wx-multipart 前言:我后端写了个多文件上传接口,奈何前端同事说微信小程序只能单文件上传,要支持多文件上传还要我单独再写一个单文件上传的接口,我他喵- 我看了下微信小程 ...

  10. php微信上传视频文件在哪里,微信小程序中实现上传视频的开发代码

    本篇文章给大家带来的内容是关于微信小程序中实现上传视频的开发代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 其实这个比较简单,官方提供了API接口,基本上直接调用就可以了,话不多 ...

最新文章

  1. Java Day01-2
  2. 城市追风口,车企“缉拿”路测牌照
  3. python 贴吧自动回复机-python借助wxpy与图灵实现微信机器人自动回复消息
  4. 最简单实现多线程的方法(Thread)
  5. 【pmcaff】其实一直有一个人在默默关注你
  6. twitter storm源码走读(二)
  7. [机器学习]回归--(Simple LR and Multiple LR)
  8. C# 获取文件MD5值的方法
  9. Vue系列vue-router的参数传递的两种方式(五)
  10. devops_面向内向的人的DevOps
  11. Android 系统(18)---Handler,MessageQueue与Looper关系
  12. window上mysql的配置文件_windows系统中,MySQL配置文件my.ini在哪里?
  13. 常见视频接口知识点汇总(精华)
  14. 100流明相当于多少w_lx和瓦数换算(1lx等于多少w)
  15. html顺势正旋转360度,庞明:混元太极揉球
  16. python快速实现数字华容道小游戏
  17. 树莓派homebridge开机启动和后台运行
  18. Matlab打开绘图工具
  19. 【Redis】基础篇
  20. 新电脑win10 改win7 要注意

热门文章

  1. 用c语言在Clion平台编写system(“cls“)清屏函数无效甚至异常解决方法。
  2. 贪吃蛇游戏设计(一)————游戏策划
  3. Python基础语法(if语句)
  4. html5双日期时间选择控件,bootstrap daterangepicker双日历时间段选择控件详解
  5. 用人话讲明白AHP层次分析法(非常详细原理+简单工具实现)
  6. 关于字体的一些知识,以及分享一些免费可商用字体
  7. 快速将多个excel表合并成一个excel表---内附代码
  8. 单智能体、多智能体强化学习基本概念及算法分类?为啥提出多智能体强化学习,现状?
  9. 内定抽奖小程序_excel怎么制作抽奖小程序?
  10. 观CSDN网站小Bug有感