身份证阅读器在国产操作系统Linux内核中的二次开发
操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石,操作系统提供了一个让用户可以与计算机软硬件交互的操作平台。目前,主流的操作系统有微软的Windows、谷歌的Android和苹果公司的IOS,还有以Linux为主的开源操作系统。近两年来国际形势严峻,软件、硬件断供事件频发,国产替代的呼声越来越响,这也给了国产操作系统新的机会,我们发现国产操作系统还是悄悄的崛起了。一般
操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石,操作系统提供了一个让用户可以与计算机软硬件交互的操作平台。目前,主流的操作系统有微软的Windows、谷歌的Android和苹果公司的IOS,还有以Linux为主的开源操作系统。近两年来国际形势严峻,软件、硬件断供事件频发,国产替代的呼声越来越响,这也给了国产操作系统新的机会,我们发现国产操作系统还是悄悄的崛起了。
一般来说,国产操作系统多为以Linux为基础进行二次开发,尤其是在微软不断终止老版本操作系统服务支持的大背景下,工信部对此表示将加大力度支持Linux的国产操作系统的研发,也正是依托开源生态以及政策东风,国产操作系统浪潮愈加猛烈,也涌现出了越来越多好用的产品。目前国产操作系统主要有深度Linux、优麒麟、中标麒麟、华为鸿蒙 OS等。
身份证阅读器被广泛用于
●公安:身份证申领、户口登记迁移、人口管理等。 旅馆:住宿登记等。
●民政:求学、就业、参军、婚姻登记等。
● 民航:机票购买、登机等。
●银行:开户、信用卡交易、大额取款等。
● 邮局:领取邮件汇款等。
●电信:电话手机开户、各种通信业务等。
● 证券:股票、期货交易等领域。
随着国产操作系统的崛起和发展,身份证阅读器如何在国产操作系统上进行系统对接呢?首先,我们通过身份证阅读器对国产操作系统进行了适配,这样可以方便终端用户的使用。同时,也需要提供SDK方便软件开发者和系统集成商为用户提供深度的系统功能定制。
国产操作系统是基于Linux内核开发的,这就要求身份证阅读器要需要提供基于Linux操作系统的二次开发包。如何实现在Linux系统上对身份证阅读器进行二次开发?请参考如下范例。
1、引入头文件和定义字符格式
#include "LotusCardDriver.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include <unistd.h>
#define CHAR_LEN_UNICODE 2
#define CHAR_LEN_UTF8 3
2、初始化主函数,调用打开身份证阅读器函数。
int main()
{
BOOL bResult = FALSE;
long hLotusCard = LotusCardOpenDevice("",0,0,0,0,NULL);//打开设备
if( hLotusCard != -1)
{
printf("open success!\r\n");
// TestIcCard(hLotusCard);
// TestGetTwoGenerationIdCardNo(hLotusCard);
// TestIdCard(hLotusCard);
Test7816(hLotusCard);
LotusCardCloseDevice(hLotusCard);
}else
{printf("error %d\r\n", hLotusCard);}
return hLotusCard;}
打开设备函数在头文件中进行了定义,代码如下:
/**
* 打开设备
*
* @param strDeviceName
* 串口设备名称
* @param nVID
* USB设备VID
* @param nPID
* USB设备PID
* @param nUsbDeviceIndex
* USB设备索引
* @param unRecvTimeOut
* 接收超时
* @param pLotusCardExtendReadWriteCallBack 外部读写通道回调函数 只要针对ANDROID
* 如果没有设备写权限时,可以使用外部USB或串口进行通讯,
* 需要改造callBackProcess中相关代码完成读写工作 目前范例提供USB操作
* @return true=成功
*/
LotusHandle WINAPI LotusCardOpenDevice(char * pszDeviceName, int nVID, int nPID, int nUsbDeviceIndex, unsigned int unRecvTimeOut, LotusCardExtendReadWriteCallBack pLotusCardExtendReadWriteCallBack);
如果身份证阅读器是USB设备,在LotusCardOpenDevice("",0,0,0,0,NULL);//打开设备第一个参数留空即可,如果身份证阅读器是串口通信在打开设备第一个参数中传入正确的COM端口号,波特率默认112500.
3、执行二代证阅读函数,这里以二代证云解析阅读为例。
void TestIdCard(LotusHandle hLotusCard)
{
char szLog[256] = {0};
char szUtf8Tmp[256] = {0};
LotusCardParamStruct sttLotusCardParam;
BOOL bResult = FALSE;
bResult = LotusCardBeep(hLotusCard, 10);
unsigned int nCardNo = 0;
char szData[256] ={0};
char szTmp[256] = {0};
unsigned int unCyc = 0;
char szTwoGenerationIdCardNo[64] = {0};
wchar_t wstrTmp[256] = {0};
char szErrorInfo[256] = {0};
TwoIdInfoStruct sttTwoIdInfo;
int nErrorCode = 0;
memset(&sttTwoIdInfo, 0x00, sizeof(TwoIdInfoStruct));
if(FALSE == bResult) return;
bResult = LotusCardBeep(hLotusCard,10);
if(FALSE == bResult)
{
sprintf(szLog, "%s","LotusCardBeep 执行失败");
AddLog(szLog);
return;
}
bResult = LotusCardSetCardType(hLotusCard, 'B');
if(FALSE == bResult)
{
sprintf(szLog, "%s","LotusCardSetCardType 执行失败");
AddLog(szLog);
return;
}
bResult = LotusCardGetTwoGenerationIDCardNo(hLotusCard,szTwoGenerationIdCardNo,sizeof(szTwoGenerationIdCardNo));
if(FALSE == bResult)
{
sprintf(szLog, "%s","LotusCardGetTwoGenerationIDCardNo 执行失败");
AddLog(szLog);
return;
}
sprintf(szLog, "CARDNO:%s",szTwoGenerationIdCardNo);
AddLog(szLog);
bResult = LotusCardGetTwoIdInfoByMcuServer(hLotusCard,"samv.highwillow.cn",xxxx,"xxxx",&sttTwoIdInfo,400000,0,2);
if(FALSE == bResult)
{
nErrorCode = LotusCardGetTwoIdErrorCode(hLotusCard);
LotusCardGetTwoIdErrorInfo(hLotusCard, (TwoIdErrorCode)nErrorCode,szErrorInfo, sizeof(szErrorInfo));
sprintf(szLog, "LotusCardGetTwoIdInfoByMcuServer 执行失败, 错误码 %d ",nErrorCode);
AddLog(szLog);
sprintf(szLog, "错误描述:%s",szTwoGenerationIdCardNo);
AddLog(szLog);
return;
}
memset(&wstrTmp, 0x00, sizeof(wstrTmp));
memcpy(&wstrTmp, &sttTwoIdInfo.arrTwoIdName, sizeof(sttTwoIdInfo.arrTwoIdName));
UnicodeToUTF_8(szUtf8Tmp, (char *)&wstrTmp);
AddLog(szUtf8Tmp);
if( sttTwoIdInfo.unTwoIdPhotoJpegLength>0)
{
//这个里面是JPEG数据
FILE * fJpeg = fopen("./1.jpg","wb");
if(NULL != fJpeg)
{ fwrite(sttTwoIdInfo.arrTwoIdPhotoJpeg,sttTwoIdInfo.unTwoIdPhotoJpegLength,1,fJpeg);
fclose(fJpeg);
} }
}
读取效果如下:
身份证阅读器接入国产操作系统
以上内容是国产操作系统中接入身份证阅读器的部分内容,SDK支持深度Linux、优麒麟、中标麒麟、华为鸿蒙 OS、统信UOS等国产操作系统也支持ubuntu、debian等。我们相信在大家的共同努力下,未来可以把中国的操作系统生态建设得更好。
更多推荐
所有评论(0)