用QT做串口通讯,自己用的是一所的身份证模块

首先说明QT里面用作串口通讯的是 QSerialPort ,QSerialPortInfo

按照流程

1:检索串口,找到电脑上可以用的串口号

2:打开串口

3:找卡—>选卡—>读卡——>解析

首先这是ui界面

1:检索串口

void Widget::search_seriaport()//检索串口
{seriaport = new QSerialPort;//new一个串口类对象出来if(seriaport != NULL){foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {//检索可用的串口,并将它显示在ui里面的combobox里面QSerialPort seria_port;seria_port.setPort(info);if(seria_port.open(QIODevice::ReadWrite)){if(ui->comboBox->count() != 0){for(int i=0;i<ui->comboBox->count();i++){if(ui->comboBox->itemText(i).compare(seria_port.portName()) == 0)ui->textEdit->append(QString::fromLocal8Bit("端口已经找到,并且已经显示"));elseui->comboBox->addItem(seria_port.portName());}}elseui->comboBox->addItem(seria_port.portName());}seria_port.close();}}else{qDebug()<<"seriaport is null"<<endl;}
}
  2:打开串口
void Widget::openport()
{if(seriaport == NULL)seriaport = new QSerialPort;if(seriaport->isOpen())seriaport->close();if(ui->comboBox->count() != 0){seriaport->setPortName(ui->comboBox->currentText());//设置端口名seriaport->setBaudRate(QSerialPort::Baud115200);//设置波特率seriaport->setDataBits(QSerialPort::Data8);//设置位数seriaport->setStopBits(QSerialPort::OneStop);//设置停止位数seriaport->setParity(QSerialPort::NoParity);//设置奇偶性校验seriaport->setFlowControl(QSerialPort::NoFlowControl);//设置控制流seriaport->setReadBufferSize(1024);//设置读取的大小if(!seriaport->open(QIODevice::ReadWrite))qDebug()<<"seriaport open error"<<endl;bool  flag = connect(seriaport,SIGNAL(readyRead()),this,SLOT(hand_card()));ui->textEdit->append(QString("%1").arg(flag));qDebug()<<flag<<endl;QByteArray array = QByteArray::fromHex("");//这里是一所的键入密令,这里不便给出seriaport->write(array);qDebug()<<QString::fromLocal8Bit("seriaport is open")<<ui->comboBox->currentText()<<endl;CurrentType = OPEN;}}

3:找卡——>选卡——>读卡——>解析

这里要说一下,找卡,选卡,读卡代码都是差不多,只是写入seriaport里面的命令不一样而已,这里是上找卡的函数

void Widget::find_card()
{if(seriaport->isOpen()){QByteArray array = QByteArray::fromHex("");//找卡的命令,按要求命令不便给出char CHK_SUM = 0;for(int i = 5;i<array.size();i++)//按要求进行按位异或{CHK_SUM ^= array.at(i);}array.append(CHK_SUM);seriaport->write(array);CurrentType = FIND;}
}

后面就是获取的数据了

void Widget::hand_card()
{SeriaPortData = seriaport->readAll();sleep(5)//睡眠5秒是为了让获取的数据能读完
}

解析数据,是最为麻烦,也是最刺激的,因为老是有编码的原因,我们要将16进制的数据转换为中文或者数字,这里需要用到QChar,或者wchar_t,以及对应的QString::fromRawData(const QChar *unicode, int size)和QString::fromWCharArray(const wchar_t *string, int size = -1),还有要说一下因为第二个参数都是size,但是对于16进制的数来说,后面会有\0的,所以这里我们要用strlen()函数来求长度哦。

这里类比一个姓名

        char ch[2048] =  {0};qDebug()<<"204"<<SeriaPortData<<endl;qDebug()<<"207:"<<SeriaPortData.size()<<endl;memcpy(ch,SeriaPortData,2048);qDebug()<<"205"<<ch<<endl;wchar_t name[30]={0};memcpy(name,ch+14,30);qDebug()<<"214"<<QString::fromWCharArray(name,strlen((const char*)name))<<endl;

最终的效果:

用QT做串口通讯,读取身份证信息相关推荐

  1. C# 使用串口分析SAM协议,读取身份证信息

    目录 一.身份证读卡器使用SAM协议使用以下报文进行通讯: 1.寻找身份证信息 2.选取身份证信息 3.读取身份证信息(文字+照片信息) 4 .读取身份证信息(文字+照片+指纹特征点信息) 二.程序介 ...

  2. 身份证读取设备开发解决方案:2、Android下通过usb转串口读取身份证信息

    身份证读取设备开发解决方案:2.Android下通过usb转串口读取身份证信息 文章目录 身份证读取设备开发解决方案:2.Android下通过usb转串口读取身份证信息 1. 前言 2. 准备 3. ...

  3. web读取身份证信息(java语言)

    其实实现读取身份证信息,代码其实没有多难,关键需要和硬件的厂商协调好,看他们的硬件是否支持二次开发(一般都支持).如果支持我们需要和他们拿到他们底层的jar包和api(接口文档),要是有demo就更好 ...

  4. 基于华视身份证读卡器读取身份证信息的Android demo

    项目概述 本Demo需要华视的身份证读卡器,连接Android机器设备,当身份证读卡器读取到身份证信息后,立马展示出身份证信息数据.得到身份证的姓名.照片.出生年月等数据. 项目概述 本Demo需要华 ...

  5. 用python读取身份证信息的功能分析与实现,兼述python调用dll的方法

    背景 有这样一个需求,要求能自动读取用户的身份证信息.如果是一代身份证,这个功能恐怕只能通过图像识别的办法来解决了.不过现在二代身份证已经很普及.客户要求能读二代身份证就可以了. 现在二代身份证阅读器 ...

  6. 浏览器使用华视电子设备读取身份证信息

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家. 对人工智能感兴趣或者想了解的小伙伴,可以点击跳转到网站一起学习哟. https://www.captainai.ne ...

  7. VUE实现华视身份证阅读器读取身份证信息

    VUE实现华视身份证阅读器读取身份证信息 话不多上直接上代码,写的不怎么规范多多包涵,我是在模态框实现的,在这里就只提供模态框代码. 最后附上华视身份证阅读器安装文件和浏览器插件链接: [https: ...

  8. VUE实现华视身份证阅读器读取身份证信息(本文分两种情况,第一中是点击按钮读取信息,一种是自动读取信息)

    本文是用了vue+element来实现华视身份证读卡器读取身份信息的,当然在开发之前要做好前提准备,就是厂家提供对应设备的api和安装对应的驱动.本文通过两种方法来实现读取信息,第一种是点击按钮读取信 ...

  9. 基于Android NFC传感器读取身份证信息demo

    摘要:通过导入开发包sdk开发基几Android NFC设备读取身份证信息 1. 开发条件: 1)鱼住往来科技的身份验证sdk :下载地址:https://www.yzfuture.cn/views/ ...

最新文章

  1. 多线程2(常用的方法:join、interrupt、currentThread、isAlive、setDaemon...)
  2. 教育部:禁止开学前网授新学期课程
  3. ftp 追加远程文件_ftp上传,完成ftp定时上传、下载只需3步
  4. HTTP相关知识 - 1
  5. 牛客网【每日一题】3月26日 合并回文子串
  6. 与詹金斯一起将GitLab中的Gradle项目发布到Artifactory
  7. 用 JavaScript 的方式理解递归
  8. ubuntu安装arm-linux-gcc
  9. C#软件授权、注册、加密、解密模块源码解析并制作注册机生成license
  10. window环境下创建Flask项目需要安装常见模块命令
  11. theano 编程技巧
  12. html5块注释,HTML 块引用标签
  13. 函数式编程可以配合装饰器使用
  14. 中文系统使用日文键盘-转
  15. RTX2009管理器服务运行状态空白
  16. 介绍几款知名的工作流系统软件
  17. 相对路径和绝对路径及表示
  18. 2022年「医疗行业」市场研报合集(共228份)
  19. python读取.db文件
  20. 携程逆向爬虫 | PC网页端 | 旅游景点评论爬虫

热门文章

  1. Java解压压缩加密文件zip
  2. Stable Diffusion:使用Lora用二十张图片训了一个简易版薇尔莉特头像生成器(不作商用,纯纯个人兴趣,狗头保命)
  3. 4款让人心疼的电脑软件,由于免费又实用,常被同行挤压
  4. 【程序人生】春满人间
  5. 【实战项目惜时App需求分析说明书】Vue-cli3+Vant UI+Vue-element-admin+Egg.js+Mysql
  6. ASP.NET Identity 2新增双重认证、帐号锁定、防伪印章功能并修复了一些bug
  7. 小米手机深陷“返修门” 售后成软肋
  8. 正则表达式中[A-z]和[a-zA-Z]的区别
  9. 纤亿通谈大型数据中心互联之T级光传输解决方案
  10. 大数据营销在旅游行业的应用方案