This commit is contained in:
王志成 2025-03-06 14:41:29 +08:00
parent e31bb24b4a
commit 0e9a6b6cf0
2 changed files with 100 additions and 109 deletions

View File

@ -17,10 +17,11 @@ public class CardReaderServiceImpl implements CardReaderService {
private CardReaderSdk cardReaderSdk = CardReaderUtil.getCardReaderSDK(); private CardReaderSdk cardReaderSdk = CardReaderUtil.getCardReaderSDK();
@Value("${IDCardReader.waitingTime}") @Value("${IDCardReader.waitingTime}")
private Long waitingTime; private Long waitingTime;
private final Object cardReaderLock = new Object();
@Override @Override
public Result IDCardReader() { public Result IDCardReader() {
int handle = 0; Long handle = null;
UserInfoVO userInfo = null; UserInfoVO userInfo = null;
try { try {
log.info("[CardReaderServiceImpl][IDCardReader][26]: 开始连接指定设备与电脑端口,即打开端口"); log.info("[CardReaderServiceImpl][IDCardReader][26]: 开始连接指定设备与电脑端口,即打开端口");
@ -32,23 +33,10 @@ public class CardReaderServiceImpl implements CardReaderService {
log.info("[CardReaderServiceImpl][IDCardReader][32]: 开始循环读取 ID 卡信息,开始时间: {}", startTime); log.info("[CardReaderServiceImpl][IDCardReader][32]: 开始循环读取 ID 卡信息,开始时间: {}", startTime);
while (true) { while (true) {
try { try {
byte[] bytes = new byte[1024];
log.info("[CardReaderServiceImpl][IDCardReader][36]: 尝试读取 ID 卡"); log.info("[CardReaderServiceImpl][IDCardReader][36]: 尝试读取 ID 卡");
int idCard = cardReaderSdk.PICC_Reader_ReadIDCard(handle, bytes); Long idCard = cardReaderSdk.PICC_Reader_ReadIDCard(handle);
log.info("[CardReaderServiceImpl][IDCardReader][38]: 读取 ID 卡,返回值: {}", idCard); log.info("[CardReaderServiceImpl][IDCardReader][38]: 读取 ID 卡,返回值: {}", idCard);
log.info("[CardReaderServiceImpl][IDCardReader][39]: 尝试创建 UserInfoVO 对象"); log.info("[CardReaderServiceImpl][IDCardReader][39]: 尝试创建 UserInfoVO 对象");
/*byte[] address = new byte[1024];
Integer i = cardReaderSdk.GetAddress(address);
System.out.println(i);
java.lang.String strAddress = new java.lang.String(address, "GBK");
System.out.println("地址:" + strAddress);*/
/*byte[] bmpFile = new byte[4096];
int s = cardReaderSdk.GetBmpFileData(bmpFile);
System.out.println(s);
java.lang.String strBmpFile = new java.lang.String(bmpFile, "GBK");
System.out.println("地址:" + strBmpFile);*/
userInfo = new UserInfoVO(cardReaderSdk); userInfo = new UserInfoVO(cardReaderSdk);
log.info("[CardReaderServiceImpl][IDCardReader][53]: 创建 UserInfoVO 对象成功,姓名: {}", userInfo.getName()); log.info("[CardReaderServiceImpl][IDCardReader][53]: 创建 UserInfoVO 对象成功,姓名: {}", userInfo.getName());
if (!"".equals(userInfo.getName()) && userInfo.getName() != null) { if (!"".equals(userInfo.getName()) && userInfo.getName() != null) {
@ -78,7 +66,7 @@ public class CardReaderServiceImpl implements CardReaderService {
log.info("[CardReaderServiceImpl][IDCardReader][78]: 成功读取到用户信息,返回结果"); log.info("[CardReaderServiceImpl][IDCardReader][78]: 成功读取到用户信息,返回结果");
return Result.ok(userInfo); return Result.ok(userInfo);
} finally { } finally {
if (handle != 0) { if (handle != null) {
log.info("[CardReaderServiceImpl][IDCardReader][82]: 开始关闭端口,句柄: {}", handle); log.info("[CardReaderServiceImpl][IDCardReader][82]: 开始关闭端口,句柄: {}", handle);
// 不管什么情况最终都要关闭端口 // 不管什么情况最终都要关闭端口
cardReaderSdk.ICC_Reader_Close(handle); cardReaderSdk.ICC_Reader_Close(handle);
@ -89,91 +77,93 @@ public class CardReaderServiceImpl implements CardReaderService {
@Override @Override
public Result SocialSecurityCardReader() { public Result SocialSecurityCardReader() {
int handle = 0; Long handle = null;
try { try {
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][94]: 开始连接指定设备与电脑端口,即打开端口"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader][70]: 开始连接指定设备与电脑端口,即打开端口");
// 连接指定设备与电脑端口即打开端口
handle = cardReaderSdk.ICC_Reader_Open("USB1"); handle = cardReaderSdk.ICC_Reader_Open("USB1");
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][97]: 连接指定设备与电脑端口,即打开端口,返回句柄: {}", handle); if (handle != null) {
log.error("[CardReaderServiceImpl][SocialSecurityCardReader][70]: 打开端口失败");
return Result.error("打开端口失败,请检查设备连接");
}
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][70]: 连接指定设备与电脑端口,即打开端口,返回句柄: {}", handle);
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][100]: 开始循环读取社保卡信息,开始时间: {}", startTime); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始循环读取社保卡信息,开始时间: {}", startTime);
while (true) { while (true) {
byte[] data = new byte[1024]; byte[] data = new byte[4096];
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][104]: 尝试读取社保卡基本信息"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 尝试读取社保卡基本信息");
int i = cardReaderSdk.iReadCardBas(3, data); Long i = cardReaderSdk.iReadCardBas(3, data);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][106]: 读取社保卡基本信息,返回值: {}", i); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 读取社保卡基本信息,返回值: {}", i);
if (i == 0) { if (i == 0) {
java.lang.String bas = new java.lang.String(data, "GBK"); java.lang.String bas = new java.lang.String(data, "GBK");
java.lang.String[] split = bas.split("\\|"); java.lang.String[] split = bas.split("\\|");
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][111]: 读基本信息,结果: {}", bas); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 读基本信息,结果: {}", bas);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][112]: 开始分割基本信息"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始分割基本信息");
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][113]: 基本信息分割完成,分割后的数组长度: {}", split.length); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 基本信息分割完成,分割后的数组长度: {}", split.length);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][114]: 开始创建 SocialSecurityCardInfoVO 对象"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始创建 SocialSecurityCardInfoVO 对象");
SocialSecurityCardInfoVO socialSecurityCardInfoVO = new SocialSecurityCardInfoVO(); SocialSecurityCardInfoVO socialSecurityCardInfoVO = new SocialSecurityCardInfoVO();
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][116]: 开始截取区号代码"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始截取区号代码");
// 区号代码截取 // 区号代码截取
socialSecurityCardInfoVO.setAreaCode(split[0].substring(split[0].length() - 6)); socialSecurityCardInfoVO.setAreaCode(split[0].substring(split[0].length() - 6));
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][119]: 区号代码截取完成,结果: {}", socialSecurityCardInfoVO.getAreaCode()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 区号代码截取完成,结果: {}", socialSecurityCardInfoVO.getAreaCode());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][120]: 开始设置社保卡号"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始设置社保卡号");
socialSecurityCardInfoVO.setSocialSecurityNo(split[1]); socialSecurityCardInfoVO.setSocialSecurityNo(split[1]);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][122]: 社保卡号设置完成,结果: {}", socialSecurityCardInfoVO.getSocialSecurityNo()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 社保卡号设置完成,结果: {}", socialSecurityCardInfoVO.getSocialSecurityNo());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][123]: 开始设置卡号"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始设置卡号");
socialSecurityCardInfoVO.setCardNumber(split[2]); socialSecurityCardInfoVO.setCardNumber(split[2]);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][125]: 卡号设置完成,结果: {}", socialSecurityCardInfoVO.getCardNumber()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 卡号设置完成,结果: {}", socialSecurityCardInfoVO.getCardNumber());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][126]: 开始设置识别码"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始设置识别码");
socialSecurityCardInfoVO.setIdentificationCode(split[3]); socialSecurityCardInfoVO.setIdentificationCode(split[3]);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][128]: 识别码设置完成,结果: {}", socialSecurityCardInfoVO.getIdentificationCode()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 识别码设置完成,结果: {}", socialSecurityCardInfoVO.getIdentificationCode());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][129]: 开始设置姓名"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始设置姓名");
socialSecurityCardInfoVO.setName(split[4]); socialSecurityCardInfoVO.setName(split[4]);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][131]: 姓名设置完成,结果: {}", socialSecurityCardInfoVO.getName()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 姓名设置完成,结果: {}", socialSecurityCardInfoVO.getName());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][132]: 开始设置卡重置信息"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始设置卡重置信息");
socialSecurityCardInfoVO.setCardResetInformation(split[5]); socialSecurityCardInfoVO.setCardResetInformation(split[5]);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][134]: 卡重置信息设置完成,结果: {}", socialSecurityCardInfoVO.getCardResetInformation()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 卡重置信息设置完成,结果: {}", socialSecurityCardInfoVO.getCardResetInformation());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][135]: 开始设置规格版本"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始设置规格版本");
socialSecurityCardInfoVO.setSpecificationVersion(split[6]); socialSecurityCardInfoVO.setSpecificationVersion(split[6]);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][137]: 规格版本设置完成,结果: {}", socialSecurityCardInfoVO.getSpecificationVersion()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 规格版本设置完成,结果: {}", socialSecurityCardInfoVO.getSpecificationVersion());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][138]: 开始设置发卡日期"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始设置发卡日期");
socialSecurityCardInfoVO.setIssuanceDate(split[7]); socialSecurityCardInfoVO.setIssuanceDate(split[7]);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][140]: 发卡日期设置完成,结果: {}", socialSecurityCardInfoVO.getIssuanceDate()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 发卡日期设置完成,结果: {}", socialSecurityCardInfoVO.getIssuanceDate());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][141]: 开始设置过期日期"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始设置过期日期");
socialSecurityCardInfoVO.setExpireDate(split[8]); socialSecurityCardInfoVO.setExpireDate(split[8]);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][143]: 过期日期设置完成,结果: {}", socialSecurityCardInfoVO.getExpireDate()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 过期日期设置完成,结果: {}", socialSecurityCardInfoVO.getExpireDate());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][144]: 开始设置终端号"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始设置终端号");
socialSecurityCardInfoVO.setTerminalNumber(split[9]); socialSecurityCardInfoVO.setTerminalNumber(split[9]);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][146]: 终端号设置完成,结果: {}", socialSecurityCardInfoVO.getTerminalNumber()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 终端号设置完成,结果: {}", socialSecurityCardInfoVO.getTerminalNumber());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][147]: 开始设置终端设备号"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始设置终端设备号");
socialSecurityCardInfoVO.setTerminalDeviceNumber(split[10]); socialSecurityCardInfoVO.setTerminalDeviceNumber(split[10]);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][149]: 终端设备号设置完成,结果: {}", socialSecurityCardInfoVO.getTerminalDeviceNumber()); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 终端设备号设置完成,结果: {}", socialSecurityCardInfoVO.getTerminalDeviceNumber());
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][150]: 成功读取社保卡信息,返回结果"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 成功读取社保卡信息,返回结果");
return Result.ok(socialSecurityCardInfoVO); return Result.ok(socialSecurityCardInfoVO);
} }
long elapsedTime = System.currentTimeMillis() - startTime; long elapsedTime = System.currentTimeMillis() - startTime;
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][155]: 已过去时间: {} 毫秒", elapsedTime); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 已过去时间: {} 毫秒", elapsedTime);
if (elapsedTime >= waitingTime) { if (elapsedTime >= waitingTime) {
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][157]: 读取社保卡信息超时,等待了 {} 毫秒。", waitingTime); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 读取社保卡信息超时,等待了 {} 毫秒。", waitingTime);
return Result.error("读取社保卡信息超时,请重试。"); return Result.error("读取社保卡信息超时,请重试。");
} }
try { try {
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][162]: 线程休眠 100 毫秒,避免 CPU 空转"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 线程休眠 100 毫秒,避免 CPU 空转");
// 短暂休眠避免 CPU 空转 // 短暂休眠避免 CPU 空转
Thread.sleep(100); Thread.sleep(100);
} catch (InterruptedException e) { } catch (InterruptedException e) {
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][166]: 线程休眠被中断,重新设置中断状态"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 线程休眠被中断,重新设置中断状态");
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
} }
} catch (Exception e) { } catch (Exception e) {
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][171]: Error occurred during card reader operation: ", e); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: Error occurred during card reader operation: ", e);
if (handle != 0) { if (handle != null) {
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][173]: 开始关闭端口,句柄: {}", handle); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 开始关闭端口,句柄: {}", handle);
// 关闭端口 // 关闭端口
cardReaderSdk.ICC_Reader_Close(handle); cardReaderSdk.ICC_Reader_Close(handle);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][176]: 端口关闭成功"); log.info("[CardReaderServiceImpl][SocialSecurityCardReader]: 端口关闭成功");
} }
return Result.error("操作失败:" + e.getMessage()); return Result.error("操作失败:" + e.getMessage());
} }

