软件名:D8M1.exe

更新时间:2014.06.28

操作系统:windowAll

外部设备:D8读卡器

D8M1可以对MIFARE块读写操作,支持1K,4K。检验KEY后返回SAK,QTAQ,UID。基于D8读卡器提供的dcrf32.dll开发。

D8型IC卡读写器是开发IC卡相关产品及系统集成必备的前端处理设备,可读写双界面射频智能卡或单独的非接触式射频卡,通过RS232串行接口或USB口实现同PC机及相关设备的连接,USB采用无驱技术,可方便用户的安装使用,它对多卡的支持可用于安全发卡及那些安全要求较高的领域需要。

核心代码如下:

void CD8M1Dlg::Show(CString str)
{
time = CTime::GetCurrentTime();
CString strTime = time.Format("%H:%M:%S");
int len = editShow.GetWindowTextLength();
editShow.SetSel(len, len);
editShow.ReplaceSel(strTime + " ----> " + str + _T("\r\n"));
} void CD8M1Dlg::Beer()
{
UCHAR SONG_TONE[] = { 212, 212, 190, 212, 159, 169, 212, 212, 190, 212, 142, 159, 212, 212, 106, 126, 159, 169, 190, 119, 119, 126, 159, 142, 159, 0 }; //生日快乐歌的音符频率表,不同频率由不同的延时来决定
UCHAR SONG_LONG[] = { 9, 3, 12, 12, 12, 24, 9, 3, 12, 12, 12, 24, 9, 3, 12, 12, 12, 12, 12, 9, 3, 12, 12, 12, 24, 0 }; //生日快乐歌节拍表,节拍决定每个音符的演奏长短 int len = 6;
for (int i = 0; i < len; i++){
dc_beep(icdev, SONG_LONG[i]/3);
Sleep(SONG_TONE[i]);
}
} void CD8M1Dlg::OnBnClickedInitcom()
{
//初始化串口1,
icdev = dc_init(100, 9600);
if ((int)icdev <= 0){
Show("Init Com Error!");
}
else{
Show("Init Com OK!");
}
dc_beep(icdev, 1);//蜂鸣时间,单位是10毫秒
Sleep(30);
dc_beep(icdev, 1);
Sleep(60);
dc_beep(icdev, 1);
// Beer(); } void CD8M1Dlg::OnBnClickedLoadKey()
{
//下载密码
CString keys;
GetDlgItemText(IDC_EDIT_KEY, keys);
int pos = keys.Find("\r\n");
UCHAR uKey[6];
while (pos != -1){
CString key = keys.Left(pos).Trim();
keys = keys.Mid(pos+2);
unsigned char _SecNr = StrToIntA(key.Left(2));
CString keyN = key.Mid(3);
if (_SecNr > 40){
Show("扇区号有误,大于40扇区...");
}
memset(uKey, 0, 6);
Alg::HexToAsc(keyN, uKey);
int st = dc_load_key(icdev, GetKeyMode(), _SecNr, uKey);
if (st != 0){
Show(IntToStr(_SecNr) + ": 扇区密钥写入失败...");
return;
} pos = keys.Find("\r\n");
} Show("载入KEY成功...\r\n");
} void CD8M1Dlg::OnBnClickedVerifyCard()
{
//寻卡函数,
// int st = dc_card(icdev, 0, &cardsnr);
CString linstr;
unsigned short tagType;
int st = dc_request(icdev, 0, &tagType);
if (st != 0)
{
Show("Find Card Error!");
return;
}
else
{
Show("Find Card Ok!");
linstr.Format("%04d", tagType);
Show("ATQA:" + linstr);
} st = dc_anticoll(icdev, 0, &cardsnr);
if (st != 0)
{
Show("Find Card Error!");
return;
}
else
{
linstr.Format("%X", cardsnr);
Show("UID:" + linstr);
} UCHAR size;
st = dc_select(icdev, cardsnr, &size);
if (st != 0)
{
Show("select Card Error!");
return;
}
else
{
linstr.Format("%X", size);
Show("SAK:" + linstr);
} //核对密码
int sec = GetSecNr();
int keyMode = GetKeyMode();
for (int i = 0; i < sec; i++){
st = dc_authentication(icdev, keyMode, i);
if (st != 0){
Show(IntToStr(i) + ": Auth Card Error...");
return;
}
}
Show("核对密码完成...\r\n");
} void CD8M1Dlg::OnBnClickedRead()
{
EditBlock.SetWindowTextA("");
ClearShow(); int adrs = GetBlockNr();
CString sData;
UCHAR pData[32]; unsigned long _NSnr;
for (int i = 0; i < adrs; i++){
//int st = dc_read(icdev, i, data); if (IsCheckW()){//only read block 3
if ((i < 128) && ((i+1) % 4 != 0)){
continue;
} if ((i > 128) && ((i+1) % 16 != 0)){
continue;
}
}
memset(pData, 0, 32);
int st = dc_HL_read(icdev, 0, i, cardsnr, pData, &_NSnr);
Alg::AscToHex(pData, 16, sData); if (st != 0){
Show(IntToStr(i) + ": 读取失败...");
continue;
}
else{
Show(IntToStr(i) + ": 读取成功," + sData);
} int len = EditBlock.GetWindowTextLength();
EditBlock.SetSel(len, len);
EditBlock.ReplaceSel(IntToStr(i) + ":" + sData + _T("\r\n"));
} Show("读取块完成...\r\n");
} void CD8M1Dlg::OnBnClickedWrite()
{
ClearShow();
CString blocks;
int adrs = GetBlockNr();
GetDlgItemText(IDC_EDIT_BLOCK, blocks);
int pos = blocks.Find("\r\n");
UCHAR uData[16];
while (pos != -1){
CString block = blocks.Left(pos).Trim();
blocks = blocks.Mid(pos + 2);
int posn = block.Find(':');
if (posn == -1){
Show("块地址值有误," + block);
return;
}
unsigned char adr = StrToIntA(block.Left(posn));
CString data = block.Mid(posn + 1);
if (data.GetLength() != 32){
Show("块值长度有误," + block);
}
if (adr > adrs){
Show("块地址越界:" + IntToStr(adr));
return;
} Alg::HexToAsc(data, uData); int st = dc_HL_write(icdev, 0, adr, &cardsnr, uData);
if (st != 0){
Show(IntToStr(adr) + ": 写入失败...");
}
else{
Show(IntToStr(adr) + ": 写入成功,写入值 " + data);
}
pos = blocks.Find("\r\n");
} Show("写入块完成...\r\n");
} void CD8M1Dlg::OnClose()
{
dc_exit(icdev);
CDialogEx::OnClose();
}

