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函数未正确载入!");}
}
相关文章:
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); }MainWind…...
OSCP靶场训练冒险之kioprix4:shell逃逸以及利用数据库提权
声明! 学习资源来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
NIPS2014 | GAN: 生成对抗网络
Generative Adversarial Nets 摘要-Abstract引言-Introduction相关工作-Related Work对抗网络-Adversarial Nets理论结果-Theoretical Results实验-Experiments优势和不足-Advantages and disadvantages缺点优点 结论及未来工作-Conclusions and future work研究总结未来研究方…...
Postman接口测试01|接口测试基础概念、http协议、RESTful风格、接口文档
目录 一、接口测试基础概念 1、什么是接口 2、接口的类型 3、什么是接口测试 4、为什么要做接口测试 5、接口测试的实现方式 6、什么是自动化接口测试? 二、接口返回的数据格式 1、三种格式 2、Json 三、接口协议 1、webservice协议 2、dubbo协议 3、…...
Linux系统编程——详解页表
目录 一、前言 二、深入理解页表 三、页表的实际组成 四、总结: 一、前言 页表是我们之前在讲到程序地址空间的时候说到的,它是物理内存到进程程序地址空间的一个桥梁,通过它物理内存的数据和代码才能映射到进程的程序地址空间中ÿ…...
SpringBoot + HttpSession 自定义生成sessionId
SpringBoot HttpSession 自定义生成sessionId 业务场景实现方案 业务场景 最近在做用户登录过程中,由于默认ID是通过UUID创建的,缺乏足够的安全性,决定要自定义生成 sessionId。 实现方案 正常的获取session方法如下: HttpSe…...
循环对称复高斯分布(Circularly Symmetric Complex Gaussian Distribution)
一、引言 循环对称复高斯分布(Circularly Symmetric Complex Gaussian Distribution,简称CSCG)在无线通信、信号处理等领域具有广泛的应用。作为一种特殊的复高斯分布,CSCG具有独特的性质,如循环对称性、高斯性等&…...
xinput1_3.dll放在哪里?当xinput1_3.dll丢失时的应对策略:详细解决方法汇总
在计算机系统的运行过程中,我们偶尔会遇到一些令人困扰的问题,其中xinput1_3.dll文件丢失就是较为常见的一种情况。这个看似不起眼的动态链接库文件,实则在许多软件和游戏的正常运行中发挥着至关重要的作用。一旦它丢失,可能会导致…...
基于STM32的智能家居环境监控系统设计
目录 引言系统设计 硬件设计软件设计系统功能模块 环境监控模块控制模块显示模块系统实现 硬件实现软件实现系统调试与优化结论与展望 1. 引言 随着智能家居技术的发展,环境监控系统已经成为家居管理的重要组成部分。智能家居环境监控系统通过实时监测室内温度、湿…...
Vscode + gdbserver远程调试开发板指南:
本章目录 步骤环境准备网络配置vscode配置步骤 (全图示例)开发板配置开始调试注意: 每次断开之后,开发板都需要重新启动gdbserver才可调试。 参考链接: 步骤 环境准备 将交叉编译链路径加入$PATH变量:确保系统能够找到所需的工具。 export PATH$PATH:/p…...
大表:适用于结构化数据的分布式存储系统
大家觉得有意义和帮助记得及时关注和点赞!!! 译者序摘要1 引言2 数据模型 2.1 行(Row)2.2 Column Families(列族) 2.2.1 设计2.2.2 column key 的格式:family:qualifier2.2.3 访问控制和磁盘/内存记账(acco…...
深入解析MVCC中Undo Log版本底层存储读取逻辑
一、引言 多版本并发控制(MVCC,Multi-Version Concurrency Control)是一种广泛应用于关系数据库管理系统中的并发控制技术。它通过保存数据的历史版本,使得在事务并发执行时,每个事务都能看到数据的一致性视图。在MVC…...
游戏引擎学习第64天
代码改的我看的比较懵 原视频可以去这个网站去看 https://guide.handmadehero.org/ 回顾我们在模拟区域方面的进展 在目前的情况下,如果有很多任务需要完成,可以进行分解。在昨天收到的改变中,决定将任务分解成模拟区域。模拟区域是可以随时…...
Effective C++ 条款33:避免遮掩继承而来的名称
文章目录 条款33:避免遮掩继承而来的名称为什么避免遮掩?如何避免遮掩?1. 使用 using 声明式2. 使用转交函数 (Forwarding Functions) 总结 条款33:避免遮掩继承而来的名称 在 C 中,派生类(derived class&…...
UEFI Spec 学习笔记---4 - EFI System Table(1)
4 - EFI System Table 本章节主要介绍的是 UEFI Image 的 Entry point(在 UEFI 固件执行的时候,都是直接调用入口函数并且执行从而调用其他的 driver)。 UEFI Image 主要是有三类:UEFI boot service driver、UEFI runtime drive…...
【微信小程序】3|首页搜索框 | 我的咖啡店-综合实训
首页-搜索框-跳转 引言 在微信小程序中,首页的搜索框是用户交互的重要入口。本文将通过“我的咖啡店”小程序的首页搜索框实现,详细介绍如何在微信小程序中创建和处理搜索框的交互。 1. 搜索函数实现 onClickInput函数在用户点击搜索框时触发&#x…...
独一无二,万字详谈——Linux之文件管理
Linux文件部分的学习,有这一篇的博客足矣! 目录 一、文件的命名规则 1、可以使用哪些字符? 2、文件名的长度 3、Linux文件名的大小写 4、Linux文件扩展名 二、文件管理命令 1、目录的创建/删除 (1)、目录的创建 ① mkdir…...
React:前端开发领域的璀璨之星
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…...
C/C++ 数据结构与算法【哈夫曼树】 哈夫曼树详细解析【日常学习,考研必备】带图+详细代码
哈夫曼树(最优二叉树) 1)基础概念 **路径:**从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。 **结点的路径长度:**两结点间路径上的分支数。 **树的路径长度:**从树根到每一个结点的路径…...
基于NodeMCU的物联网窗帘控制系统设计
最终效果 基于NodeMCU的物联网窗帘控制系统设计 项目介绍 该项目是“物联网实验室监测控制系统设计(仿智能家居)”项目中的“家电控制设计”中的“窗帘控制”子项目,最前者还包括“物联网设计”、“环境监测设计”、“门禁系统设计计”和“小…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
