android串口通信——身份证识别器

android串口通信——身份证识别器

本文主要解决的问题:
1.身份证识别器硬件的使用
2.读取到数据的解析

一、身份证识别器基础

1.调用身份证识别器的步骤

调用身份证识别器的步骤分为三步:
- 1.寻找身份证信息
- 2.选取身份证信息
- 3.读取身份证信息

2.波特率

身份证识别器的默认波特率是115200。

3.基本指令

  • 1、寻找身份证信息:
    寻卡命令: AA AA AA 96 69 00 03 20 01 22
    返 回 值: AA AA AA 96 69 00 08 00 00 9F 00 00 00 00 97

  • 2、选取身份证信息:
    选卡命令: AA AA AA 96 69 00 03 20 02 21
    返 回 值: AA AA AA 96 69 00 0C 00 00 90 00 00 00 00 00 00 00 00 9C

  • 3、读取身份证信息(文字+照片信息):
    读卡命令: AA AA AA 96 69 00 03 30 01 32
    返 回 值: 1295 字节数据身份证信息

  • 4 、 读取身份证信息(文字+照片+指纹特征点信息)
    读卡命令: AA AA AA 96 69 00 03 30 10 23
    返回 值: 2321 或 1809 或 1297 字节数据身份证信息

4. 身份证信息结构

  • 身份证信息(文字+照片)结构:
    AA AA AA 96 69 05 08 00 00 90 01 00 04 00 +( 256 字节文字信息 ) +( 1024 字节
    照片信息) +( 1 字节 CRC)

  • 身份证信息(文字+照片+指纹)结构:
    AA AA AA 96 69 09 0A 00 00 90 01 00 04 00 04 00 +( 256 字节文字信息) +
    ( 1024 字节图片信息) +( 1024 或 512 或 0 字节指纹信息) +1 字节校验位 指
    纹数据的具体大小由第十五和第十六字节判断 (04 00)=4*16*16=1024
    (02 00)=2*16*16=512

5.文字结构说明

文字信息采用 GB 13000 的 UCS-2 进行存储, 各项目分配如下:

项目 长度(字节) 说明
姓名 30 汉字
性别 2 代码
民族 4 代码
出生 16 年月日: YYYYMMDD
住址 70 汉字和数字
公民身份号码 36 数字和字母X(x)
签发机关 30 汉字
有效期起始日期 16 年月日: YYYYMMDD
有效期截止日期 16 年月日: YYYYMMDD 有效期为长期时存储 “长期”
备用 36 汉字

6.民族代码对照表

编号 名族 编号 名族 编号 名族 编号 名族
01 15 土家 29 柯尔克孜 43 乌孜别克
02 蒙古 16 哈尼 30 44 俄罗斯
03 17 哈萨克 31 达斡尔 45 鄂温克
04 18 32 仫佬 46 德昂
05 维吾尔 19 33 47 保安
06 20 傈僳 34 布朗 48 裕固
07 21 35 撒拉 49
08 22 36 毛南 50 塔塔尔
09 布依 23 高山 37 仡佬 51 独龙
10 朝鲜 24 拉祜 38 锡伯 52 鄂伦春
11 25 39 阿昌 53 赫哲
12 26 东乡 40 普米 54 门巴
13 27 纳西 41 塔吉克 55 珞巴
14 28 景颇 42 56 基诺
97 其他 98 外国血统中国籍人士

7.性别代码对照表

编号 说明
0 未知
1
2
9 未说明

二、身份证的读取

首先需要知道身份证的波特率和硬件连接地址,身份证的波特率默认是115200

1.读取的方法调用

       /**
     * 读取 身份证信息
     *
     * @param view
     */
    public void readIdCard(View view) {
        //1.硬件地址判断
        String adress = addressTv.getText().toString().trim();
        if ("".equals(adress)) {
            Toast.makeText(this, "请选择硬件地址", Toast.LENGTH_SHORT).show();
            return;
        }
        //2.波特率判断
        String bauteStr = bauteRateTv.getText().toString().trim();
        if ("".equals(bauteStr)) {
            Toast.makeText(this, "请选择波特率", Toast.LENGTH_SHORT).show();
            return;
        }
        new IDCardReadUtils(this).queryIdCardInfo(adress, Integer.parseInt(bauteStr), new IDCardReadUtils.IDCardListener() {
            @Override
            public void onInfo(IdCardBean bean) {
                //输出身份证信息
                infoTv.setText(bean.word.toMyString());
                //头像的显示
                decodeImagexxx(bean.headImage);
            }
        });
    }

   public String bmpPath =   "/sdcard/photo.bmp";
    public String wltPath =  "/sdcard/photo.wlt";

    public void decodeImagexxx(byte[] wlt) {
        if (wlt == null) {
            return;
        }
        try {
            File wltFile = new File(wltPath);
            FileOutputStream fos = new FileOutputStream(wltFile);
            fos.write(wlt);
            fos.close();

            DecodeWlt dw = new DecodeWlt();
            int result = dw.Wlt2Bmp(wltPath, bmpPath);

            if (result == 1) {
                File f = new File(bmpPath);
                if (f.exists())
                    headIv.setImageBitmap(BitmapFactory
                            .decodeFile(bmpPath));
                else {
//                    imageViewPhoto.setImageResource(R.drawable.photo);
                }
            } else {
//                imageViewPhoto.setImageResource(R.drawable.photo);
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }

    }

2.身份证的工具类(IDCardReadUtils)

这个类主要处理
1.读取身份证信息
①寻找身份证信息
②选取身份证信息
③读取身份证信息
2.把读取到信息进行处理,封装bean

package com.qwm.idcarddemo.utils;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;


import com.qwm.idcarddemo.bean.IdCardBean;
import com.qwm.idcarddemo.bean.SerialPortSendData;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

/**
 * @author qiwenming
 * @date 2016/1/19 0019 下午 6:02
 * @ClassName: IDCardReadUtils
 * @ProjectName: 
 * @PackageName: com.qwm.idcarddemo.utils
 * @Description
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 38
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值