DONSEE东信智能 - 身份证社保卡读卡智能终端应用服务商

eastcoms@qq.com
400-6722-705
首页 > 服务支持专区 > 产品支持 > SDK开发包和软件下载

EST-100/EST-100GS/EST-J13X系列国产操作系统开发包(麒麟KylinOS、统信UOS等)

来源:www.eastcoms.com   标签:麒麟 KylinOS 统信 UOS 国产系统 Linux   发布时间: 2023-3-17 14:23:33

广东东信智能科技有限公司DONSEE系列产品

广东东信智能科技有限公司DONSEE系列多功能身份证社保卡读卡器国产操作系统Linux开发包(麒麟KylinOS、统信UOS等),支持  EST-100、EST-100GS、EST-100M(HID)、EST-J13X、EST-100G、EST-100R等机型,功能包括身份证信息读取、社保卡信息读取、IC卡、CPU卡读取,仅供开发人员和测试人员使用。


国产系统开发包下载地址:

DONSEE SDK for 国产系统(麒麟、统信)(20240402)

DONSEE SDK for 国产系统Web开发包下载(20240325)

OpenHarmony鸿蒙系统开发包下载(V1.0.2)


更早版本:

DONSEE SDK for 国产系统(麒麟、统信)(20240325)

DONSEE SDK for 国产系统(麒麟、统信)(20231024)

DONSEE SDK for 国产系统(麒麟、统信)(20230826)

DONSEE SDK for 国产系统(麒麟、统信)

DONSEE SDK for 国产系统Web开发包下载

国产系统麒麟测试效果

国产操作系统统信测试效果

麒麟国产系统网页测试截图

统信国产系统网页测试截图

为更好的推广信创适配产品认证,广东东信智能科技有限公司EST-100、EST-100GS、EST-100R、EST-J13X等机型已完成国产系统麒麟KylinOS、统信UOS的适配认证。

EST-100多功能智能卡读写器-统信互认证书.jpg

EST-J13X多功能智能卡读写器模组国产系统麒麟系统认证.jpg

#include "donsee.h"

int main()

{

long t_nHandle = -99;

int i = 0;

char pszError[128];

unsigned char Response[1024] = {0};

long t_nRe;

printf("********************************************************\n");

printf("请输入数字选择需要测试的功能:\n");

printf("0、测试蜂鸣器和版本号\n");

printf("1、测试 身份证\n");

printf("2、测试 社保卡\n");

printf("3、测试 M1 卡\n");

printf("4、测试 非接触CPU卡\n");

printf("5、测试 银行卡\n");

printf("6、测试 15693卡\n");

printf("7、测试 接触CPU卡\n");

printf("8、测试 磁条卡\n");

printf("9、测试 4442卡\n");

printf("10、测试 北京通卡\n");

printf("11、关闭射频天线\n");

printf("********************************************************\n");

int t_nIndex;

scanf("%d", &t_nIndex);

if (t_nIndex == 0) //测试版本号和蜂鸣器

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

t_nRe = Donsee_Version(Response);

printf("设备版本号:%s\n", Response);

Donsee_Beep(t_nHandle, 0x16);

Donsee_Close();

}

if (t_nIndex == 1) //测试身份证

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

memset(Response, 0, 1024);

// t_nRe = Donsee_ReadIDCardUid(Response);   //身份证Uid,有需要的可以这里获取

// printf("Donsee_ReadIDCardUid返回:%s\n", Response);

IDINFO idInfo;

char t_arrMsg[256];

// nType [in]:设置身份证读卡类型:0,文本信息;1,文本+照片;2,文本+照片+指纹

// nMode [in]:设置读卡模式:0,读卡1次、拿开后放上重读;1,连续读卡

int nType = 1;

int nMode = 1;

memset(&idInfo, 0, sizeof(IDINFO));

char t_szPath[256] = "IDPhoto.bmp";

// char t_szPath[256] = "";

// char t_szPath[256] = NULL;

t_nRe = Donsee_ReadIDCard(nType, nMode, t_szPath, &idInfo, t_arrMsg);

if (t_nRe != 0)

{

printf("读身份证失败\n");

Donsee_Close();

return -2;

}

else

