详细代码

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

//控制字定义
#define BLOCK0_EN  0x01
#define BLOCK1_EN  0x02
#define BLOCK2_EN  0x04
#define NEEDSERIAL 0x08
#define EXTERNKEY  0x10
#define NEEDHALT   0x20
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
//轻松读卡
{
/*
技术支持:
网站:
*/

unsigned char status;//存放返回值
        unsigned char myareano;//区号
        unsigned char authmode;//密码类型,用A密码或B密码
        unsigned char myctrlword;//控制字
 unsigned char mypicckey[6];//密码
        unsigned char mypiccserial[4];//卡序列号
        unsigned char mypiccdata[48]; //卡数据缓冲

unsigned char (__stdcall *piccreadex)(unsigned char ctrlword,unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *picckey,unsigned char *piccdata0_2);
        //判断动态库是否存在
        AnsiString FileName=ExtractFilePath(Application->ExeName);
        if(FileName.SubString(FileName.Length(),1) != "\\")
        {
             FileName += "\\";
        }
        FileName += "OUR_MIFARE.dll";
        if(!FileExists(FileName))
        {
                ShowMessage("无法在应用程序的文件夹找到OUR_MIFARE.dll");
                return;
        }
        //提取函数
        HINSTANCE hDll;
        hDll=LoadLibrary(FileName.c_str());
        piccreadex = (unsigned char (__stdcall *)(unsigned char,unsigned char *,unsigned char,unsigned char,unsigned char *,unsigned char *))GetProcAddress(hDll,"piccreadex");

//控制字指定,控制字的含义请查看本公司网站提供的动态库说明
        myctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY;

//指定区号
        myareano = 8;//指定为第8区
        //批定密码模式
        authmode = 1;//大于0表示用A密码认证,推荐用A密码认证

//指定密码
        mypicckey[0] = 0xff;
        mypicckey[1] = 0xff;
        mypicckey[2] = 0xff;
        mypicckey[3] = 0xff;
        mypicckey[4] = 0xff;
        mypicckey[5] = 0xff;

status = piccreadex(myctrlword,mypiccserial,myareano,authmode,mypicckey,mypiccdata);
        //在下面设定断点,然后查看mypiccserial、mypiccdata,
        //调用完 piccreadex函数可读出卡序列号到 mypiccserial,读出卡数据到mypiccdata,
        //开发人员根据自己的需要处理mypiccserial、mypiccdata 中的数据了。
        //处理返回函数
        switch(status)
        {
                case 0:
                        ShowMessage("操作成功");
                        break;
                //......
                case 8:
                        ShowMessage("请将卡放在感应区");
                        break;

}

//返回解释
        /*
        #define ERR_REQUEST 8//寻卡错误
        #define ERR_READSERIAL 9//读序列吗错误
        #define ERR_SELECTCARD 10//选卡错误
        #define ERR_LOADKEY 11//装载密码错误
        #define ERR_AUTHKEY 12//密码认证错误
        #define ERR_READ 13//读卡错误
        #define ERR_WRITE 14//写卡错误

#define ERR_NONEDLL 21//没有动态库
        #define ERR_DRIVERORDLL 22//动态库或驱动程序异常
        #define ERR_DRIVERNULL 23//驱动程序错误或尚未安装
        #define ERR_TIMEOUT 24//操作超时,一般是动态库没有反映
        #define ERR_TXSIZE 25//发送字数不够
        #define ERR_TXCRC 26//发送的CRC错
        #define ERR_RXSIZE 27//接收的字数不够
        #define ERR_RXCRC 28//接收的CRC错

*/

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
//让设备发出声音
{
/*
技术支持:
网站:
*/
        unsigned char (__stdcall *pcdbeep)(unsigned long xms);
        //判断动态库是否存在
        AnsiString FileName=ExtractFilePath(Application->ExeName);
        if(FileName.SubString(FileName.Length(),1) != "\\")
        {
             FileName += "\\";
        }
        FileName += "OUR_MIFARE.dll";
        if(!FileExists(FileName))
        {
                ShowMessage("无法在应用程序的文件夹找到OUR_MIFARE.dll");
                return;
        }

//提取函数
        HINSTANCE hDll;
        hDll=LoadLibrary(FileName.c_str());
        pcdbeep = (unsigned char (__stdcall *)(unsigned long))GetProcAddress(hDll,"pcdbeep");
        pcdbeep(50);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
//轻松写卡
{
/*
技术支持:
网站:
*/
        int i;
        unsigned char status;//存放返回值
        unsigned char myareano;//区号
        unsigned char authmode;//密码类型,用A密码或B密码
        unsigned char myctrlword;//控制字
 unsigned char mypicckey[6];//密码
        unsigned char mypiccserial[4];//卡序列号
        unsigned char mypiccdata[48]; //卡数据缓冲

unsigned char (__stdcall *piccwriteex)(unsigned char ctrlword,unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *picckey,unsigned char *piccdata0_2);
        //判断动态库是否存在
        AnsiString FileName=ExtractFilePath(Application->ExeName);
        if(FileName.SubString(FileName.Length(),1) != "\\")
        {
             FileName += "\\";
        }
        FileName += "OUR_MIFARE.dll";
        if(!FileExists(FileName))
        {
                ShowMessage("无法在应用程序的文件夹找到OUR_MIFARE.dll");
                return;
        }
        //提取函数
        HINSTANCE hDll;
        hDll=LoadLibrary(FileName.c_str());
        piccwriteex = (unsigned char (__stdcall *)(unsigned char,unsigned char *,unsigned char,unsigned char,unsigned char *,unsigned char *))GetProcAddress(hDll,"piccwriteex");
        //控制字指定,控制字的含义请查看本公司网站提供的动态库说明
        myctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY;

//指定区号
        myareano = 8;//指定为第8区
        //批定密码模式
        authmode = 1;//大于0表示用A密码认证,推荐用A密码认证

//指定密码
        mypicckey[0] = 0xff;
        mypicckey[1] = 0xff;
        mypicckey[2] = 0xff;
        mypicckey[3] = 0xff;
        mypicckey[4] = 0xff;
        mypicckey[5] = 0xff;

//指定卡数据
        for(i = 0;i<48;i++)
        {
                mypiccdata[i] = i;
        }
        //写卡
        status = piccwriteex(myctrlword,mypiccserial,myareano,authmode,mypicckey,mypiccdata);
        //在下面设定断点,然后查看mypiccserial、mypiccdata,
        //调用完 piccreadex函数可读出卡序列号到 mypiccserial,读出卡数据到mypiccdata,
        //开发人员根据自己的需要处理mypiccserial、mypiccdata 中的数据了。
        //处理返回函数
        switch(status)
        {
                case 0:
                        ShowMessage("操作成功");
                        break;
                //......
                case 8:
                        ShowMessage("请将卡放在感应区");
                        break;

}

//返回解释
        /*
        #define ERR_REQUEST 8//寻卡错误
        #define ERR_READSERIAL 9//读序列吗错误
        #define ERR_SELECTCARD 10//选卡错误
        #define ERR_LOADKEY 11//装载密码错误
        #define ERR_AUTHKEY 12//密码认证错误
        #define ERR_READ 13//读卡错误
        #define ERR_WRITE 14//写卡错误

#define ERR_NONEDLL 21//没有动态库
        #define ERR_DRIVERORDLL 22//动态库或驱动程序异常
        #define ERR_DRIVERNULL 23//驱动程序错误或尚未安装
        #define ERR_TIMEOUT 24//操作超时,一般是动态库没有反映
        #define ERR_TXSIZE 25//发送字数不够
        #define ERR_TXCRC 26//发送的CRC错
        #define ERR_RXSIZE 27//接收的字数不够
        #define ERR_RXCRC 28//接收的CRC错
        */

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
//修改单区密码
{

/*
技术支持:
网站:
*/

unsigned char status;//存放返回值
        unsigned char myareano;//区号
        unsigned char authmode;//密码类型,用A密码或B密码
        unsigned char myctrlword;//控制字

unsigned char mypiccnewkey[6];//新密码
        unsigned char mypiccserial[4];//卡序列号
        unsigned char mypiccoldkey[6];//旧密码

unsigned char (__stdcall *piccchangesinglekey)(unsigned char ctrlword,unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *piccoldkey,unsigned char *piccnewkey);
        //判断动态库是否存在
        AnsiString FileName=ExtractFilePath(Application->ExeName);
        if(FileName.SubString(FileName.Length(),1) != "\\")
        {
             FileName += "\\";
        }
        FileName += "OUR_MIFARE.dll";
        if(!FileExists(FileName))
        {
                ShowMessage("无法在应用程序的文件夹找到OUR_MIFARE.dll");
                return;
        }

//提取函数
        HINSTANCE hDll;
        hDll=LoadLibrary(FileName.c_str());
        piccchangesinglekey = (unsigned char (__stdcall *)(unsigned char ,unsigned char *,unsigned char ,unsigned char ,unsigned char *,unsigned char *))GetProcAddress(hDll,"piccchangesinglekey");

//控制字指定,控制字的含义请查看本公司网站提供的动态库说明
        myctrlword = 0;

//指定区号
        myareano = 8;//指定为第8区
        //批定密码模式
        authmode = 1;//大于0表示用A密码认证,推荐用A密码认证

//指定旧密码
        mypiccoldkey[0] = 0xff;
        mypiccoldkey[1] = 0xff;
        mypiccoldkey[2] = 0xff;
        mypiccoldkey[3] = 0xff;
        mypiccoldkey[4] = 0xff;
        mypiccoldkey[5] = 0xff;

//指定新密码,注意:指定新密码时一定要记住,否则有可能找不回密码,导致该卡报废。
        mypiccnewkey[0] = 0xff;
        mypiccnewkey[1] = 0xff;
        mypiccnewkey[2] = 0xff;
        mypiccnewkey[3] = 0xff;
        mypiccnewkey[4] = 0xff;
        mypiccnewkey[5] = 0xff;

status = piccchangesinglekey(myctrlword,mypiccserial,myareano,authmode,mypiccoldkey,mypiccnewkey);
        //返回值处理
        switch(status)
        {
                case 0:
                        ShowMessage("操作成功");
                        break;
                //......
                case 8:
                        ShowMessage("请将卡放在感应区");
                        break;

}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
//读取设备编号,可做为软件加密狗用,也可以根据此编号在公司网站上查询保修期限
{
/*
技术支持:
网站:
*/

unsigned char devno[4];//设备编号
        unsigned char (__stdcall *pcdgetdevicenumber)(unsigned char *devicenumber);
        //判断动态库是否存在
        AnsiString FileName=ExtractFilePath(Application->ExeName);
        if(FileName.SubString(FileName.Length(),1) != "\\")
        {
             FileName += "\\";
        }
        FileName += "OUR_MIFARE.dll";
        if(!FileExists(FileName))
        {
                ShowMessage("无法在应用程序的文件夹找到OUR_MIFARE.dll");
                return;
        }

//提取函数
        HINSTANCE hDll;
        hDll=LoadLibrary(FileName.c_str());
        pcdgetdevicenumber = (unsigned char (__stdcall *)(unsigned char *))GetProcAddress(hDll,"pcdgetdevicenumber");

if(!pcdgetdevicenumber(devno))
        {
                ShowMessage(IntToStr(devno[0]) + "-" + IntToStr(devno[1]) + "-" + IntToStr(devno[2]) + "-" + IntToStr(devno[3]));
        }

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)
{ //发送字符至读卡器显示
        unsigned char (__stdcall *lcddispfull)(LPSTR lcdstr);
        //判断动态库是否存在
        AnsiString FileName=ExtractFilePath(Application->ExeName);
        if(FileName.SubString(FileName.Length(),1) != "\\")
        {
             FileName += "\\";
        }
        FileName += "OUR_MIFARE.dll";
        if(!FileExists(FileName))
        {
                ShowMessage("无法在应用程序的文件夹找到OUR_MIFARE.dll");
                return;
        }

//提取函数
        HINSTANCE hDll;
        hDll=LoadLibrary(FileName.c_str());
        lcddispfull = (unsigned char (__stdcall *)(LPSTR ))GetProcAddress(hDll,"lcddispfull");

lcddispfull(Edit1->Text.c_str());
}
//---------------------------------------------------------------------------

转载于:https://blog.51cto.com/reader/595391

IC卡读写器c++builder源代码续相关推荐

  1. IC卡读写器VB源代码

    IC卡读写器VB使用界面 详细代码 '广州荣士电子有限公司,联系电话020-82318861,82322852,定制13826029618 网址http://www.icmcu.com '读卡函数声明 ...

  2. java做的web系统 m1 读卡器 结合_IE浏览器接入IC卡读写器实现M1卡的读写功能

    基于ActiveX技术的ocx控件是实现网页上读写 IC卡的一个比较不错的方法,因为ocx是com组件,通过其发布的接口,IE可以实现所有的功能.ActiveX不仅能适应大部分编程语言,做到与编程语言 ...

  3. 公交IC卡读写器设计指南

    采用PHILIPS公司的Mifaue卡作IC卡,设计以射频技术为核心,以单片机为控制器的IC卡读写器在公交自动收费系统中的应用.制作的IC卡读写器可以实现制卡.售卡.自动收费等功能,具有安全.实用.方 ...

  4. 关于IC卡读写器的应用

    IC卡读写器的应用领域 IC卡具有存储容量大,保密性好,体积小,便于携带的性能特点,可以广泛应用于门禁管理.会议签到.车辆管理.一卡通.身份验证识别等相关行业.本文介绍了一种基于射频识别技术的RFID ...

  5. ic卡读写器有哪些分类?如何使用ic卡读写器?

    ic卡读写器是读写器中的一种,通过ic卡读写器可对ic卡的信息进行读取.为增进大家对ic卡读写器的认识,本文将对ic卡读写器的分类.ic卡读写器的使用方法等内容予以介绍.如果你对ic卡读写器具有兴趣, ...

  6. Windows操作系统下用vmware虚拟ubuntu系统测试USB IC卡读写器的说明

    读写器介绍:RFID读写器NFC发卡器WEB可编程NDEF文本/网址/智能海报/电话/启动-淘宝网 (taobao.com) 一.打开windows计算机管理 / 服务 / VMware USB Ar ...

  7. IC-14W网络IC卡读写器_银河麒麟桌面操作系统V10适配测试报告

    银河麒麟操作系统产品NeoCertify 认证测试报告 系统版本:银河麒麟桌面操作系统V10 厂商名称:广州荣士电子有限公司 认证产品:IC-14W网络IC卡读写器 测试日期:2022-11-04 麒 ...

  8. IC卡读写器技术及应用

    前言 IC卡读写器又叫IC卡读写机具,它是遵循一定的协议,与IC卡建立通信关系,对IC卡进行读写操作的工具.随着IC卡在社会各领域的广泛应用,各种各样的IC卡读写机具也应运而生.为了帮助大家对IC卡读 ...

  9. RS232串口IC卡读写器控制协议

    //发卡器介绍: https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.26.12fce728BgBT3g&id=1 ...

  10. 串口IC卡读写器IC-07开发程序包(简单易用)

    开发程序包下载http://icmcu.com/download/2009-2-7/ChuanKou-IC-KaDouXieQi-IC-07-KaiFaBao.html

最新文章

  1. 用SQL语句添加删除修改字段
  2. 文件描述符fd是什么?
  3. (转) Android 数字签名
  4. 看完这篇,你还不能理解 ‘数据库架构’?趁早回家吧
  5. 48 行代码给 ABAP ALV 报表的数据行增添颜色效果
  6. Educational Codeforces Round 103 (Rated for Div. 2) D. Journey dp
  7. 让TFS忽略packages文件夹的更改
  8. freemarker处理EL表达式
  9. 大数据产品推荐:神策分析——可私有化部署的用户行为分析平台
  10. Win10鼠标单击经常变双击
  11. 【编译原理】自上而下语法分析(C/C++源码+实验报告)
  12. 伍斯特理工学院计算机科学硕士,美国伍斯特理工学院计算机科学硕士入学要求.pdf...
  13. Arturia Buchla Easel V for Mac - Buchla音乐画架插件
  14. 爬虫中使用selenium实现对斗鱼直播的各个房间标题、主播id,直播内容类型和热度信息的爬取
  15. android局部布局刷新,Android RecyclerView 局部刷新分析
  16. java_实现公历转农历代码
  17. ThinkPHP出现 缓存文件写入失败!
  18. Hbuilder集成微信支付教程(简单流程)
  19. 鲸探发布点评:8月9日发售《和为贵》数字藏品
  20. 快手如何提升播放量;快速热门涨粉。丨国仁网络资讯

热门文章

  1. vue 局部回到顶部_VUE回到顶部功能
  2. 死亡之ping(Ping of Death)
  3. ExtJs学习笔记——Ext.grid.EditorGridPanel的使用
  4. Gantt - attachEvent事件监听 - 多个参数事件(大于两个)
  5. Trace View
  6. 洛谷P3853 路标设置
  7. Vue3配置路由ERROR in [eslint]报错问题
  8. 使用cisco2811c当pptp ***接入设备
  9. 产品经理日常工作之流程图
  10. HTML | 分享几个HTML邮件样式模板