• 大小: 201KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: C#
  • 标签: C#  IC  M1  明华  R330  

资源简介

完成了对明华URF-R330读卡器 M1卡的读写,官方提供的Demo并没有C#版本的,我四处收集资料改写代码写出这个C#版的Demo,希望对您有所帮助. 因为时间问题所以并没有优化代码,不过注释绝对够全的.

资源截图

代码片段和文件信息

using System;
using System.Text;
using M1Card.Common;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace M1Card
{

    /*关于M1卡
     * M1卡有15个扇区可读写
     * 每个扇区的0-2块可读写第3块存放控制位所以不可写
     * 每次写一个扇区里的块都要先验证该扇区的密码
     * 写入一次为一块
     * 不知为何写满一个块时读取的时候末尾会多两三个乱码猜测是把控制位给读出来了时间问题未深究
     * 总共有5760位可读写即720字节
     */
    public partial class MainWindow : Form
    {
        #region 变量
        /// 
        /// 设备ID
        /// 

        private int _icdev = -1;
        /// 
        /// 当前IC卡号
        /// 

        private int _cardId = 0;
        #endregion

        public MainWindow()
        {
            InitializeComponent();
        }

        #region 设备操作
        /// 
        /// 写入指定的字符串到M1卡
        /// 

        /// 要写入的字符串
        private void Write(string str)
        {
            try
            {
                #region 过滤字符串
                //如果字符串有非法字符
                foreach (var c in str)
                {
                    if (c > 127) throw new ArgumentException(“字符串内含有ASCII已外的字符“);
                }
                //不可大于720个字符
                if (str.Length > 720) throw new ArgumentException(“字符串的长度已超过卡的最大容量720字节“);
                #endregion

                int result;                     //设备API函数返回的结果

                #region 初始化设备
                //连接设备并设置波特率
                _icdev = URF.rf_init(0 9600);
                if (_icdev < 0) throw new URFException(_icdev);
                //寻卡
                result = URF.rf_card((Int16)_icdev 1 ref _cardId);
                if (result != 0) throw new URFException(result);
                //加载密码
                result = URF.rf_load_key_hex(_icdev 0 0 “FFFFFFFFFFFF“);
                if (result != 0) throw new URFException(result);
                #endregion

                #region 写入卡内
                int writedBlock = 0;            //标示变量标识已写入的块数
                string[] data;                  //要写入卡内的字符串数据
                var block = str.Length / 16;    //字符串所占的块
                var mod = str.Length % 16;
                if (mod != 0) block++;          //如果有字符占不满一个块就多加一个

                var sector = block / 3;         //字符串所占的扇区
                if (block % 3 != 0) sector++;   //如果块占不满一个扇区多加一个扇区

                data = new string[block];

                #region 拆分字符串为16字节一块
                for (int index = 0; index < block; index++)
                {
                    string tempData;
                    if (index == block - 1 && mod != 0)
                    {
                        tempData = str;
                        str = null;
                    }
                    else
                    {
                        tempData = str.Substring(0 16);
                        str = str.Remove(index 16);
                    }

                    data[index] = tempD

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        167  2013-07-02 22:51  M1Card\App.config

     文件        167  2013-07-02 22:51  M1Card\bin\64\WindowsFormsApplication1.exe.config

     文件      22472  2013-07-02 23:02  M1Card\bin\64\WindowsFormsApplication1.vshost.exe

     文件        167  2013-07-02 22:51  M1Card\bin\64\WindowsFormsApplication1.vshost.exe.config

     文件     114688  2013-07-02 20:28  M1Card\bin\Debug\mwrf32.dll

     文件      14336  2013-07-16 23:12  M1Card\bin\Debug\WindowsFormsApplication1.exe

     文件        167  2013-07-02 22:51  M1Card\bin\Debug\WindowsFormsApplication1.exe.config

     文件      30208  2013-07-16 23:12  M1Card\bin\Debug\WindowsFormsApplication1.pdb

     文件      22984  2013-07-16 23:12  M1Card\bin\Debug\WindowsFormsApplication1.vshost.exe

     文件        167  2013-07-02 22:51  M1Card\bin\Debug\WindowsFormsApplication1.vshost.exe.config

     文件     114688  2013-07-02 20:28  M1Card\bin\Release\mwrf32.dll

     文件      11776  2013-07-14 19:53  M1Card\bin\Release\WindowsFormsApplication1.exe

     文件        167  2013-07-02 22:51  M1Card\bin\Release\WindowsFormsApplication1.exe.config

     文件      30208  2013-07-14 19:53  M1Card\bin\Release\WindowsFormsApplication1.pdb

     文件      22472  2013-07-14 19:55  M1Card\bin\Release\WindowsFormsApplication1.vshost.exe

     文件        167  2013-07-02 22:51  M1Card\bin\Release\WindowsFormsApplication1.vshost.exe.config

     文件        490  2012-06-06 02:06  M1Card\bin\Release\WindowsFormsApplication1.vshost.exe.manifest

     文件       2580  2013-07-16 23:09  M1Card\Common\ErrorManager.cs

     文件       3970  2013-07-16 23:09  M1Card\Common\URF.cs

     文件       5904  2013-07-16 23:09  M1Card\M1Card.csproj

     文件        522  2013-07-02 23:35  M1Card\M1Card.csproj.user

     文件       9046  2013-07-16 23:12  M1Card\MainWindow.cs

     文件       4842  2013-07-16 23:07  M1Card\MainWindow.Designer.cs

     文件       5817  2013-07-16 13:59  M1Card\MainWindow.resx

     文件       7000  2013-07-02 23:02  M1Card\obj\64\DesignTimeResolveAssemblyReferencesInput.cache

     文件       4608  2013-07-02 23:02  M1Card\obj\64\TempPE\Properties.Resources.Designer.cs.dll

     文件        120  2013-07-02 23:02  M1Card\obj\64\WindowsFormsApplication1.csproj.FileListAbsolute.txt

     文件       1903  2013-07-02 23:29  M1Card\obj\Debug\DesignTimeResolveAssemblyReferences.cache

     文件       6825  2013-07-16 23:08  M1Card\obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache

     文件        591  2013-07-16 23:12  M1Card\obj\Debug\M1Card.csproj.FileListAbsolute.txt

............此处省略52个文件信息

评论

共有 条评论