{

Donsee_Beep(t_nHandle, 0x16);

printf("读身份证成功\n");

printf(("中文姓名:%s\n"), idInfo.name);

printf(("英文姓名:%s\n"), idInfo.ENfullname);

printf(("性    别:%s\n"), idInfo.sex);

printf(("民    族:%s\n"), idInfo.people);

printf(("出身日期:%s\n"), idInfo.birthday);

printf(("住    址:%s\n"), idInfo.address);

printf(("身份证号:%s\n"), idInfo.number);

printf(("签发机关:%s\n"), idInfo.organs);

printf(("有效期开始:%s\n"), idInfo.signdate);

printf(("有效期结束:%s\n"), idInfo.validterm);

printf(("证件类别:%s\n"), idInfo.certType);

printf(("证件版本:%s\n"), idInfo.certVersion);

printf(("通行证号:%s\n"), idInfo.passNu);

printf(("签发数次:%s\n"), idInfo.signCount);

// printf(("照片文件名:%s\n"), t_cValue);

// printf("1024相片原始数据:\n");

// int i ;

// for ( i = 0; i < 1024; i++)

//{

//printf("%02X ", idInfo.Photo[i]);

//}

// printf("\n");

// if (nType == 2)

//{

//printf("1024指纹数据:\n");

//for ( i = 0; i < 1024; i++)

//{

//;//printf("%02X ", (unsigned char)idInfo.figData[i]);

//}

// }

Donsee_Close();

}

}

if (t_nIndex == 2) //测试社保卡,三代社保卡需要Psam秘钥才能读取,二代卡不需要(只能插卡读取)

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

SSCard_IDINFO cardInfo;

memset(&cardInfo, 0, sizeof(cardInfo));

long t_nRead = Donsee_ReadSSCard(0x11, &cardInfo, pszError);

if (t_nRead != 0)

{

printf("读社保卡失败,MSG:%s\n", pszError);

Donsee_Close();

return -2;

}

else

{

Donsee_Beep(t_nHandle, 0x16);

printf("读社保卡成功\n");

printf("姓名:%s\n", cardInfo.name);

printf("性别:%s\n", cardInfo.sex);

printf("民族:%s\n", cardInfo.nation);

printf("出生日期:%s\n", cardInfo.birthday);

printf("发证日期:%s\n", cardInfo.signdate);

printf("有效日期:%s\n", cardInfo.validterm);

printf("卡号:%s\n", cardInfo.cardnumber);

printf("社会保障号码(身份证号):%s\n", cardInfo.idnumber);

printf("城市代码:%s\n", cardInfo.city);

printf("社保卡版本:%s\n", cardInfo.cardveVrsion);

Donsee_Close();

}

}

if (t_nIndex == 3) //测试M1卡

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

char t_chMsgM1[256] = "";

// t_nRe = Donsee_ReadICUid(t_chMsgM1);  //功能未实现

// if (t_nRe == 0)

//{

//printf("M1 卡 获取UID成功,UID:%s\n", t_chMsgM1);

// }

// M1寻卡

t_nRe = Donsee_ICRequest();

if (t_nRe != 0)

{

printf("M1 卡片请求 失败,返回值:%ld\n", t_nRe);

}

t_nRe = Donsee_ICAnticoll(t_chMsgM1); //防碰撞可以出来uid,M1和cpu卡都支持

if (t_nRe != 0)

{

printf("M1 卡片防碰撞 失败,返回值:%ld\n", t_nRe);

}

t_nRe = Donsee_ICSelect(0x41);

if (t_nRe != 0)

{

printf("TypeA 卡片选择 失败,返回值:%ld\n", t_nRe);

}

printf("M1 寻卡成功");

printf("M1 卡 获取UID成功,UID:%s\n", t_chMsgM1);

int t_nKeyMode = 0x60; // KeyA

int t_nAdd = 5;

t_nRe = Donsee_M1VerifyPass(t_nKeyMode, t_nAdd / 4, "FFFFFFFFFFFF");

if (t_nRe != 0)

{

printf("M1 卡片 Donsee_M1VerifyPass 密钥认证 失败,返回值:%ld", t_nRe);

}

else

printf("M1 卡 Donsee_M1VerifyPass 密钥认证 成功\n");

unsigned char t_chKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

t_nRe = Donsee_M1VerifyPassHex(t_nKeyMode, t_nAdd / 4, t_chKey);

