更新记录

1.0.0(2026-10-31)

  • 新增华视蓝牙身份证读卡器支持:初始化、按 MAC 直连 / 自动扫描连接
  • 新增循环读卡,支持居民身份证、港澳台居民居住证、外国人永久居留身份证
  • 支持读取证件头像并以 JPEG Base64 data URI 返回
  • 支持连接状态查询、断线自动重连开关、断开连接与资源释放

平台兼容性

uni-app(4.72)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Safari app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS 鸿蒙
√ 1.0.0 √ 1.0.0 × × √ 1.0.0 √ 1.0.0 6.0 1.0.0 × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × - × × × × - × ×

uni-app x(4.72)

Chrome Safari Android Android插件版本 iOS 鸿蒙 微信小程序
× × 6.0 1.0.0 × × ×

插件介绍

安卓华视蓝牙身份证读卡器 UTS 原生插件。手机通过蓝牙连接华视蓝牙身份证读卡器,读取证件文字信息与头像(Base64),无需 USB OTG 与读卡器驱动。

支持 uni-app 与 uni-app x,插件已内置读卡器通信协议与头像解码库,无需额外集成任何库。

支持的证件类型:

certType 证件类型
" "(空格) 居民身份证
"J" 港澳台居民居住证
"I" 外国人永久居留身份证
"Y" 外国人永久居留身份证(2017 版)

使用场景

  • 酒店 / 公寓前台实名登记,读取身份证自动填充入住人信息
  • 园区门禁、访客机、自助终端刷证登记与留档
  • 物流寄递、金融柜面、医疗挂号的实名核验
  • 需要采集证件头像(Base64)做本地留存的业务

使用流程

  1. 初始化:initModule() 申请蓝牙 / 定位权限并初始化读卡器,权限未授权时会自动弹窗,授权后再次调用即可。
  2. 连接:connect({ mac }) 按 MAC 直连;不传 mac 或直连失败时自动扫描连接(scanTimeout 默认 20000 毫秒)。
  3. 读卡:startAutoRead({ onEvent }) 启动循环读卡,读到证件后 onEvent 回调 event='card' 与证件信息。
  4. 停止读卡:stopAutoRead(),读卡线程会回调一次 event='stopped'。
  5. 断开与释放:disconnect() 断开连接(同时释放读卡器实例),release() 释放全部资源,建议在页面 onUnload 调用 release()。

运行须知:插件内含原生解码库(lib_HS_idcard、lib_HS_100NMLin),必须打自定义基座运行(标准基座不含该依赖);读卡器需先与手机蓝牙配对或在附近可被扫描到。

用法

import {
    initModule,
    connect,
    startAutoRead,
    stopAutoRead,
    disconnect,
    enableReconnect,
    getBlueState,
    release
} from '@/uni_modules/zy-huashi-idcard'

初始化

initModule({
    success: (res) => {
        // res.workPath:解码数据目录;res.errMsg:结果描述
        console.log('初始化成功 ' + res.workPath)
    },
    fail: (err) => {
        // 首次调用通常返回 9230003(权限弹窗已弹出),授权后重新调用即可
        console.log('初始化失败 ' + err.errCode + ' ' + err.errMsg)
    }
})

连接读卡器

// 按 MAC 直连(直连失败会自动转扫描连接;MAC 格式需为 XX:XX:XX:XX:XX:XX,格式非法返回 9230001)
connect({
    mac: '00:11:22:33:44:55',
    scanTimeout: 20000, // 可选,扫描超时(毫秒),默认 20000
    success: (res) => console.log('已连接 ' + res.mac),
    fail: (err) => console.log('连接失败 ' + err.errCode + ' ' + err.errMsg)
})

// 不传 mac:直接扫描附近读卡器并连接
connect({
    success: (res) => console.log('已连接 ' + res.mac),
    fail: (err) => console.log('连接失败 ' + err.errCode + ' ' + err.errMsg)
})

循环读卡

startAutoRead({
    interval: 1000, // 可选,两次读卡间隔(毫秒),默认 1000,最小 100
    onEvent: (res) => {
        // res.event 取值:'started' 已启动 | 'card' 读到证件 | 'stopped' 已停止
        if (res.event === 'card') {
            const card = res.card
            console.log(card.name + ' ' + card.idCard + ' ' + card.certTypeText)
            // card.photo 可直接给 <image :src="card.photo"> 使用
        }
    },
    success: (res) => console.log('读卡已启动'),
    fail: (err) => console.log('启动失败 ' + err.errCode + ' ' + err.errMsg)
})

// 停止循环读卡
stopAutoRead({
    success: (res) => console.log('已停止')
})

连接状态与断线重连

getBlueState({
    success: (res) => {
        // res.state:0 连接正常 | 1 断开连接 | 2 休眠 | 3 断线重连中 | -1 未初始化
        console.log(res.state + ' ' + res.stateText)
    }
})

// 开启 / 关闭断线自动重连
enableReconnect({
    enable: true,
    success: (res) => console.log('断线重连 ' + (res.enabled ? '已开启' : '已关闭')),
    fail: (err) => console.log('设置失败 ' + err.errCode + ' ' + err.errMsg)
})

