操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石,操作系统提供了一个让用户可以与计算机软硬件交互的操作平台。目前,主流的操作系统有微软的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等。我们相信在大家的共同努力下,未来可以把中国的操作系统生态建设得更好。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