if (t_nRe != 0)

{

printf("M1 卡片 Donsee_M1VerifyPassHex 密钥认证 失败,返回值:%ld", t_nRe);

}

else

printf("M1 卡 Donsee_M1VerifyPassHex 密钥认证 成功\n");

char t_pszReadData[128] = "";

t_nRe = Donsee_M1Read(t_nAdd, t_pszReadData);

if (t_nRe != 0)

{

printf("M1 卡片读卡 失败,返回值:%ld\n", t_nRe);

}

else

printf("M1 卡 读取第 %d 块数据 成功,Data:%s\n", t_nAdd, t_pszReadData);


t_nRe = Donsee_M1Write(t_nAdd, "0102030405060708090001020304050A");

if (t_nRe != 0)

{

printf("M1 卡片写卡 失败,返回值:%ld\n", t_nRe);

}

else

printf("M1 卡 写入第 %d 块数据: 0102030405060708090001020304050A, 成功\n", t_nAdd);

memset(t_pszReadData, 0, 128);

t_nRe = Donsee_M1Read(t_nAdd, t_pszReadData);

if (t_nRe != 0)

{

printf("M1 卡片读卡 失败,返回值:%ld\n", t_nRe);

}

else

printf("M1 卡 读取第 %d 块数据 成功,Data:%s\n", t_nAdd, t_pszReadData);


unsigned long t_nValue = 256;

t_nRe = Donsee_M1Initval(t_nAdd, t_nValue);

if (t_nRe != 0)

{

printf("M1 卡片初始化值 失败,返回值:%ld\n", t_nRe);

}

else

printf("M1 卡 卡片初始化第 %d 块 值  成功\n", t_nAdd);

t_nRe = Donsee_M1Increment(t_nAdd, 100);

if (t_nRe != 0)

{

printf("M1 卡片增值 失败,返回值:%ld\n", t_nRe);

}

else

printf("M1 卡 卡片增值 第 %d 块  成功\n", t_nAdd);

t_nRe = Donsee_M1Decrement(t_nAdd, 20);

if (t_nRe != 0)

{

printf("M1 卡片减值 失败,返回值:%ld\n", t_nRe);

}

else

printf("M1 卡 卡片减值第 %d 块 成功\n", t_nAdd);


t_nRe = Donsee_M1Readval(t_nAdd, &t_nValue);

if (t_nRe != 0)

{

printf("M1 卡片读值 失败,返回值:%ld\n", t_nRe);

}

else

printf("M1 卡 卡片读值 %d 块   成功,Value = %ld\n", t_nAdd, t_nValue);

t_nRe = Donsee_M1LoadKey(t_nKeyMode, t_nAdd / 4, "FFFFFFFFFFFF");

if (t_nRe != 0)

{

printf("M1 卡片加载密钥 失败,返回值:%ld\n", t_nRe);

}

else

printf("M1 卡 卡片加载到密钥 第%d扇区   成功\n", t_nAdd / 4);

t_nRe = Donsee_M1Verify(t_nKeyMode, t_nAdd / 4);

if (t_nRe != 0)

{

printf("M1 卡片认证加载密钥 第%d扇区 失败,返回值:%ld\n", t_nAdd / 4, t_nRe);

}

else

printf("M1 卡 卡片认证加载密钥 第%d扇区   成功\n", t_nAdd / 4);

Donsee_Beep(t_nHandle, 0x16);

Donsee_Close();

}

if (t_nIndex == 4) //测试非接触式CPU卡

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

char t_arrDataRe[32] = {0};

char t_arrDataUID[8] = {0};

long t_nSet = Donsee_SetTypeA();

if (t_nSet != 0)

{

printf("TypeA 设置失败\n") ;

Donsee_Close() ;

return false;

}

long t_nReq = Donsee_ICRequest();

{

printf("TypeA 请求失败\n") ;

Donsee_Close() ;

return false;

}

long t_nAtl = Donsee_ICAnticoll(t_arrDataUID);

{

printf("TypeA 防碰撞失败\n") ;

Donsee_Close() ;

return false;

}

printf("TypeA_Anticoll:%s\n", t_arrDataUID);


long t_nSel = Donsee_ICSelect(0x41);

{

printf("TypeA 选卡失败\n") ;

Donsee_Close() ;

return false;

}