断开与释放

// 断开连接(读卡器实例随之释放,再次使用需重新 initModule → connect)
disconnect({
    success: (res) => console.log('已断开')
})

// 释放全部资源(建议在页面 onUnload 调用)
release({
    success: (res) => console.log('资源已释放')
})

插件方法

方法 说明 回调
initModule(options?) 申请蓝牙 / 定位权限并初始化读卡器 成功:HsInitResult
connect(options) 连接读卡器,mac 为空时直接扫描连接 成功:HsConnectResult
startAutoRead(options) 开始循环读卡,读到证件通过 onEvent 回调 启动结果一次性回调;证件数据多次回调
stopAutoRead(options?) 停止循环读卡 成功:HsSimpleResult
disconnect(options?) 断开连接(同时停止循环读卡) 成功:HsSimpleResult
enableReconnect(options) 开启 / 关闭断线自动重连 成功:HsReconnectResult
getBlueState(options?) 查询读卡器连接状态 成功:HsBlueStateResult
release(options?) 释放全部资源 成功:HsSimpleResult

所有方法失败时回调 fail(err),err 为 UniError,含 errSubject、errCode、errMsg。

回调结构

// HsInitResult(initModule.success)
{
    workPath: '', // string,解码数据目录
    errMsg: ''    // string,结果描述
}

// HsConnectResult(connect.success)
{
    mac: '',      // string,已连接读卡器的蓝牙地址
    errMsg: ''
}

// HsReadEvent(startAutoRead.onEvent)
{
    event: '',    // string,'started' | 'card' | 'stopped'
    card: null    // HsIdCardInfo | null,仅 event='card' 时有值
}

// HsBlueStateResult(getBlueState.success)
{
    state: 0,          // number,0 连接正常 | 1 断开连接 | 2 休眠 | 3 断线重连中 | -1 未初始化
    stateText: '',     // string,状态描述
    errMsg: ''
}

// HsReconnectResult(enableReconnect.success)
{
    enabled: false,    // boolean,当前断线重连开关状态
    errMsg: ''
}

// HsSimpleResult(stopAutoRead / disconnect / release 的 success)
{
    errMsg: ''
}

证件信息字段(HsIdCardInfo)

所有字段均为字符串,无值时为 '',无需判空。

{
    certType: '',        // string,' '(空格)居民身份证 | 'J' 港澳台居住证 | 'I' / 'Y' 外国人永久居留证
    certTypeText: '',    // string,证件类型名称,如「居民身份证」
    name: '',            // string,姓名
    sex: '',             // string,性别
    nation: '',          // string,民族(居民身份证)
    birth: '',           // string,出生日期 yyyy-MM-dd
    address: '',         // string,住址(居民身份证、港澳台居住证)
    idCard: '',          // string,证件号码
    department: '',      // string,签发机关
    startDate: '',       // string,有效期限起始日期
    endDate: '',         // string,有效期限截止日期(长期为「长期」)
    issuesNum: '',       // string,签发次数(港澳台居住证、2017 版外国人永久居留证)
    passCheckID: '',     // string,通行证号码(港澳台居住证)
    cnName: '',          // string,中文姓名(外国人永久居留证)
    nationCode: '',      // string,国籍代码(外国人永久居留证)
    standbyEName: '',    // string,备用英文名(2017 版外国人永久居留证)
    oldIdCardNumber: '', // string,原证件号码(2017 版外国人永久居留证)
    photo: ''            // string,头像 JPEG 的 data URI(data:image/jpeg;base64,xxx),解码失败为 ''
}

错误码

错误码 说明
9230001 参数错误
9230002 读卡器未初始化,请先调用 initModule
9230003 缺少蓝牙或定位权限,请授权后重新调用 initModule
9230004 蓝牙未开启或不可用,请打开系统蓝牙后重试
9230005 连接读卡器失败,请确认读卡器已开机且在附近
9230006 读卡器已连接,无需重复连接
9230007 读卡器未连接,请先调用 connect
9230008 已在循环读卡中,请先调用 stopAutoRead
9230009 应用上下文获取失败
9230010 操作失败

权限说明

权限 用途
android.permission.BLUETOOTH Android 12 以下使用蓝牙
android.permission.BLUETOOTH_ADMIN Android 12 以下扫描蓝牙设备
android.permission.BLUETOOTH_SCAN Android 12 及以上扫描蓝牙设备
android.permission.BLUETOOTH_CONNECT Android 12 及以上连接蓝牙设备
android.permission.ACCESS_FINE_LOCATION 低版本系统扫描蓝牙设备必需
android.permission.ACCESS_COARSE_LOCATION 低版本系统扫描蓝牙设备必需

隐私、权限声明

1. 本插件需要申请的系统权限列表:

android.permission.BLUETOOTH、android.permission.BLUETOOTH_ADMIN、android.permission.BLUETOOTH_SCAN、android.permission.BLUETOOTH_CONNECT、android.permission.ACCESS_FINE_LOCATION、android.permission.ACCESS_COARSE_LOCATION

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

身份证数据仅在本机通过蓝牙读取与解码,不会上传至任何服务器

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。