东信EST-100/EST-100GS/EST-J13X系列Android开发包(含身份证、社保卡、CPU、M1、磁条卡、银行卡等卡)
东信EST-100系列Android开发包(含身份证、社保卡、CPU、M1、磁条卡、银行卡等卡),支持东信EST-100、EST-100G、EST-J13X、EST-100GS等机型,仅供开发人员和测试人员使用,包括armeabi/armeabi-v7a/armeabi-v8a/x86/x64等安卓处理器使用。
开发包分为Android Studio编译和Eclipse两种编译环境,请根据实际需要选择对应的版本下载。
Arm Android平台开发包下载地址:
EST-100多合一读卡器SDK简介
本文档描述了EST-100型号读写器SDK的函数定义、调用方法、参数以及返回值说明,供开发人员进行二次开发时使用。
三、函数说明
3.1、设备类
3.1.1、连接读卡器
函数原型:boolean openDevice();
参数:无
返回值:连接成功返回true。
3.1.2、断开连接
函数原型:void closeDevice();
参数:无
返回值:无
3.1.3、蜂鸣器
函数原型:boolean demoBeepOn();
参数:无
返回值:成功返回true。
3.2、接触类
3.2.1、CPU卡
3.2.1.1、CPU卡上电复位
函数原型:
int ICC_Reader_pre_PowerOn(byteICC_Slot_No,byte[] Response);
参数:
ICC_Slot_No:[IN]卡座号(如下)
0x01:主卡座
0x11~0x14:SAM1~SAM4卡座
Response:[OUT]上电返回的ATR
返回值:成功返回ATR的长度,<= 0表示失败。
3.2.1.2、CPU卡执行APDU命令
函数原型:int ICC_Reader_Application(byteICC_Slot_No,
IntLenth_of_Command_APDU,
byte[]Command_APDU,
byte[]Response_APDU);
参数:
ICC_Slot_No:[IN]卡座号,同上电复位
Lenth_of_Command_APDU:[IN]APDU命令长度
Command_APDU:[IN]APDU命令
Response_APDU:[OUT]响应数据
返回值:
成功返回响应数据的长度,<= 0表示失败
3.3、非接类
3.3.1、非接卡前置步骤(必须)
3.3.1.1、设置为TypeA
函数原型:int PICC_Reader_SetTypeA();
参数:无
返回值:成功返回0
3.3.1.2、请求卡片
函数原型:int PICC_Reader_Request();
参数:无
返回值:成功返回0
3.3.1.3、防碰撞
函数原型:int PICC_Reader_anticoll(byte[] uid);
参数:
Uid:[OUT] 卡片物理卡号,4字节
返回值:成功返回长度
3.3.1.4、选择卡片
函数原型:int PICC_Reader_Select(byte cardtype);
参数:
Cardtype:[IN]0x41表示TypeA/M1,0x42表示TypeB
返回值:成功返回0
3.3.2、非接CPU卡(TypeA)
3.3.2.1、TypeA卡上电复位
函数原型:int PICC_Reader_PowerOnTypeA(byte[] Response);
参数:
Response:[OUT]上电返回数据(ATS)
返回值:成功返回ATS长度,<= 0表示失败。
3.3.2.2、TypeA卡执行APDU命令
函数原型:int PICC_Reader_Application(IntLenth_of_Command_APDU,
byte[]Command_APDU,
byte[]Response_APDU);
参数:
Lenth_of_Command_APDU:[IN]APDU命令长度
Command_APDU:[IN]APDU命令
Response_APDU:[OUT]响应数据
返回值:
成功返回响应数据的长度,<= 0表示失败
3.3.3、Mifare One(M1卡) 系列
3.3.3.1、认证秘钥
函数原型:int PICC_Reader_Authentication_Pass(byte mode, byte secnr, byte[] Key);
参数:
Mode:[IN]要认证的Key类型,0x60表示KeyA,0x61表示KeyB。
Secnr:[IN]扇区号,S50卡范围:0~15(绝大多数)、S70卡范围0~63
Key:[IN]秘钥,6字节
返回值:返回0表示成功,其他值失败。
3.3.3.2、读卡
函数原型:int PICC_Reader_Reead(byte addr, byte[] Response);
参数:
Addr:[IN]块地址S50卡:0~63、S70卡:0~255
Response:[OUT]读出的卡数据,16字节
返回值:成功返回0,其它值失败。
3.3.3.3、写卡
函数原型:int PICC_Reader_Write(byte addr, byte[] Data);
参数:
Addr:[IN]块地址S50卡:0~63、S70卡:0~255
Data:[IN]待写入的卡数据,16字节
返回值:成功返回0,其它值失败。
3.4、身份证、港澳台居民居住证、外国人永久居留证
3.4.1、读身份证信息(文字+照片,仅支持身份证)
函数原型:
(1)int PICC_Reader_ReadID();//文字+照片,不含指纹信息
(2)int PICC_Reader_ReadIDFp(); //文字+照片,含指纹信息
参数:无
返回值:成功返回0.
操作提示:成功后调用 get函数获取居民身份证的各项信息即可。
3.4.2、读卡(身份证+居住证+永居证)
函数原型:
(1)int PICC_ReadIDCardMsg (String pkName); //文字+照片,不含指纹信息
(2)int PICC_ReadIDCardMsgFp (String pkName); //文字+照片,含指纹信息
参数:
pkName:[IN]包名,例如: String pkName=this.getPackageName();
返回值:读卡成功返回0
操作提示:成功后,先获取证件类型,得到证件类型之后再获取对应的信息。
3.4.3、读身份证物理ID号
函数原型:int PICC_Reader_ID_ReadUID(byte[] Response);
参数:
Response:[OUT]身份物理ID号,16字节
返回值:成功返回长度,其它值失败。
3.4.4、查询天线区域有无身份证
函数原型:int PICC_Reader_ID_Request();
参数:无
返回值:成功返回0,其它值失败。
3.4.5 get函数
函数名
(返回数据类型:String,红色标记的为int 型)
获取信息功能包含证件类型
GetCardType根据返回值判断:
0:居民身份证
1:外国人永久居留证
2:港澳台居民居住证
getName姓名(类型为1时表示:外国人中文姓名)0、1、2
getSex性别0、1、2
getNation民族0
getBirth出生日期0、1、2
getAddress住址0、2
getIDNo公民身份证号码(类型为1时表示:外国人居留证号码)0、1、2
getDepartment签发机关0、2
getEffectDate有效起始日期0、1、2
getExpireDate有效截止日期0、1、2
getBitmapbmp照片0、1、2
IsFingerExist根据返回值判断:
0:无指纹信息
512:一根手指数据长度
1024:两根手指数据长度0、2
getFingerPrint指纹数据0、2
getEnName外国人英文姓名1
getNationalityCode外国人国籍代码,符合GB/T2659-2000规定1
getTXZHM港澳台通行证号码2
getTXZQFCS港澳台通行证签发次数2
注: 以上函数须在 “PICC_ReadIDCardMsg” 函数执行成功之后调用,否则获取不到有效信息。
3.5、磁条
函数原型:int Rcard(int ctime, int track, int[] rlen, byte[] data);
参数:
ctime:[IN]超时时间,单位:秒
track:[IN]磁道(1~3)磁道1~~磁道3.
rlen:[OUT]返回数据的长度
data:[OUT]返回的数据
返回值:0表示成功,其它表示失败。
3.6、辅助函数
3.6.1、btyes数组转hexstr字符串,例如:0x11,0x22 “1122”
函数原型:String arrayByteToString(byte[] Src, int len);
参数:
Src:[IN]bytes array
Len:[IN]数据长度
返回值:返回转换好的hexstr格式字符串。
3.6.1、hexstr字符串转btyes数组,例如:“1122” 0x11,0x22
函数原型:byte[] HexString2Bytes(String src);
参数:
Src:[IN]hexstr格式字符串
返回值:返回转换好的bytes数据。
3.7、卡片操作要点
3.7.1typeACPU 卡操作顺序
1 设置为TypeA卡片
2 请求卡片
3 防碰撞
4 选择卡片
5 上电
6 发送APDU 命令
3.7.2typeB 卡操作顺序
1 设置为TypeB卡片
2 上电
3 选卡
4 APDU 命令
3.7.3M1卡操作顺序
1 请求卡片
2 防碰撞
3 选择卡片
4 认证密钥
5 读或写
3.7.4接触CPU卡操作顺序
1 上电
2 APDU 命令
3.8、读社保卡
函数原型:int iReadSiCard(byte[] kh, byte[] xm, byte[] sfzh, byte[] csrq);
参数:
kh:[OUT]社保卡卡号
xm:[OUT]姓名
sfzh:[OUT]身份证号
csrq:[OUT]出生日期
返回值:成功返回0。
3.9、读银行卡号
函数原型:String readBankCardNo( byte iType );
参数:
iType:[IN] 读卡方式,1=插卡式,2=感应式
返回值:
成功返回银行卡号,失败返回”NULL”。
4.0、 15693卡
4.0.1、15693寻卡
函数原型:int PICC_Reader_Inventory (byte[] Response);
参数:
Response: [OUT] 寻卡得到8字节卡片数据
返回值:成功返回数据长度。
4.0.2、15693获取卡片详细信息
函数原型:int PICC_Reader_SystemInfor(byte[] Response);
参数:
Response: [OUT] 得到14字节卡片数据
返回值:成功返回数据长度。
4.0.3、15693读卡
函数原型:int PICC_Reader_15693_Read (byte blk_add, byte[] Response);
参数:
blk_add:[IN] 块地址
Response: [OUT] 得到4字节卡片数据
返回值:成功返回数据长度。
4.0.4、15693写卡
函数原型:int PICC_Reader_15693_Write(byte blk_add, byte[] Response);
参数:
blk_add:[IN] 块地址
Response: [IN] 要写入的4字节卡片数据
返回值:成功返回0。
4.0.5、15693_AFI操作
函数原型:int PICC_Reader_AFI(byte bysType, byte data);
参数:
bysType:[IN] bysType=0表示写AFI,=1表示锁AFI。
data:[IN] AFI值, bysType为0时有效。
返回值:成功返回0。
4.0.6、15693_DSFID操作
函数原型:int PICC_Reader_DSFID(byte bysType, byte data);
参数:
bysType:[IN] bysType=0表示写DSFID,=1表示锁DSFID。
data:[IN] DSFID值, bysType为0时有效。
返回值:成功返回0。
4.0.7、15693_锁定块
函数原型:int PICC_Reader_LockDataBlock(byte blk_add);
参数:
blk_add:[IN] 块地址
返回值:成功返回0。