t_nRe = Donsee_PowerOnTypeA(t_arrDataRe);

{

printf("TypeA 上电失败") ;

Donsee_Close() ;

return false;

}

printf("TypeA_ATR:%s\n", t_arrDataRe);

memset(Response, 0, 1024);

printf("TypeA-APDU发送:0084000008\n");

t_nRe = Donsee_APDUType("0084000008", Response);

printf("TypeA-APDU返回:%s\n", Response);

Donsee_Beep(t_nHandle, 0x16);

Donsee_Close();

}

if (t_nIndex == 5) //测试银行卡

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

char t_szBankNo[128] = "";

char *p, *q;

unsigned char tmp;

t_nRe = Donsee_GetBankCardNo(t_szBankNo);

if (t_nRe != 0)

printf("读取银行卡号失败\n");

else

{

tmp = (unsigned char)(strchr(t_szBankNo, 'D') - t_szBankNo);

q = (tmp > 0) ? strndup(t_szBankNo, tmp) : strdup(t_szBankNo);

printf("读取银行卡号成功:%s\n", q);

Donsee_Beep(t_nHandle, 0x16);

}

Donsee_Close();

}

if (t_nIndex == 6) //测试15693卡

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

char t_chMsg15693[256] = "";

t_nRe = Donsee_15693_Find(t_chMsg15693);

if (t_nRe != 0)

{

printf("15693 寻卡失败,返回值:%ld\n", t_nRe);

}

else

printf("15693 寻卡成功,UID:%s\n", t_chMsg15693);


t_nRe = Donsee_15693_Info(t_chMsg15693);

if (t_nRe != 0)

{

printf("15693 卡信息获取失败,返回值:%ld\n", t_nRe);

}

else

printf("15693 卡信息获取成功,CardInfo:%s\n", t_chMsg15693);

unsigned char t_nBlkAdd = 0x00;

memset(t_chMsg15693, 0, 256);

t_nRe = Donsee_15693_Read(t_nBlkAdd, t_chMsg15693);

if (t_nRe != 0)

{

printf("15693 卡读卡失败,返回值:%ld\n", t_nRe);

}

else

printf("15693 卡读卡成功,Data:%s\n", t_chMsg15693);


t_nRe = Donsee_15693_Write(t_nBlkAdd, "88898685");

if (t_nRe != 0)

{

printf("15693 卡写卡失败,返回值:%ld\n", t_nRe);

}

else

printf("15693 卡写卡成功,Data:88898685\n");


memset(t_chMsg15693, 0, 256);

t_nRe = Donsee_15693_Read(t_nBlkAdd, t_chMsg15693);

if (t_nRe != 0)

{

printf("15693 卡读卡失败,返回值:%ld\n", t_nRe);

}

else

printf("15693 卡读卡成功,Data:%s\n", t_chMsg15693);

Donsee_Beep(t_nHandle, 0x16);

Donsee_Close();

}

if (t_nIndex == 7) //测试接触式CPU卡

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

memset(Response, 0, 1024);

t_nRe = Donsee_ColdPowerOn(0x01, Response);

printf("cpu冷复位:%s\n", Response);

memset(Response, 0, 1024);

t_nRe = Donsee_HotPowerOn(0x01, Response);

printf("cpu热复位:%s\n", Response);

memset(Response, 0, 1024);

t_nRe = Donsee_PowerOn(0x01, Response);

printf("cpu复位:%s\n", Response);

memset(Response, 0, 1024);

printf("cpu-APDU发送:0084000008\n");

t_nRe = Donsee_APDU(0x01, "0084000008", Response);

printf("cpu-APDU返回:%s\n", Response);

Donsee_Beep(t_nHandle, 0x16);

Donsee_Close();

}

if (t_nIndex == 8) //测试磁条卡

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

unsigned char t_nTime = 15;

int t_nTrack = 2;

char t_pszTrackData[512] = "";

t_nRe = Donsee_ReadMagCard(t_nTime, t_nTrack, t_pszTrackData);

if (t_nRe != 0)

{

printf("磁条卡刷卡失败,返回值:%ld\n", t_nRe);

}

else

printf("磁条卡刷卡成功,TrackData:%s\n", t_pszTrackData);

//设置主动输出

unsigned char szConfig[3] = {0x02, 0x00, 0x01};

