机房收费系统_刷卡充值功能的实现

前言

在做机房收费系统的过程中,添加了硬件刷卡器,通过IC卡来实现用户的账号充值,提这个需求之前就一直在考虑有没有必要,因为注册功能是用户自己的操作的,本着求同存疑的原则,保留了刷卡的功能接口.

正文

刷卡接口怎么实现的呢?简单给大家介绍一下这个实现过程.我的刷卡机型号是明华职能技术的URF-35H-MEM型号刷卡机.
主要用到了 mwhrf-bj.dll,ReaderBLL,ReaderDAL这三个基础的文件.

将刷卡机的硬件安装在电脑上,我的刷卡器是USB接口的,所以直接插上就可以了.
然后就是代码去引导处理相关的操作和写入了.
机房收费系统_刷卡充值功能的实现

刷卡器有了,相应的基础文件也有了剩下的就是和自己的软件一起合体实现相关想要的效果了.来看代码吧!
首先要在相应的程序集下添加两个引用,如图所示
机房收费系统_刷卡充值功能的实现

然后将mwhrf-bj.dll文件放到对应的程序集文件夹下如图
机房收费系统_刷卡充值功能的实现

做完前边的准备工作之后就要开始写代码了,主要的代码如下

private Dictionary<string, string> dic = new Dictionary<string, string>();
        

        public FrmRecharge()
        {
            InitializeComponent();
            //设置卡的编号对应数据库中的卡号
            dic.Add("4AADF1485E0804008500AABBCCDDEEFF", "1");
            dic.Add("0598F148240804008500AABBCCDDEEFF", "2");
            dic.Add("ACE7BFD2260804006263646566676869", "3");
        }
         private void timer1_Tick(object sender, EventArgs e)
        {
            //如果输入了卡号,那么就不读卡
            if (txtID.Text.Trim() != "")
            {
                return;
            }

            //开始读卡号
            string cardno = "";
            try
            {
                cardno = MyTools.ReadCardNo();
            }
            catch (Exception ex)
            {
                timer1.Enabled = false;
                DialogResult result = MessageBox.Show(ex.Message, "警告", MessageBoxButtons.OKCancel);
                if (result == DialogResult.OK)
                {
                    timer1.Enabled = true;
                }
            }

            txtID.Text = dic.ContainsKey(cardno) ? dic[cardno] : cardno;//将转换后的卡的信息显示在输入框中
        }
        

还需要重新写一个工具类,工具类的主要代码如下:

 public class MyTools
    {

        public static string ReadCardNo()
        {
            string cardNo = "";
            string key = "";
            int sectors = 0;

            key = System.Configuration.ConfigurationManager.AppSettings["key"].ToString();
            sectors = Convert.ToInt16(System.Configuration.ConfigurationManager.AppSettings["sectors"].ToString());
            CardReader readCard = new CardReader(key, sectors);
            readCard.Connection();
            string strRead = readCard.Read();
            switch (strRead)
            {
                case "1":
                    try
                    {
                        readCard.Close();
                    }
                    catch
                    {
                        throw new Exception("寻卡失败,请检查前台读卡器是否完好");

                    }
                    break;
                case "2":


                    readCard.Close();
                    break;
                case "3":

                    readCard.Close();
                    break;
                default:
                    if (readCard.Read().Length == 64)
                    {
                        cardNo = readCard.Read().Substring(0, 32).ToString();

                        readCard.Close();
                    }
                    else
                    {
                        throw new Exception("卡号有问题,可能卡损坏了!");
                    }
                    break;
            }
            return cardNo;
        }


    }

刷卡功能的整体情况就是这样,可能不同的机器会出现不同的状况.

结束

这个功能开始研究了好长时间,都是一脸懵的状态,后来通过高人的指点,再加上网上查资料终于是做成功了,因为好多基础的东西都不是自己写的,所以原理上来说还不是很清楚.学习的道路是无止境的,努力吧!!!少年!!!