广告招募

Java JNI调用IC卡读卡器

2026年05月15日 10:05:34      来源:北京友我科技有限公司 >> 进入该公司展台      阅读量:3

分享:

Java调用IC卡读卡器的DLL一般有以下2种方式:

1.使用JNative第三方库调用IC卡读卡器dll的接口.

2.使用JNI调用IC卡读卡器dll的接口.


JNative调用IC卡读卡器dll很方便,只要知道接口名称和参数类型即可调用, 缺点是仅支持32位的程序, 不支持64位。


JNI调用IC卡读卡器的DLL,既支持64位程序也支持32位程序, 调用也非常方便,下面将介绍JNI调用IC卡读卡器DLL的方式。

对于经常使用的普通IC卡为例, 首先声明相关的api接口:

public native int YW_USBHIDInitial();

public native int YW_USBHIDFree();

public native int YW_Buzzer(int ReaderID,int Time_ON, int Time_OFF, int Cycle);

public native int YW_Led(int ReaderID,int LEDIndex, int Time_ON, int Time_OFF, int Cycle, int LedIndexOn);

public native int YW_AntennaStatus(int ReaderID,boolean Status);

public native int YW_SearchCardMode(int ReaderID,int Mode);

public native int YW_RequestCard(int ReaderID,int RequestMode, short CardType[]);

public native int YW_AntiCollide(int ReaderID, byte LenSNO[], byte SNO[]);

public native int YW_CardSelect(int ReaderID,byte LenSNO, byte SNO[]);

public native int YW_DownLoadKey(int ReaderID,int KeyIndex, byte Key[]);

public native int YW_KeyDown_Authorization(int ReaderID,int KeyMode, int BlockAddr, byte KeyIndex);

public native int YW_KeyAuthorization(int ReaderID,int KeyMode, int BlockAddr, byte[]Key);

public native int YW_ReadaBlock(int ReaderID,int BlockAddr, int LenData, byte pData[]);

public native int YW_WriteaBlock(int ReaderID,int BlockAddr, int LenData, byte pData[]);

public native int YW_Purse_Initial(int ReaderID,int BlockAddr, int IniMoney);

public native int YW_Purse_Read(int ReaderID,int BlockAddr, int Money[]);

public native int YW_Purse_Decrease(int ReaderID,int BlockAddr, int Decrement);

public native int YW_Purse_Charge(int ReaderID,int BlockAddr, int Charge);

public native int YW_CardHalt(int ReaderID);

public native int YW_Restore(int ReaderID,int BlockAddr);

public native int YW_Transfer(int ReaderID,int BlockAddr);

public native int YW_AntiCollideAndSelect(int ReaderID,byte ReturnMode, byte CardMem[], byte SNLen[], byte SN[]);


然后静态装载dll,64位程序装载64位的dll,32位装载32位的dll。

static {

System.loadLibrary("YW60X-32");

}


经过以上声明后,就可以直接调用接口了,如:

YOWORFID rfidreader = new YOWORFID();

rfidreader.YW_USBHIDInitial();

int rt =0;

rt =rfidreader.YW_RequestCard(ReaderID,Requestmode,Cardtype);

rt = rfidreader.YW_AntiCollide(ReaderID,LenSn,CardNo);

HexToStr(CardNo,LenSn[0]);

rt =rfidreader.YW_CardSelect(ReaderID,LenSn[0],CardNo);

rt =rfidreader.YW_KeyAuthorization(ReaderID,96,4,Key);

System.out.printf("KeyAuthorization=%d",rt);System.out.println();

rt =rfidreader.YW_ReadaBlock(ReaderID,4,16,BlockData);

System.out.printf("YW_ReadaBlock=%d",rt);System.out.println();

if(rt>0){HexToStr(BlockData,16);}

rfidreader.YW_Led(ReaderID,1,1,1,3,0);

rfidreader.YW_USBHIDFree();

以下java代码例子包含了读卡和写卡的,可以使用32位或者64的dll,Java JNI调用IC卡读卡器例程


版权与免责声明:
1.凡本网注明"来源:全球供应商网"的所有作品,版权均属于全球供应商网,转载请必须注明全球供应商网。违反者本网将追究相关法律责任。
2.企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
3.本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。 4.如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系。