// t_nRe = Donsee_ReadMagType(0x00,szConfig) ;

// if (t_nRe != 0)

// printf("磁条卡设置主动输出失败,返回值:%ld\n", t_nRe);

// else

// printf("磁条卡设置主动输出成功\n");

//设置被动输出

// t_nRe = Donsee_ReadMagType(0x01,szConfig) ;

// if (t_nRe != 0)

// printf("磁条卡设置被动输出失败,返回值:%ld\n", t_nRe);

// else

// printf("磁条卡设置被动输出成功\n");

Donsee_Beep(t_nHandle, 0x16);

Donsee_Close();

}

if (t_nIndex == 9) //测试4442卡

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

char t_chMsg4442[256] = "";

t_nRe = Donsee_4442_PowerOn(t_chMsg4442);

if (t_nRe == 0)

{

printf("4442 卡 上电成功,UID:%s\n", t_chMsg4442);

}

int t_nCount;

t_nRe = Donsee_4442_ReadCount(&t_nCount);

if (t_nRe == 0)

{

printf("4442 卡 密钥认证剩余次数:%d次\n", t_nCount);

}

memset(t_chMsg4442, 0, 256);

t_nRe = Donsee_4442_Read(32, 16, t_chMsg4442);

if (t_nRe == 0)

{

printf("4442 卡 读卡成功,Data:%s\n", t_chMsg4442);

}

t_nRe = Donsee_4442_Verify("FFFFFF");

if (t_nRe == 0)

{

printf("4442 卡 密钥认证成功\n");

}

t_nRe = Donsee_4442_Write(32, 16, "AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDD");

if (t_nRe == 0)

{

printf("4442 卡 写卡成功,Data:AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDD\n");

}


t_nRe = Donsee_4442_Read(32, 16, t_chMsg4442);

if (t_nRe == 0)

{

printf("4442 卡 读卡成功,Data:%s\n", t_chMsg4442);

}

t_nRe = Donsee_4442_WriteProtect(0, 16, "AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDD");

if (t_nRe == 0)

{

printf("4442 卡 写卡保护成功,Data:AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDD\n");

}


t_nRe = Donsee_4442_ReadProtect(0, 16, t_chMsg4442);

if (t_nRe == 0)

{

printf("4442 卡 读卡保护成功,Data:%s\n", t_chMsg4442);

}

t_nRe = Donsee_4442_PowerOff();

if (t_nRe == 0)

{

printf("4442 卡 下电成功\n");

}

Donsee_Beep(t_nHandle, 0x16);

Donsee_Close();

}

if (t_nIndex == 10) //测试北京通卡

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

BJT_IDINFO idInfo;

char t_arrMsg[256];

memset(&idInfo, 0, sizeof(BJT_IDINFO));

t_nRe = Donsee_ReadBJTIDCard(&idInfo, t_arrMsg);

if (t_nRe != 0)

{

printf("读取北京通失败\n");

Donsee_Close();

return -2;

}

else

Donsee_Beep(t_nHandle, 0x16);

printf("读取北京通成功\n");

printf(("姓名:%s\n"), idInfo.name);

printf(("性 别:%s\n"), idInfo.sex);

printf(("北京通号:%s\n"), idInfo.cardnumber);

printf(("卡片类型:%s\n"), idInfo.nType);

printf(("证件名称:%s\n"), idInfo.cardName);

printf(("发卡机构:%s\n"), idInfo.organs);

t_nRe = Donsee_ReadBJTIDCard_Photo("./bjt.jpg", t_arrMsg);

if (t_nRe != 0)

{

printf("读取北京通头像失败\n");

Donsee_Close();

return -2;

}

else

printf("读取北京通头像成功\n");

Donsee_Close();

}

if (t_nIndex == 11) //关闭射频天线

{

t_nHandle = Donsee_Open("USB");

if (t_nHandle != 0)

{

printf("连接读卡器失败,t_nRe = %ld\n", t_nHandle);

return -1;

}

Donsee_SwitchRF(0); // 0 关闭天线,1 打开天线

Donsee_Close();

}

}


以下为老的SDK保留备份使用:

DONSEE SDK for 麒麟KylinOS下载(旧SDK)

DONSEE SDK for 统信UOS下载(旧SDK)





 

 
QQ在线咨询