软件下载地址:http://download.csdn.net/detail/yxstars/7675429

文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38108709

MIFARE系列8《D8M1.exe》的更多相关文章

  1. Mifare系列6-射频卡与读写器的通信(转)

    文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38085415 1. 复位应答(Answer to request) 读写器呼叫磁 ...

  2. Mifare系列1-简介(转)

    文章转自 文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38079827 感谢原创作者的辛勤,对您再次表达感谢! 随着社会的发展, ...

  3. MIFARE系列6《射频卡与读写器的通讯》

    1. 复位应答(Answer to request) 读写器呼叫磁场内的卡片,卡片对呼叫做出应答.对刚进入磁场得到电复位处于休闲状态的卡片,卡请求(REQA,0x26):对于已进行过读写操作并进入休眠 ...

  4. MIFARE系列1《MIFARE简介》

    随着社会的发展,智能卡在很多领域得到了广泛的应用.特别是非接触卡,由于使用方便以及功能强大的特点,在管理.公交.工作证.身份识别等领域得到了快速的普及和推广. 非接触卡已经逐步发展成为一个独立的跨学科 ...

  5. 射频识别技术漫谈(11)——Mifare系列卡的共性【worldsing笔记】

    Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50.Mifare S70.Mifare UltraLight.Mifare Pro.Mifare Desfi ...

  6. 射频识别技术漫谈(11)——Mifare系列卡的共性

    Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50.Mifare S70.Mifare UltraLight.Mifare Pro.Mifare Desfi ...

  7. MIFARE系列6《射频卡与读写器的通信》

    1. ATR(Answer to request) 读写器呼叫磁场内的卡片.卡片对呼叫做出应答. 对刚进入磁场得到电复位处于休闲状态的卡片,卡请求(REQA,0x26):对于已进行过读写操作并进入休眠 ...

  8. C#程序集系列06,程序集清单,EXE和DLL的区别

    CLR在加载程序集的时候会查看程序集清单,程序集清单包含哪些内容呢?可执行文件和程序集有什么区别/ 程序集清单 □ 查看程序集清单 →清空F盘as文件夹中的所有内容→创建MainClass.cs文件→ ...

  9. Mifare系列7-安全性(转)

    文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38087245 飞利浦的MIFARE卡 由于它的高安全性在市场上得到广泛应用,比如 ...

随机推荐

  1. 接口自动化的根基--HTTP协议

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  2. 单链表(c++)

    #include "stdafx.h"#include <iostream>using namespace std;const int MaxSize = 100; c ...

  3. 既约分数-phi

    Description 小明正在学习分数这一章,他想知道对于一个真分数b/a而言,当分母a在[2,N]之间时,存在多少个既约分数,例如当N=4时,有以下几个1/2,1/3,1/4,2/3,3/4这五个 ...

  4. Eclipse 启动Tomcat后web项目的classes的子文件夹中没有calss文件

    Eclipse 启动Tomcat后web项目的classes的子文件夹中没有calss文件. 经网上查得以下方法可解决 把properties属性里的java compiler-->buildi ...

  5. 动态链接库(VC_Win32)

    目录 动态链接库概述相关函数动态链接库编程dumpbin工具 (本章节中例子都是用 VS2005 编译调试的) 动态链接概述 说明 所谓动态链接,就是把一些经常会共用的代码(静态链接的OBJ程序库)制 ...

  6. C# 和SQL Server 类型转换

    /// <summary> /// 数据库中与C#中的数据类型对照 /// </summary> /// <param name="type"> ...

  7. .NET程序员吧需要知道的小知识——关于数据库

    关于数据库 作为一个有“情怀的”(B格高一些的).NET开发工程师,需要多少知道一些这样的小故事. 哪怕仅仅当作一些扯淡的谈资.   1.文件型数据库(常见的) Access SQLite SQLSe ...

  8. 空间session失效的解决方法

    今天访问自己的网站的时候(by thinkphp),突然发现身份验证失效了,Session无法跨页,而且登陆的时候总是提示验证码错误(验证码也是通过Session传递的),才意识到可能是Session ...

  9. c#音乐播放器(欣赏)

    设置界面 Mini模式 播放器使用C#编写,用到了大量的自定义控件,播放是调用windows API. 现在只是完成了本地音乐功能,下一步我将要做歌词同步及网络音乐 当然,完成以后我将一步一步教大家做 ...

  10. 【转】java 访问.net webservice返回的数据集

    转自[转的也是转的][http://blog.csdn.net/fox123871/article/details/8637839] 1. 概述 很多正在开发或者打算开发XML Web Service ...