关于二代身份证读卡器地二次开发

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于二代身份证读卡器地二次开发

客户提供一台读卡器、sdtapi.dll、WltRS.dll,以及相应的头文件,我是通过java的jni 与所写c++代码进行交互,但是java这边接收到的身份证基本信息一直是乱码。先说明c++向java传其他中文不会出现乱码,是在c++读出的身份证信息就是乱码。c++的代码如下:#include "windows.h"

#include "CardReader.h"

#include "sdtapi.h"

#include "String.h"

#include "WltRS.h"

JNIEXPORT jbyteArray JNICALL Java_CardReader_getMessage(JNIEnv * env, jobject jobj){

char* szStr="mei zhao dao xin xi";

char cInput;

int iRet; //返回码

int iPort; //端口号

int iIfOpen=0; //是否需要打开串口

unsigned char pucIIN[8];

unsigned char pucSN[8];

unsigned char pucCHMsg[512]; //文字信息

unsigned char pucPHMsg[1024]; //照片信息

unsigned char pucFPMsg[1024]; //指纹信息

unsigned int uiCHMsgLen,uiPHMsgLen;

memset(pucCHMsg,0,sizeof(pucCHMsg));

int length;

jbyteArray RtnArr = NULL;

jsize arrsize;

if(iIfOpen==0){

for (iPort = 1001; iPort <= 1016; iPort++)

{

iRet=SDT_OpenPort(iPort);

printf("SDT_OpenPort usb error, error code is: %02x\n", iRet);

printf("SDT_OpenPort usb error, error code is: %02d\n", iPort);

if(iRet==0x90) break;

}

if(iRet!=0x90)

{

printf("SDT_OpenPort error, error code is: %02x\n", iRet);

SDT_ClosePort(iPort);

szStr="SDT_OpenPort error";

printf(szStr);

length = strlen(szStr);

arrsize =(jsize)length;

RtnArr=env->NewByteArray(arrsize);

env->SetByteArrayRegion(RtnArr, 0,length, (jbyte*)szStr);

return RtnArr;

}

iRet=SDT_StartFindIDCard(iPort,pucIIN, iIfOpen);

printf("SDT_StartFindIDCard error, error code is: %02x\n", iRet);

if (iRet != 0x9f)

{

iRet=SDT_StartFindIDCard(iPort,pucIIN, iIfOpen); //再找卡

if (iRet != 0x9f)

{

iRet = SDT_ClosePort(iPort);

printf("SDT_StartFindIDCard error, error code is: %02x\n", iRet);

szStr="SDT_StartFindIDCard error";

length = strlen(szStr);

arrsize =(jsize)length;

RtnArr=env->NewByteArray(arrsize);

env->SetByteArrayRegion(RtnArr, 0,length, (jbyte*)szStr);

return RtnArr;

}

}

iRet=SDT_SelectIDCard (iPort,pucSN, iIfOpen);

printf("SDT_SelectIDCard error, error code is: %02x\n", iRet);

if (iRet != 0x90)

{

iRet=SDT_SelectIDCard (iPort,pucSN, iIfOpen); //再选卡

if (iRet != 0x90)

{

iRet = SDT_ClosePort(iPort);

printf("SDT_SelectIDCard error, error code is: %02x\n", iRet);

szStr="SDT_SelectIDCard error";

length = strlen(szStr);

arrsize =(jsize)length;

RtnArr=env->NewByteArray(arrsize);

env->SetByteArrayRegion(RtnArr, 0,length, (jbyte*)szStr);

return RtnArr;

}

}

iRet=SDT_ReadBaseMsg(iPort,pucCHMsg,&uiCHMsgLen, pucPHMsg,&uiPHMsgLen, iIfOpen); printf("SDT_ReadBaseMsg error, error code is: %02x\n", iRet);

if(iRet!=0x90)

{

printf("SDT_ReadBaseMsg error, error code is: %02x\n", iRet);

if(iIfOpen==0)

SDT_ClosePort(iPort);

printf("ssaaaasasasaas\n");

szStr="SDT_ReadBaseMsg error";

length = strlen(szStr);

arrsize =(jsize)length;

RtnArr=env->NewByteArray(arrsize);

printf("123345453\n");

env->SetByteArrayRegion(RtnArr, 0,length, (jbyte*)szStr);

printf("12sssssssss33454534ssaaaasasasaas");

return RtnArr;

}

printf("SDT_ReadBaseMsg OK\n");

if(iIfOpen==0)

SDT_ClosePort(iPort);

RtnArr=env->NewByteArray(uiCHMsgLen);

printf("pucCHMsg=%s\n",pucCHMsg);

env->SetByteArrayRegion(RtnArr, 0,uiCHMsgLen, (jbyte*)pucCHMsg);

return RtnArr;

}

相关文档
最新文档