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

身份证阅读器在国产操作系统Linux内核中的二次开发相关推荐

  1. 分享:用Python语言轻松实现二代身份证阅读器(读卡器)自动读卡,支持定制开发

    人工智能的兴起,最近这段时间碰到很多开发工程师咨询Python语言二次开发使用身份证阅读器的问题,这次特增加了Python语言的demo,供大家参考使用. 先上Python界面的读取效果图: 1.说明 ...

  2. python能调用身份证读卡器吗_最近的项目中用到读卡器,用的华视身份证阅读器,附上SDK使用手册...

    最近的项目中用到读卡器,用的华视身份证阅读器,附上SDK使用手册 1.定义 应用函数开发包含下列文件: termb.dll      API函数的动态联接库 sdtapi.dll     内部动态库 ...

  3. 最近的项目中用到读卡器,用的华视身份证阅读器,附上SDK使用手册

    <script type="text/javascript">// </script> <script type="text/javascr ...

  4. Linux内核中的vfs,解析 Linux 中的 VFS 文件系统机制

    在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构.Linux的最重要特征之一就是支持多种文件系统,这样它更加灵 活,并可以和许多其它种操作系统共存.由于系统已将Linux文件系统的 ...

  5. IDR221F-H身份证阅读器模块基于国产UOS 系统(Linux内核)下的调用操作说明

    IDR221F-H身份证阅读器模块除支持Win系列操作系统,也支持国产操作系统,如通信UOS.银河麒麟Kylin.中标麒麟.Ubuntu.鸿蒙等操作系统,在基于UOS 系统(Linux内核)下的应用, ...

  6. 精伦身份证阅读器php_精伦IDR210-1(免驱)身份证阅读器

    产品概述 精伦IDR210-1身份证读卡器是一款多功能 .免装驱动程序的射频卡读写器,可根据需求配置不同部件实现不同射频卡的读取和写入功能. 精伦IDR210-1配置了专用身份证安全控制模块(SAM) ...

  7. 东控智能IDR-100U身份证阅读器怎么样?

    有人听说过这款身份证阅读器吗?外观可以定制,下面有它的介绍和一些参数 IDR-100U台式居民身份证读卡器 产品简介: IDR-100U台式居民身份证阅读机具是广东东控智能科技有限公司为各有关单位方便 ...

  8. 公安部身份证阅读器模块SAM通讯协议

    公安部身份证阅读器模块SAM通讯协议 图为:公安部身份证阅读器SAM模块照片 图为:东信新一代小身份证SAM模块 支持Windows.Android.Linux.ARM.单片机等各系统二次开发. 一. ...

  9. 华视100UC 身份证阅读器 Java

    华视100UC 身份证阅读器 Java 哪位大佬有64位可用的dll文件,施舍给小弟吧,万分感谢 功能 环境 个人想法(有不对的地方希望大佬指正) 对于dll文件的想法 目录结构 1. pom.xml ...

  10. 华视身份证阅读器SDK使用手册

    华视身份证阅读器SDK使用手册 V1.33 华视电子读写设备有限公司  2008年07月11日 概述 本手册是操作身份证阅读器动态库应用函数的定义格式.调用方法和返回值的说明.在使用前,请确认授权文件 ...

最新文章

  1. android wlan0 网卡过程,android WIFI网络驱动之wpa_supplicant程序详解
  2. HDU 1559 最大子矩阵
  3. 存档丢失以后再补之R语言与logistic模型
  4. 近300万记录的论坛还用这个分页存储过程
  5. 四、操作系统——读者写者问题(详解)
  6. 1.5编程基础之循环控制 24 正常血压
  7. Swing basic
  8. git小乌龟下载及汉化
  9. Webstorm克隆Git后npm install报错
  10. python车牌识别使用训练集_TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
  11. 《安富莱嵌入式周报》第228期:2021.08.30--2021.09.05
  12. 代码与国家地区对照表
  13. 利用ip138取得公网IP,公网ip改变后报警通知我们进行更改
  14. 两个路由器互连设置方法
  15. JavaSE学习总结(十四)Map集合/Map和Collection的区别/HashMap/LinkedHashMap/TreeMap/集合间的嵌套/Hashtable/Collections工具类
  16. JavaScriptAPI编程_History对象(获取浏览历史)
  17. Android4.4之后休眠状态下Alarm不准时的问题
  18. request 使用方法
  19. 关于SVN安装目录下,没有svn.exe程序的解决
  20. android 分割线 整洁,Android-RecyclerView分割线(水平/垂直/网格)

热门文章

  1. Unity3D学习笔记——物理引擎
  2. 嵌入式大佬 | 嵌入式C语言知识点万字总结
  3. ue4 unreal 使用 Download Image 下载图片 下载多张图片 批量下载 类似untiy协程
  4. cad设计师证书怎么考
  5. 艾肯声卡调试方法【必看】
  6. JDK7升级到JDK8
  7. centos 6.8 安装mysql
  8. 千万流量大型分布式系统架构设计实战(干货)
  9. win10系统realtek高清晰音频管理器有什么用
  10. 华为参与《基于5G技术的医院网络建设标准》的制定