View File

@ -14,7 +14,7 @@ public interface CardReaderSdk extends Library {
* @param devName 接口名称USB1 * @param devName 接口名称USB1
* @return >0成功<=0失败 * @return >0成功<=0失败
*/ */
int ICC_Reader_Open(String devName); Long ICC_Reader_Open(String devName);
/** /**
@ -23,7 +23,7 @@ public interface CardReaderSdk extends Library {
* @param ReaderHandle ICCReaderOpen函数所返回的值 * @param ReaderHandle ICCReaderOpen函数所返回的值
* @return =0成功非0失败 * @return =0成功非0失败
*/ */
int ICC_Reader_Close(int ReaderHandle); Long ICC_Reader_Close(Long ReaderHandle);
/** /**
@ -33,7 +33,7 @@ public interface CardReaderSdk extends Library {
* @param time 蜂鸣时间以毫秒为单位 * @param time 蜂鸣时间以毫秒为单位
* @return =0成功非0失败 * @return =0成功非0失败
*/ */
int ICC_PosBeep(int ReaderHandle, int time); Long ICC_PosBeep(Long ReaderHandle, int time);
/** /**
@ -41,7 +41,7 @@ public interface CardReaderSdk extends Library {
* *
* @return 设备及动态库版本信息 =0成功非0失败 * @return 设备及动态库版本信息 =0成功非0失败
*/ */
int ICC_Reader_Libinfo(); Long ICC_Reader_Libinfo();
/** /**
@ -52,7 +52,7 @@ public interface CardReaderSdk extends Library {
* @param length 要读取的数据的长度 * @param length 要读取的数据的长度
* @return 读取的数据 =0成功非0失败 * @return 读取的数据 =0成功非0失败
*/ */
int ICC_Reader_ReadEEPROM(int ReaderHandle, int offset, int length); Long ICC_Reader_ReadEEPROM(Long ReaderHandle, int offset, int length);
/** /**
@ -64,7 +64,7 @@ public interface CardReaderSdk extends Library {
* @param buffer 待写入的数据 * @param buffer 待写入的数据
* @return =0成功非0失败 * @return =0成功非0失败
*/ */
int ICC_Reader_WriteEEPROM(int ReaderHandle, int offset, int length, String buffer); Long ICC_Reader_WriteEEPROM(Long ReaderHandle, int offset, int length, String buffer);
/** /**
@ -89,7 +89,7 @@ public interface CardReaderSdk extends Library {
* @return =0成功非0失败 * @return =0成功非0失败
*/ */
@Deprecated @Deprecated
int ICC_Reader_DispSound(int ReaderHandle, String voiceType); Long ICC_Reader_DispSound(Long ReaderHandle, String voiceType);
/** /**
@ -105,7 +105,7 @@ public interface CardReaderSdk extends Library {
* 0x3x非接CPU卡 * 0x3x非接CPU卡
* @return 上电返回ATR值数据格式为十六进制字符串 * @return 上电返回ATR值数据格式为十六进制字符串
*/ */
int ICC_Reader_PowerOnHEX(int ReaderHandle, String ICCSlotNo); Long ICC_Reader_PowerOnHEX(Long ReaderHandle, String ICCSlotNo);
/** /**
@ -121,7 +121,7 @@ public interface CardReaderSdk extends Library {
* 0x3x非接CPU卡 * 0x3x非接CPU卡
* @return =0成功非0失败 * @return =0成功非0失败
*/ */
int ICC_Reader_PowerOff(int ReaderHandle, String ICCSlotNo); Long ICC_Reader_PowerOff(Long ReaderHandle, String ICCSlotNo);
/** /**
@ -137,7 +137,7 @@ public interface CardReaderSdk extends Library {
* 0x3x非接CPU卡 * 0x3x非接CPU卡
* @return = 0 表示卡座有卡,其他见状态码 * @return = 0 表示卡座有卡,其他见状态码
*/ */
int ICC_Reader_GetStatus(int ReaderHandle, String ICCSlotNo); Long ICC_Reader_GetStatus(Long ReaderHandle, String ICCSlotNo);
/** /**
@ -154,7 +154,7 @@ public interface CardReaderSdk extends Library {
* @param CommandAPDU APDU命令数据以十六进制字符串形式输入 * @param CommandAPDU APDU命令数据以十六进制字符串形式输入
* @return 大于 0 表示执行成功,其值为 Response_APDU 的数据长度.否则表示执行失败 * @return 大于 0 表示执行成功,其值为 Response_APDU 的数据长度.否则表示执行失败
*/ */
int ICC_Reader_ApplicationHEX(int ReaderHandle, String ICCSlotNo, String CommandAPDU); Long ICC_Reader_ApplicationHEX(Long ReaderHandle, String ICCSlotNo, String CommandAPDU);
/** /**
@ -163,7 +163,7 @@ public interface CardReaderSdk extends Library {
* @param ReaderHandle ICCReaderOpen函数所返回的值 * @param ReaderHandle ICCReaderOpen函数所返回的值
* @return 返回卡片上电信息 = 0 表示成功,非0失败 * @return 返回卡片上电信息 = 0 表示成功,非0失败
*/ */
int ICC_Reader_4428_PowerOnHEX(int ReaderHandle); Long ICC_Reader_4428_PowerOnHEX(Long ReaderHandle);
/** /**
@ -172,7 +172,7 @@ public interface CardReaderSdk extends Library {
* @param ReaderHandle ICCReaderOpen函数所返回的值 * @param ReaderHandle ICCReaderOpen函数所返回的值
* @return = 0 表示成功,非0失败 * @return = 0 表示成功,非0失败
*/ */
int ICC_Reader_4442_PowerOff(int ReaderHandle); Long ICC_Reader_4442_PowerOff(Long ReaderHandle);
/** /**
@ -183,7 +183,7 @@ public interface CardReaderSdk extends Library {
* @param len 数据长度offset+len需小于256 * @param len 数据长度offset+len需小于256
* @return 返回卡片读取信息 = 0 表示成功,非0失败 * @return 返回卡片读取信息 = 0 表示成功,非0失败
*/ */
int ICC_Reader_4428_ReadHEX(int ReaderHandle, int offset, int len); Long ICC_Reader_4428_ReadHEX(Long ReaderHandle, int offset, int len);
/** /**
@ -195,7 +195,7 @@ public interface CardReaderSdk extends Library {
* @param data 待写入卡片数据 * @param data 待写入卡片数据
* @return 返回卡片读取信息 = 0 表示成功,非0失败 * @return 返回卡片读取信息 = 0 表示成功,非0失败
*/ */
int ICC_Reader_4428_WriteHEX(int ReaderHandle, int offset, int len, String data); Long ICC_Reader_4428_WriteHEX(Long ReaderHandle, int offset, int len, String data);
/** /**
@ -205,7 +205,7 @@ public interface CardReaderSdk extends Library {
* @param keyHex 卡密钥 * @param keyHex 卡密钥
* @return = 0 表示成功,非0失败 * @return = 0 表示成功,非0失败
*/ */
int ICC_Reader_4442_Verify(int ReaderHandle, String keyHex); Long ICC_Reader_4442_Verify(Long ReaderHandle, String keyHex);
/** ----- 非接触操作函数 -------------- */ /** ----- 非接触操作函数 -------------- */
/** /**
@ -214,7 +214,7 @@ public interface CardReaderSdk extends Library {
* @param ReaderHandle ICCReaderOpen函数所返回的值 * @param ReaderHandle ICCReaderOpen函数所返回的值
* @return = 0 表示成功,非0失败 * @return = 0 表示成功,非0失败
*/ */
int PICC_Reader_Request(int ReaderHandle); Long PICC_Reader_Request(Long ReaderHandle);
/** /**
@ -224,7 +224,7 @@ public interface CardReaderSdk extends Library {
* @param flag 00-关场强 01-开场强 * @param flag 00-关场强 01-开场强
* @return = 0 表示成功,非0失败 * @return = 0 表示成功,非0失败
*/ */
int PICC_Reader_RFControl(int ReaderHandle, String flag); Long PICC_Reader_RFControl(Long ReaderHandle, String flag);
/** --------------- 非接 CPU 卡操作函数 ------------ */ /** --------------- 非接 CPU 卡操作函数 ------------ */
@ -235,7 +235,7 @@ public interface CardReaderSdk extends Library {
* @return 输出上电成功返回的卡片复位信息(ATS) 返回ATS长度大于0 表示成功,其他失败 * @return 输出上电成功返回的卡片复位信息(ATS) 返回ATS长度大于0 表示成功,其他失败
*/ */
@Deprecated @Deprecated
int PICC_Reader_PowerOnTypeAHEX(int ReaderHandle); Long PICC_Reader_PowerOnTypeAHEX(Long ReaderHandle);
/** /**
@ -245,7 +245,7 @@ public interface CardReaderSdk extends Library {
* @return 输出上电成功返回的卡片复位信息(ATS) 返回ATS长度大于0 表示成功,其他失败 * @return 输出上电成功返回的卡片复位信息(ATS) 返回ATS长度大于0 表示成功,其他失败
*/ */
@Deprecated @Deprecated
int PICC_Reader_PowerOnTypeBHEX(int ReaderHandle); Long PICC_Reader_PowerOnTypeBHEX(Long ReaderHandle);
/** /**
* 非接触 CPU 卡执行APDU命令命令以十六进制字符串传输SSSE32.dll暴露函数中未发现该函数但是文档中有 * 非接触 CPU 卡执行APDU命令命令以十六进制字符串传输SSSE32.dll暴露函数中未发现该函数但是文档中有
@ -256,7 +256,7 @@ public interface CardReaderSdk extends Library {
* 大于 0 表示执行成功,其值为 Response_APDU 的数据长度.否则表示执行失败 * 大于 0 表示执行成功,其值为 Response_APDU 的数据长度.否则表示执行失败
*/ */
@Deprecated @Deprecated
int PICC_Reader_ApplicationHEX(int ReaderHandle, String CommandAPDU); Long PICC_Reader_ApplicationHEX(Long ReaderHandle, String CommandAPDU);
/** ---------------- 二代证/外国人居留证/港澳台居住证 --------------- */ /** ---------------- 二代证/外国人居留证/港澳台居住证 --------------- */
@ -266,7 +266,7 @@ public interface CardReaderSdk extends Library {
* @param ReaderHandle ICCReaderOpen函数所返回的值 * @param ReaderHandle ICCReaderOpen函数所返回的值
* @return 返回身份证物理ID信息 = 0 表示成功,非0失败 * @return 返回身份证物理ID信息 = 0 表示成功,非0失败
*/ */
int PICC_Reader_Read_CardID(int ReaderHandle, byte[] response); Long PICC_Reader_Read_CardID(Long ReaderHandle, byte[] response);
/** /**
@ -275,7 +275,8 @@ public interface CardReaderSdk extends Library {
* @param ReaderHandle ICCReaderOpen函数所返回的值 * @param ReaderHandle ICCReaderOpen函数所返回的值
* @return 返回错误信息 = 0 表示成功,非0失败 * @return 返回错误信息 = 0 表示成功,非0失败
*/ */
int PICC_Reader_ReadIDCard(int ReaderHandle, byte[] response); Long PICC_Reader_ReadIDCard(Long ReaderHandle);
// int PICC_Reader_ReadIDCard(Long ReaderHandle, byte[] response);
/** 以下函数须在 “PICC_Reader_ReadIDCard” 函数执行成功之后调用,否则获取不到有效信息 */ /** 以下函数须在 “PICC_Reader_ReadIDCard” 函数执行成功之后调用,否则获取不到有效信息 */
/** /**
@ -286,99 +287,99 @@ public interface CardReaderSdk extends Library {
* 2港澳台居民居住证 * 2港澳台居民居住证
* 4新外国人永久居留证 * 4新外国人永久居留证
*/ */
int GetCardType(); Integer GetCardType();
/** /**
* 姓名(类型为 1 时表示外国人中文姓名) * 姓名(类型为 1 时表示外国人中文姓名)
*/ */
int GetName(byte[] outParam); Integer GetName(byte[] outParam);
/** /**
* 性别 * 性别
*/ */
int GetSex(byte[] outParam); Integer GetSex(byte[] outParam);
/** /**
* 民族 * 民族
*/ */
int GetNation(byte[] outParam); Integer GetNation(byte[] outParam);
/** /**
* 出生日期 * 出生日期
*/ */
int GetBirth(byte[] outParam); Integer GetBirth(byte[] outParam);
/** /**
* 住址 * 住址
*/ */
int GetAddress(byte[] outParam); Integer GetAddress(byte[] outParam);
/** /**
* 公民身份证号码(类型为 1时表示外国人居留证号码) * 公民身份证号码(类型为 1时表示外国人居留证号码)
*/ */
int GetCertNo(byte[] outParam); Integer GetCertNo(byte[] outParam);
/** /**
* 签发机关 * 签发机关
*/ */
int GetDepartemt(byte[] outParam); Integer GetDepartemt(byte[] outParam);
/** /**
* 有效起始日期 * 有效起始日期
*/ */
int GetEffectDate(byte[] outParam); Integer GetEffectDate(byte[] outParam);
/** /**
* 有效截止日期 * 有效截止日期
*/ */
int GetExpireDate(byte[] outParam); Integer GetExpireDate(byte[] outParam);
/** /**
* bmp 格式照片数据 * bmp 格式照片数据
*/ */
int GetBmpFileData(byte[] outParam); Integer GetBmpFileData(byte[] outParam);
/** /**
* 生成照片 * 生成照片
* TODO 入参参考文中3.4.1 * TODO 入参参考文中3.4.1
*/ */
int GetBmpFile(byte[] outParam); Integer GetBmpFile(byte[] outParam);
/** /**
* 是否含存在指纹信息存在时返回 512 或者 1024 * 是否含存在指纹信息存在时返回 512 或者 1024
* 不存在时返回 0 * 不存在时返回 0
*/ */
int IsFingerExist(); Integer IsFingerExist();
/** /**
* 获取指纹数据成功时返回获取到的字节长度 * 获取指纹数据成功时返回获取到的字节长度
*/ */
int GetFingerprint(byte[] outParam); Integer GetFingerprint(byte[] outParam);
/** /**
* 外国人英文姓名 * 外国人英文姓名
*/ */
int GetEnName(byte[] outParam); Integer GetEnName(byte[] outParam);
/** /**
* 外国人国籍代码符合GB/T2659-2000规定 * 外国人国籍代码符合GB/T2659-2000规定
*/ */
int GetNationalityCode(byte[] outParam); Integer GetNationalityCode(byte[] outParam);
/** /**
* 港澳台通行证号码 * 港澳台通行证号码
*/ */
int GetTXZHM(byte[] outParam); Integer GetTXZHM(byte[] outParam);
/** /**
* 港澳台通行证签发次数 * 港澳台通行证签发次数
*/ */
int GetTXZQFCS(byte[] outParam); Integer GetTXZQFCS(byte[] outParam);
/** /**
* 外国人换证次数 * 外国人换证次数
*/ */
int GetHZCS(byte[] outParam); Integer GetHZCS(byte[] outParam);
/** ------------ 社保卡 ---------*/ /** ------------ 社保卡 ---------*/
/** /**
@ -391,7 +392,7 @@ public interface CardReaderSdk extends Library {
* 4-自动寻卡非接触式操作卡优先 * 4-自动寻卡非接触式操作卡优先
* @return * @return
*/ */
int iReadCardBas(int iType, byte[] data); Long iReadCardBas(int iType, byte[] data);
/** /**
* 基于加密机的读基本信息步骤一 * 基于加密机的读基本信息步骤一
@ -404,7 +405,7 @@ public interface CardReaderSdk extends Library {
* 4-自动寻卡非接触式操作卡优先 * 4-自动寻卡非接触式操作卡优先
* @return * @return
*/ */
int iReadCardBas_HSM_Step1(int iType, byte[] data); Long iReadCardBas_HSM_Step1(int iType, byte[] data);
/** /**
* 基于加密机的读基本信息步骤二 * 基于加密机的读基本信息步骤二
@ -416,7 +417,7 @@ public interface CardReaderSdk extends Library {
* 原始信息16 拼接组成各数据项之间以|分割且最后一个数据项以|结尾 * 原始信息16 拼接组成各数据项之间以|分割且最后一个数据项以|结尾
* @return * @return
*/ */
public int iReadCardBas_HSM_Step2(byte[] pKey, byte[] pOutInfo); public Long iReadCardBas_HSM_Step2(byte[] pKey, byte[] pOutInfo);
public static class GetLibraryPath_Helper { public static class GetLibraryPath_Helper {
public GetLibraryPath_Helper() { public GetLibraryPath_Helper() {
@ -436,7 +437,7 @@ public interface CardReaderSdk extends Library {
//社保卡 //社保卡
public int PICC_Reader_SSCardInfo1(int ReaderHandle, public int PICC_Reader_SSCardInfo1(Long ReaderHandle,
byte[] SBKH, byte[] SBKH,
byte[] SHBZHM, byte[] SHBZHM,
byte[] XM, byte[] XM,
@ -446,7 +447,7 @@ public interface CardReaderSdk extends Library {
); );
//身份证 //身份证
public int PICC_Reader_ReadIDInfo(int ReaderHandle, public int PICC_Reader_ReadIDInfo(Long ReaderHandle,
String filepath, String filepath,
byte[] pName, byte[] pName,
byte[] pSex, byte[] pSex,
@ -459,7 +460,7 @@ public interface CardReaderSdk extends Library {
byte[] pExpire, byte[] pExpire,
byte[] pErrMsg); byte[] pErrMsg);
public int ICC_SelscetScan(int ReaderHandle, byte[] pCodeInfo , int [] lent); public int ICC_SelscetScan(Long ReaderHandle, byte[] pCodeInfo , int [] lent);
public int iGetDevUID(byte[] pOutInfo); public int iGetDevUID(byte[] pOutInfo);