当前位置: 首页 > news >正文

USB免驱IC读写器QT小程序开发

USB免驱全协议IC卡读写器QT小程序开发,读取15693卡。

QT小程序UI开发界面:

 QT程序代码mainWindow.cpp代码如下:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pb_beep_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;status = mypcdbeep(30);if(status==0){}else{disperrinf(status);}
}void MainWindow::on_pb_getdevnum_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char devicenumber[4];unsigned char status;status = mypcdgetdevicenumber(devicenumber);if(status==0){mypcdbeep(30);QMessageBox::information(NULL, "提示", QString::asprintf("设备编号:%03d-%03d-%03d-%03d", devicenumber[0],devicenumber[1],devicenumber[2],devicenumber[3]));}else{disperrinf(status);}
}void MainWindow::on_pb_easyread_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char ctrlword=0x00;    //读任何卡,不需指定卡号,读完后不静止该卡,可赋值NEEDSERIAL及NEEDHALT的组合模式,或为0unsigned char afi;unsigned char myuid[8];unsigned char startblock;unsigned char blocknum;unsigned char piccdatabuf[255];ui->lineEdit_uid->setText("");ui->plainTextEdit_data->setPlainText("");QString afistr=ui->lineEdit_afi->text().trimmed();if(afistr.length()==2 and checkinput(afistr)){bool ok;afi=afistr.toInt(&ok,16);}else{QMessageBox::critical(NULL, "提示","请输入2位16进制AFI!");ui->lineEdit_afi->setFocus();return;}startblock=ui->spinBox_star->value();blocknum=ui->spinBox_num->value();if(blocknum>12){QMessageBox::critical(NULL, "提示","一次最多只能读取12块数据!");return;}status = myiso15693readex(ctrlword,afi,startblock,blocknum,myuid,piccdatabuf);if(status==0){mypcdbeep(30);QString uidstr="";for(int i=0;i<8;i++){uidstr=uidstr+QString::asprintf("%02X", myuid[i]);}ui->lineEdit_uid->setText(uidstr);QString datastr="";for(int i=1;i<=piccdatabuf[0];i++){datastr=datastr+QString::asprintf("%02X ", piccdatabuf[i]);}ui->plainTextEdit_data->setPlainText(datastr);QMessageBox::information(NULL, "提示", "读卡成功,卡片UID:"+uidstr);}else{if(status==46){QString uidstr="";for(int i=0;i<8;i++){uidstr=uidstr+QString::asprintf("%02X", myuid[i]);}ui->lineEdit_uid->setText(uidstr);QMessageBox::information(NULL, "提示", "本次读取的块数超过卡片允许的一次读取最多块数,读取卡片UID:"+uidstr);}else{disperrinf(status);}}
}void MainWindow::on_pb_easywrite_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char ctrlword=0x00;    //读任何卡,不需指定卡号,读完后不静止该卡,可赋值NEEDSERIAL及NEEDHALT的组合模式,或为0unsigned char afi=0x00;unsigned char myuid[8];unsigned char startblock;unsigned char blocknum;unsigned char piccdatabuf[255];unsigned char eachblocksize;ui->lineEdit_uid->setText("");QString afistr=ui->lineEdit_afi->text().trimmed();if(afistr.length()==2 and checkinput(afistr)){bool ok;afi=afistr.toInt(&ok,16);}else{QMessageBox::critical(NULL, "提示","请输入2位16进制AFI!");return;}startblock=ui->spinBox_star->value();blocknum=ui->spinBox_num->value();if(blocknum>12){QMessageBox::critical(NULL, "提示","一次最多只能写12块数据!");return;}switch(ui->comboBox_cardtype->currentIndex()){case 0:eachblocksize=4;break;case 1:eachblocksize=8;break;default:eachblocksize=32;break;}piccdatabuf[0]=blocknum*eachblocksize;//检测写卡数据QChar ch;QString writinf = ui->plainTextEdit_data->toPlainText().trimmed();QString writinf1 = "";int m = 1;int n = 0;char s;if(writinf.length()<1){QMessageBox::critical(NULL, "提示", "请输入正确的16进制写卡数据!");ui->plainTextEdit_data->setFocus();return;}ch = writinf.at(0);s = writinf.at(0).toLatin1();for(int i=0; i<writinf.length() ; i++){ch = writinf.at(i);s = writinf.at(i).toLatin1();if((('0' <= s) && (s <= '9')) || (('A' <= s) && (s <= 'F')) || (('a' <= s) && (s <= 'f'))){writinf1 += ch;n++;if(n==2){bool ok;piccdatabuf[m++] = writinf1.toInt(&ok,16);writinf1 = "";n = 0;if(m>=49){break;}}}else if(s == ' '){}else{QMessageBox::critical(NULL, "提示", "写卡数据错误,请输入正确的16进制数据!");ui->plainTextEdit_data->setFocus();return;}}if(m<=piccdatabuf[0]){QMessageBox::critical(NULL, "提示", "写卡数据不足,请输入"+QString::asprintf("错误代码:%d", piccdatabuf[0])+"个字节16进制数据!");ui->plainTextEdit_data->setFocus();return;}status = myiso15693writeex(ctrlword,afi,startblock,blocknum,myuid,piccdatabuf);if(status==0){mypcdbeep(30);QString uidstr="";for(int i=0;i<8;i++){uidstr=uidstr+QString::asprintf("%02X", myuid[i]);}ui->lineEdit_uid->setText(uidstr);QMessageBox::information(NULL, "提示", "写卡成功,卡片UID:"+uidstr);}else{if(status==45){QString uidstr="";for(int i=0;i<8;i++){uidstr=uidstr+QString::asprintf("%02X", myuid[i]);}ui->lineEdit_uid->setText(uidstr);QMessageBox::information(NULL, "提示", "每块字节数选错,卡片UID:"+uidstr);}else{disperrinf(status);}}
}void MainWindow::on_pb_search1_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char afi;unsigned char maskuid[8];   //卡号掩码,一般可以不理这个参数unsigned char masklen;unsigned char uid[9];ui->lineEdit_uid->setText("");ui->lineEdit_flags->setText("36");flags=54;QString afistr=ui->lineEdit_afi->text().trimmed();if(afistr.length()==2 and checkinput(afistr)){bool ok;afi=afistr.toInt(&ok,16);}else{QMessageBox::critical(NULL, "提示","请输入2位16进制AFI!");return;}QString masklstr=ui->lineEdit_masklen->text().trimmed();if(masklstr.length()==2 and checkinput(masklstr)){bool ok;masklen=masklstr.toInt(&ok,16);}else{QMessageBox::critical(NULL, "提示","请输入2位16进制掩码长度!");return;}status = myiso15693inventory(flags, afi, masklen, maskuid, uid);if(status==0){mypcdbeep(30);ui->lineEdit_dsfid->setText(QString::asprintf("%02X", uid[0]));QString uidstr="";for(int i=1;i<9;i++){uidstr=uidstr+QString::asprintf("%02X", uid[i]);}ui->lineEdit_uid->setText(uidstr);}else{disperrinf(status);}
}void MainWindow::on_pb_searchall_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char afi;unsigned char maskuid[8];   //卡号掩码,一般可以不理这个参数unsigned char masklen;unsigned char uid[9];unsigned char revlen[1];ui->lineEdit_uid->setText("");ui->comboBox_uid->clear();ui->lineEdit_flags->setText("16");flags=22;QString afistr=ui->lineEdit_afi->text().trimmed();if(afistr.length()==2 and checkinput(afistr)){bool ok;afi=afistr.toInt(&ok,16);}else{QMessageBox::critical(NULL, "提示","请输入2位16进制AFI!");ui->lineEdit_afi->setFocus();return;}QString masklstr=ui->lineEdit_masklen->text().trimmed();if(masklstr.length()==2 and checkinput(masklstr)){bool ok;masklen=masklstr.toInt(&ok,16);}else{QMessageBox::critical(NULL, "提示","请输入2位16进制掩码长度!");return;}status = myiso15693inventory16(flags, afi, masklen, maskuid,revlen, uid);if(status==0){mypcdbeep(30);ui->lineEdit_dsfid->setText(QString::asprintf("%02X", uid[0]));QString uidstr="";for(int i=1;i<9;i++){uidstr=uidstr+QString::asprintf("%02X", uid[i]);}ui->lineEdit_uid->setText(uidstr);//        QStringList strlist;int j=0;while (j<revlen[0]){QString cardinfstr="DSFID:"+QString::asprintf("%02X", uid[j])+",UID:";for (int i=1;i<9;i++){cardinfstr=cardinfstr+QString::asprintf("%02X", uid[j+i]);}
//            strlist.append(cardinfstr);ui->comboBox_uid->addItem(cardinfstr);j=j+9;}
//        model = new QStringListModel(strlist);      //QStringListModel将QStringList包装了起来
//        ui->listView->setModel(model);              //填充到listview
//        ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers);  //设置item内容不可编辑}else{disperrinf(status);}
}void MainWindow::on_pb_quiet_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char uid[8];ui->lineEdit_flags->setText("22");flags=34;QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}status = myiso15693stayquiet(flags, uid);if(status==0){mypcdbeep(30);QMessageBox::information(NULL, "提示", "操作成功,卡片已静止!");}else{if(status==40){QMessageBox::critical(NULL, "提示","使卡进入静止(Quiet)状态失败!");}else{disperrinf(status);}}
}void MainWindow::on_pb_select_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char uid[8];ui->lineEdit_flags->setText("22");flags=34;QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}status = myiso15693Select(flags, uid);if(status==0){mypcdbeep(30);QMessageBox::information(NULL, "提示", "操作成功,卡片已在选中状态!");}else{if(status==41){QMessageBox::critical(NULL, "提示","使卡进入选中状态失败!");}else{disperrinf(status);}}
}void MainWindow::on_pb_restare_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char uid[8];ui->lineEdit_flags->setText("22");flags=34;QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}status = myiso15693resettoready(flags, uid);if(status==0){mypcdbeep(30);QMessageBox::information(NULL, "提示", "操作成功,卡片已从静止中重起到准备状态!");}else{if(status==42){QMessageBox::critical(NULL, "提示","让卡从静止中重起准备失败!");}else{disperrinf(status);}}
}void MainWindow::on_pb_afi_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char afi;unsigned char uid[8];ui->lineEdit_flags->setText("22");flags=34;QString afistr=ui->lineEdit_afi->text().trimmed();if(afistr.length()==2 and checkinput(afistr)){bool ok;afi=afistr.toInt(&ok,16);}else{QMessageBox::critical(NULL, "提示","请输入2位16进制AFI!");ui->lineEdit_afi->setFocus();return;}QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}status = myiso15693writeafi(flags, afi,uid);if(status==0){mypcdbeep(30);QMessageBox::information(NULL, "提示", "写AIF操作成功!");}else{if(status==46){QMessageBox::critical(NULL, "提示","写AIF操作失败!");}else{disperrinf(status);}}
}void MainWindow::on_pb_dsfid_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char dsfid;unsigned char uid[8];ui->lineEdit_flags->setText("22");flags=34;QString dsfidstr=ui->lineEdit_dsfid->text().trimmed();if(dsfidstr.length()==2 and checkinput(dsfidstr)){bool ok;dsfid=dsfidstr.toInt(&ok,16);}else{QMessageBox::critical(NULL, "提示","请输入2位16进制dsfid!");ui->lineEdit_dsfid->setFocus();return;}QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}status = myiso15693writedsfid(flags, dsfid,uid);if(status==0){mypcdbeep(30);QMessageBox::information(NULL, "提示", "写DSFID操作成功!");}else{if(status==41){QMessageBox::critical(NULL, "提示","写DSFID操作失败!");}else{disperrinf(status);}}
}void MainWindow::on_pb_systeminf_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char uid[8];unsigned char revlen[1];unsigned char revbuf[255];ui->plainTextEdit_data->setPlainText("");ui->lineEdit_flags->setText("22");flags=34;QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}status = myiso15693readinfo(flags, uid,revlen,revbuf);if(status==0){mypcdbeep(30);int j=0;QString cardinfstr="";while (j<revlen[0]){cardinfstr=cardinfstr+QString::asprintf("%02X ", revbuf[j]);j++;}ui->plainTextEdit_data->setPlainText(cardinfstr);QMessageBox::information(NULL, "提示", "读取卡片系统信息成功!");}else{disperrinf(status);}
}void MainWindow::on_pb_secure_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char startblock;unsigned char blocknum;unsigned char uid[8];unsigned char revlen[1];unsigned char revbuf[255];ui->plainTextEdit_data->setPlainText("");ui->lineEdit_flags->setText("22");flags=34;startblock=ui->spinBox_star->value();blocknum=ui->spinBox_num->value();QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}status = myiso15693readsecuritystate(flags, startblock,blocknum,uid,revlen,revbuf);if(status==0){mypcdbeep(30);int j=0;QString cardinfstr="";while (j<revlen[0]){cardinfstr=cardinfstr+QString::asprintf("%02X ", revbuf[j]);j++;}ui->plainTextEdit_data->setPlainText(cardinfstr);QMessageBox::information(NULL, "提示", "读取卡片系统信息成功!");}else{disperrinf(status);}
}void MainWindow::on_pb_lockafi_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在int answ=QMessageBox::question (this, "警告", "你确定要锁定卡片的AFI吗 ?锁定后不可以再次修改!", QMessageBox::Ok, QMessageBox::Cancel);if (answ ==1024){unsigned char status;unsigned char flags;unsigned char uid[8];ui->lineEdit_flags->setText("22");flags=34;QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}status = myiso15693lockafi(flags, uid);if(status==0){mypcdbeep(30);QMessageBox::information(NULL, "提示", "锁AFI操作成功!");}else{disperrinf(status);}}
}void MainWindow::on_pb_lockdsfid_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在int answ=QMessageBox::question (this, "警告", "你确定要锁定卡片的DSFID吗 ?锁定后不可以再次修改!", QMessageBox::Ok, QMessageBox::Cancel);if (answ ==1024){unsigned char status;unsigned char flags;unsigned char uid[8];ui->lineEdit_flags->setText("22");flags=34;QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}status = myiso15693lockdsfid(flags, uid);if(status==0){mypcdbeep(30);QMessageBox::information(NULL, "提示", "数据存储格式标识DSFID锁定成功!");}else{disperrinf(status);}}
}void MainWindow::on_pb_lockdata_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在int answ=QMessageBox::question (this, "警告", "你确定要锁定卡片的数据块吗 ?锁定后不可以再次修改!", QMessageBox::Ok, QMessageBox::Cancel);if (answ ==1024){unsigned char status;unsigned char flags;unsigned char startblock;unsigned char uid[8];ui->lineEdit_flags->setText("22");flags=34;startblock=ui->spinBox_star->value();QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}status = myiso15693lockblock(flags,startblock, uid);if(status==0){mypcdbeep(30);QMessageBox::information(NULL, "提示", "数据块锁定成功!");}else{disperrinf(status);}}
}void MainWindow::on_pb_read_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char startblock;unsigned char blocknum;unsigned char uid[8];unsigned char revlen[1];unsigned char revbuf[255];ui->plainTextEdit_data->setPlainText("");ui->lineEdit_flags->setText("22");flags=34;startblock=ui->spinBox_star->value();blocknum=startblock+ui->spinBox_num->value();QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}QString blockdata="";while (startblock<blocknum){status = myiso15693readblock(flags, startblock, 1, uid, revlen, revbuf);if(status==0){int j=0;while(j<revlen[0]){blockdata=blockdata+QString::asprintf("%02X ", revbuf[j]);j++;}startblock++;}else{blocknum=startblock-1;}}if(startblock==blocknum){mypcdbeep(30);ui->plainTextEdit_data->setPlainText(blockdata);QMessageBox::information(NULL, "提示", "读卡成功,卡片UID:"+uidstr);}else{QMessageBox::critical(NULL, "提示",QString::asprintf("在读取第 :%d", startblock)+",块时返回错误代码:"+QString::asprintf("%d", status));}}void MainWindow::on_pb_write_clicked()
{if(!checkdllos()){return;}      //判断运行目录内动态库文件是否存在unsigned char status;unsigned char flags;unsigned char eachblocksize;unsigned char startblock;unsigned char blocknum;unsigned char uid[8];unsigned char writebuf[2000];int writelen;ui->lineEdit_flags->setText("22");flags=34;startblock=ui->spinBox_star->value();blocknum=startblock+ui->spinBox_num->value();switch(ui->comboBox_cardtype->currentIndex()){case 0:eachblocksize=4;break;case 1:eachblocksize=8;break;default:eachblocksize=32;break;}writelen=blocknum*eachblocksize;QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){bool ok;for(int i=0;i<8;i++){uid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请先寻找卡片或输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}for(int i=0;i<2000;i++){writebuf[i]=0x00;}//检测写卡数据QChar ch;QString writinf = ui->plainTextEdit_data->toPlainText().trimmed();QString writinf1 = "";int m = 0;int n = 0;char s;if(writinf.length()<1){QMessageBox::critical(NULL, "提示", "请输入正确的16进制写卡数据!");ui->plainTextEdit_data->setFocus();return;}ch = writinf.at(0);s = writinf.at(0).toLatin1();for(int i=0; i<writinf.length() ; i++){ch = writinf.at(i);s = writinf.at(i).toLatin1();if((('0' <= s) && (s <= '9')) || (('A' <= s) && (s <= 'F')) || (('a' <= s) && (s <= 'f'))){writinf1 += ch;n++;if(n==2){bool ok;writebuf[m++] = writinf1.toInt(&ok,16);writinf1 = "";n = 0;}}else if(s == ' '){}else{QMessageBox::critical(NULL, "提示", "写卡数据错误,请输入正确的16进制数据!");ui->plainTextEdit_data->setFocus();return;}}int i=0;while (startblock<blocknum){unsigned char wbuf[eachblocksize];for(int j=0;j<eachblocksize;j++){wbuf[j]=writebuf[i+j];}status = myiso15693writeblock(flags, startblock, 1, uid, eachblocksize, wbuf);if(status==0){startblock=startblock+1;i=i+eachblocksize;}else{blocknum=startblock-1;}}if(startblock==blocknum){mypcdbeep(30);QMessageBox::information(NULL, "提示", "写卡成功,卡片UID:"+uidstr);}else{QMessageBox::critical(NULL, "提示",QString::asprintf("在写第 :%d", startblock)+",块时返回错误代码:"+QString::asprintf("%d", status));}
}void MainWindow::on_pb_writeUid_clicked()
{if(!checkdllos()){return;}       //判断运行目录内动态库文件是否存在unsigned char status;unsigned char ctrlword=0x00;    //读任何卡,不需指定卡号,读完后不静止该卡,可赋值NEEDSERIAL及NEEDHALT的组合模式,或为0unsigned char afi=0x00;unsigned char olduid[8];unsigned char newuid[8];QString afistr=ui->lineEdit_afi->text().trimmed();if(afistr.length()==2 and checkinput(afistr)){bool ok;afi=afistr.toInt(&ok,16);}else{QMessageBox::critical(NULL, "提示","请输入2位16进制AFI!");ui->lineEdit_afi->setFocus();return;}QString uidstr=ui->lineEdit_uid->text().trimmed();if(uidstr.length()==16 and checkinput(uidstr)){for(int i=0;i<9;i++){bool ok;newuid[i]=QString(uidstr.mid(i*2,2)).toInt(&ok,16);}}else{QMessageBox::critical(NULL, "提示","请输入16位16进制UID!");ui->lineEdit_uid->setFocus();return;}if(myiso15693writeuid!=NULL){status = myiso15693writeuid(ctrlword,afi,olduid,newuid);if(status==0){mypcdbeep(30);QMessageBox::information(NULL, "提示", "写卡成功,卡片UID:"+uidstr);}else{if(status==45){QMessageBox::critical(NULL, "提示", "写UID失败,此卡UID不可以改写!");}else{disperrinf(status);}}}else{QMessageBox::critical(NULL, "提示", "myiso15693writeuid函数未正确载入!");}
}

http://www.lryc.cn/news/510742.html

相关文章:

  • OSCP靶场训练冒险之kioprix4:shell逃逸以及利用数据库提权
  • NIPS2014 | GAN: 生成对抗网络
  • Postman接口测试01|接口测试基础概念、http协议、RESTful风格、接口文档
  • Linux系统编程——详解页表
  • SpringBoot + HttpSession 自定义生成sessionId
  • 循环对称复高斯分布(Circularly Symmetric Complex Gaussian Distribution)
  • xinput1_3.dll放在哪里?当xinput1_3.dll丢失时的应对策略:详细解决方法汇总
  • 基于STM32的智能家居环境监控系统设计
  • Vscode + gdbserver远程调试开发板指南:
  • 大表:适用于结构化数据的分布式存储系统
  • 深入解析MVCC中Undo Log版本底层存储读取逻辑
  • 游戏引擎学习第64天
  • Effective C++ 条款33:避免遮掩继承而来的名称
  • UEFI Spec 学习笔记---4 - EFI System Table(1)
  • 【微信小程序】3|首页搜索框 | 我的咖啡店-综合实训
  • 独一无二,万字详谈——Linux之文件管理
  • React:前端开发领域的璀璨之星
  • C/C++ 数据结构与算法【哈夫曼树】 哈夫曼树详细解析【日常学习,考研必备】带图+详细代码
  • 基于NodeMCU的物联网窗帘控制系统设计
  • 喜报 | 擎创科技入围上海市优秀信创解决方案
  • windows10下使用沙盒多开uiautoanimation可行性验证
  • 电脑报错wsdprintproxy.dll丢失?修复wsdprintproxy.dll文件缺失的实用方法
  • Kubernetes 的资源管理方式
  • layui动态拼接生成下拉框验证必填项失效问题
  • VUE3+VITE简单的跨域代理配置
  • Xdebug
  • IDEA | SpringBoot 项目中使用 Apifox 上传接口
  • 列表分页返回对象
  • 微软edge浏览器 v131.0.2903.99便携版
  • Prometheus 专栏 —— Prometheus入门介绍