Пример #1
0
        /// <summary>
        /// 获取亲情号码列表及显示信息
        /// </summary>
        /// <param name="iPort">COM口号</param>
        /// <param name="bSection">扇区号</param>
        /// <returns></returns>
        public static List <string> GetPhoneNumList(int iPort, byte bSection)
        {
            Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();
            List <string> listPhone = new List <string>();

            try
            {
                string strReturn = ReadCard(iPort, dicSection[bSection][0].ToString(), 3);
                if (strReturn.Length != 96)
                {
                    return(null);
                }
                strReturn = strReturn.ToUpper();
                string strSub = strReturn.Substring(0, 32);

                strSub = Convert.ToChar(Convert.ToInt32(strSub.Substring(0, 2), 16)).ToString() + strSub.Substring(2, 8);

                listPhone.Add(strSub);

                for (int i = 0; i < 4; i++)
                {
                    strSub = strReturn.Substring(32 + i * 16, 16).TrimStart('0').TrimEnd('F');
                    listPhone.Add(strSub);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(listPhone);
        }
Пример #2
0
        /// <summary>
        /// 获取电话卡用户基本信息
        /// </summary>
        /// <param name="iPort">COM口号</param>
        /// <param name="bSection">扇区号</param>
        /// <returns></returns>
        public static PaymentCard GetUserBasicInfos(int iPort, byte bSection)
        {
            PaymentCard payCard = new PaymentCard();
            Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();

            try
            {
                string strReturn = ReadCard(iPort, dicSection[bSection][1].ToString(), 2);
                if (strReturn.Length != 64)
                {
                    if (strReturn.Length > 64)
                    {
                        strReturn = strReturn.Substring(0, 64);
                    }
                    else
                    {
                        return(null);
                    }
                }

                //PaymentCard l_objCardInfo = new PaymentCard();

                //解读第一块信息
                EncodeBlock1(strReturn.Substring(0, 32), payCard);

                //解读第二块信息
                EncodeBlock2(strReturn.Substring(32, 32), payCard);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(payCard);
        }
Пример #3
0
        /// <summary>
        /// 写卡片基本信息
        /// </summary>
        /// <param name="p_intPort"></param>
        /// <param name="p_objCard"></param>
        /// <returns></returns>
        public static bool WriteCardInfo(int p_intPort, PaymentCard p_objCard)
        {
            bool   lUserValid = p_objCard.Valid;
            string l_strCarNo = CardNoToHex(p_objCard.No, lUserValid);
            string l_strDate  = p_objCard.ExpiryDate.Value.ToString("yyMMdd");
            string l_strName  = GetNameCode(p_objCard.Name);

            string l_strData = l_strCarNo + l_strDate + p_objCard.FunctionCode + l_strName;

            //string l_strMoneyLimit = EquipmentGeneral.IntToHex(int.Parse((p_objCard.LimitRemainder * 100).ToString()), 8);
            //string l_strMaxPayment = EquipmentGeneral.IntToHex(int.Parse((p_objCard.DailyMaxPayment * 100).ToString()), 8);
            string l_strMoneyLimit   = EquipmentGeneral.IntToHex((int)(p_objCard.LimitRemainder * 100), 8);
            string l_strMaxPayment   = EquipmentGeneral.IntToHex((int)(p_objCard.DailyMaxPayment * 100), 8);
            string l_strPaymentCount = EquipmentGeneral.IntToHex(p_objCard.Span1PaymentCount) + EquipmentGeneral.IntToHex(p_objCard.Span2PaymentCount) + EquipmentGeneral.IntToHex(p_objCard.Span3PaymentCount) + EquipmentGeneral.IntToHex(p_objCard.Span4PaymentCount);
            string l_strType         = EquipmentGeneral.IntToHex(Convert.ToInt32(char.Parse(p_objCard.Type)));

            l_strData = l_strData + l_strMoneyLimit + p_objCard.PaymentPassword + l_strMaxPayment + l_strPaymentCount + l_strType;

            byte bSection = 0;

            WriteCard(p_intPort, EquipmentGeneral.GetCardSectionPieceList()[bSection][1].ToString(), 2, l_strData);
            bSection = 1;
            CleanCardMoney(p_intPort, EquipmentGeneral.GetCardSectionPieceList()[bSection][0]);
            AddCardMoney(p_intPort, EquipmentGeneral.GetCardSectionPieceList()[bSection][0], (int)(p_objCard.Money * 100));

            bSection = 2;
            CleanCardMoney(p_intPort, EquipmentGeneral.GetCardSectionPieceList()[bSection][0]);
            AddCardMoney(p_intPort, EquipmentGeneral.GetCardSectionPieceList()[bSection][0], (int)(p_objCard.Subsidize * 100));

            return(true);
        }
Пример #4
0
        /// <summary>
        /// 获取卡号
        /// </summary>
        /// <returns></returns>
        public override int GetCardNo()
        {
            int  iCardNo  = 0;
            byte bSection = 3;
            Dictionary <byte, List <byte> > dicSetcion = EquipmentGeneral.GetCardSectionPieceList();

            try
            {
                if (!ReadCardsPrepare(bSection))
                {
                    return(0);
                }

                YuChuanDevice.rf_beep(_iBeepInterval);
                byte[] arrData  = new byte[16];
                int    iResRead = YuChuanDevice.rf_read(dicSetcion[bSection][1], arrData);
                string strPiece = YuChuanDevice.ChangeHexToString(arrData);
                if (strPiece.Length == 32)
                {
                    string strHexCardNo = strPiece.Substring(2, 1) + strPiece.Substring(3, 1) + strPiece.Substring(0, 1) + strPiece.Substring(1, 1);
                    iCardNo = Convert.ToInt32(strHexCardNo, 16);
                }
            }
            catch (Exception ex)
            {
                return(0);
            }
            return(iCardNo);
        }
Пример #5
0
        public override bool WriteInitSubzVal(decimal dMoney)
        {
            byte bSection     = 2;
            int  iCardPieceNo = EquipmentGeneral.GetCardSectionPieceList()[bSection][0];

            JocatDevice.CleanCardMoney(1, iCardPieceNo);
            return(JocatDevice.AddCardMoney(1, iCardPieceNo, (int)(dMoney * 100)));
        }
Пример #6
0
 /// <summary>
 /// 取得卡用户编号
 /// </summary>
 /// <returns></returns>
 public override int GetCardNo()
 {
     try
     {
         byte bSection = 0;
         return(JocatDevice.ReadCardNo(m_intComPort, EquipmentGeneral.GetCardSectionPieceList()[bSection][0]));
     }
     catch
     {
         return(0);
     }
 }
Пример #7
0
        public static PaymentCard ReadCard(int p_intPort, int p_intSector, string strPwd)
        {
            try
            {
                var l_strReturn = ReadCard(p_intPort, p_intSector.ToString(), 3);
                if (l_strReturn == "")
                {
                    throw new Exception("读卡失败!");
                }

                if (l_strReturn.Substring(32, 32) == "00000000000000000000000000000000")
                {
                    throw new Exception("该卡为新卡。");
                }

                PaymentCard l_objCardInfo = new PaymentCard();

                //取得出厂卡号
                //JocatDevice.SetReaderPassWord(p_intPort, "FFFFFFFFFFFF");
                //l_objCardInfo.MACID = JocatDevice.ReadCard(p_intPort, "0", 1);
                l_objCardInfo.MACID = l_strReturn.Substring(0, 32);

                //JocatDevice.SetReaderPassWord(p_intPort, strPwd);

                //解读第一块信息
                EncodeBlock1(l_strReturn.Substring(32, 32), l_objCardInfo);

                //解读第二块信息
                EncodeBlock2(l_strReturn.Substring(64, 32), l_objCardInfo);

                //读取消费扇区信息
                byte bPosSection = 1;
                l_strReturn = ReadCard(p_intPort, EquipmentGeneral.GetCardSectionPieceList()[bPosSection][0].ToString(), 3);
                EncodeDivision1(l_strReturn, l_objCardInfo);

                //读取水费扇区信息
                byte bSubzSection = 2;
                l_strReturn = ReadCard(p_intPort, EquipmentGeneral.GetCardSectionPieceList()[bSubzSection][0].ToString(), 3);
                EncodeDivision2(l_strReturn, l_objCardInfo);

                return(l_objCardInfo);
            }
            catch (Exception Ex)
            {
                throw new Exception("读卡失败!");;
            }
        }
Пример #8
0
        /// <summary>
        /// 写入卡片基本信息
        /// </summary>
        /// <param name="iCom"></param>
        /// <param name="iSection"></param>
        /// <param name="payCard"></param>
        /// <returns></returns>
        public static bool WriteCardBasicInfo(int iCom, byte bSection, PaymentCard payCard)
        {
            bool res = false;

            try
            {
                Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();
                bool   bValid     = payCard.Valid;
                string l_strCarNo = CardNoToHex(payCard.No, bValid);
                string l_strDate  = payCard.ExpiryDate.Value.ToString("yyMMdd");
                string l_strName  = GetNameCode(payCard.Name);

                //功能
                string strFunc = string.Empty;
                if (payCard.FunctionCode.Length == 16)
                {
                    strFunc = EquipmentGeneral.BinToHex(payCard.FunctionCode).PadLeft(4, '0');
                }
                else if (payCard.FunctionCode.Length == 4)
                {
                    strFunc = payCard.FunctionCode;
                }
                else
                {
                    strFunc = string.Empty.PadRight(4, '0');
                }

                string l_strData = l_strCarNo + l_strDate + strFunc + l_strName;

                string l_strMoneyLimit   = EquipmentGeneral.IntToHex(int.Parse(((int)(payCard.LimitRemainder * 100)).ToString()), 8);
                string l_strMaxPayment   = EquipmentGeneral.IntToHex(int.Parse(((int)(payCard.DailyMaxPayment * 100)).ToString()), 8);
                string l_strPaymentCount = EquipmentGeneral.IntToHex(payCard.Span1PaymentCount) + EquipmentGeneral.IntToHex(payCard.Span2PaymentCount) + EquipmentGeneral.IntToHex(payCard.Span3PaymentCount) + EquipmentGeneral.IntToHex(payCard.Span4PaymentCount);
                string l_strType         = EquipmentGeneral.IntToHex(Convert.ToInt32(char.Parse(payCard.Type)));

                l_strData = l_strData + l_strMoneyLimit + payCard.PaymentPassword + l_strMaxPayment + l_strPaymentCount + l_strType;

                res = WriteCard(iCom, dicSection[bSection][1].ToString(), 2, l_strData);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(res);
        }
Пример #9
0
        /// <summary>
        /// 写入电话用户信息及电话号码
        /// </summary>
        /// <param name="iPort">COM口号</param>
        /// <param name="bSection">扇区号</param>
        /// <param name="strCardInfo">电话卡用户信息</param>
        /// <param name="listPhoneNum">电话号码列表</param>
        /// <returns></returns>
        public static bool WritePhoneList(int iPort, byte bSection, string strCardInfo, List <string> listPhoneNum)
        {
            try
            {
                if (listPhoneNum.Count > 4)
                {
                    return(false);
                }

                Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();
                strCardInfo = strCardInfo.ToUpper();
                //string strSub = (Convert.ToString(Convert.ToInt32(char.Parse(strCardInfo.Substring(0, 1))), 16) + strCardInfo.Substring(1, strCardInfo.Length - 1)).PadRight(32, 'F');

                string strSub;
                if (strCardInfo.Length == 9)
                {
                    strSub = Convert.ToString(Convert.ToInt32(char.Parse(strCardInfo.Substring(0, 1))), 16) + strCardInfo.Substring(1, strCardInfo.Length - 1);
                }
                strSub = strCardInfo.PadRight(32, 'F');

                string        strPhoneSub   = "FFFFFFFFFFFFFFFF";
                List <string> listPhoneWait = new List <string>();
                for (int i = 0; i < 4; i++)
                {
                    listPhoneWait.Add(strPhoneSub);
                }
                for (int i = 0; i < listPhoneNum.Count; i++)
                {
                    listPhoneWait[i] = listPhoneNum[i].PadLeft(12, '0').PadRight(16, 'F');
                }
                strSub += listPhoneWait[0] + listPhoneWait[1] + listPhoneWait[2] + listPhoneWait[3];
                bool res = JocatDevice.WriteCard(iPort, dicSection[bSection][0].ToString(), 3, strSub);
                if (!res)
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(true);
        }
Пример #10
0
        public override bool SetWatermeterAdminCard(int port, string paymentPassword, int eachTimeMaxinumNumber, int dailyMaxinumNumber, decimal unitPrice)
        {
            byte bSection  = 2;
            bool isSccess  = false;
            byte bPieceOne = EquipmentGeneral.GetCardSectionPieceList()[bSection][1];
            byte bPieceTwo = EquipmentGeneral.GetCardSectionPieceList()[bSection][2];

            string l_strEachAmount = EquipmentGeneral.IntToHexInSorting(eachTimeMaxinumNumber, 4);
            string l_strMaxAmount  = EquipmentGeneral.IntToHexInSorting(dailyMaxinumNumber, 4);

            decimal fUPrice        = unitPrice * 100;
            int     uPrice         = Convert.ToInt32(fUPrice);
            string  l_strUnitPrice = EquipmentGeneral.IntToHexInSorting(uPrice, 4);

            string l_strWaterInfo = paymentPassword + l_strEachAmount + l_strMaxAmount + l_strUnitPrice + "FFFF";

            l_strWaterInfo = l_strWaterInfo + DataConvert.GetCRC16Code(l_strWaterInfo);

            if (l_strWaterInfo.Length != 32)
            {
                return(false);
            }

            if (!ReadCardsPrepare(bSection))
            {
                return(false);
            }
            byte[] arrData = YuChuanDevice.ChangeStrToHex(l_strWaterInfo);
            int    iRes    = YuChuanDevice.rf_write(bPieceOne, arrData);

            if (!ReadCardsPrepare(bSection))
            {
                return(false);
            }
            iRes = YuChuanDevice.rf_write(bPieceTwo, arrData);

            if (iRes == 0)
            {
                isSccess = true;
            }

            return(isSccess);
        }
Пример #11
0
        /// <summary>
        /// 设置指定卡扇区密码
        /// </summary>
        /// <param name="p_intSector">扇区号</param>
        /// <param name="p_strPassword">密码</param>
        /// <returns></returns>
        public override bool SetCardPassword(int p_intSector, string p_strPassword)
        {
            bool res = false;

            YuChuanDevice.rf_beep(_iBeepInterval);

            try
            {
                if (string.IsNullOrEmpty(p_strPassword))
                {
                    return(res);
                }
                if (p_strPassword.Length != 12)
                {
                    return(res);
                }

                byte[] arrNewPwd = YuChuanDevice.ChangeStrToHex(p_strPassword);

                if (!ReadCardsPrepare((byte)p_intSector))
                {
                    return(false);
                }

                List <byte> listNewPwd = new List <byte>();
                listNewPwd.AddRange(arrNewPwd);
                listNewPwd.AddRange(YuChuanDevice.bCardContentTemplate);

                Dictionary <byte, List <byte> > dicSP = EquipmentGeneral.GetCardSectionPieceList();
                int iPwdPieceNum = dicSP[(byte)p_intSector][3];
                int iResWrite    = YuChuanDevice.rf_write((byte)iPwdPieceNum, listNewPwd.ToArray());
                if (iResWrite == 0)
                {
                    res = true;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            YuChuanDevice.rf_beep(_iBeepInterval);
            return(res);
        }
Пример #12
0
        /// <summary>
        /// 获取消费金额
        /// </summary>
        /// <param name="iPort">COM口号</param>
        /// <param name="iSection">扇区号</param>
        /// <returns></returns>
        public static decimal GetPosVal(int iPort, byte bSection)
        {
            decimal dMoney = 0.00M;

            try
            {
                Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();
                string strReturn = ReadCard(iPort, dicSection[bSection][0].ToString(), 1);
                if (strReturn.Length != 32)
                {
                    return(0.00M);
                }
                dMoney = EquipmentGeneral.HexMoneyToDouble(strReturn.Substring(0, 8));
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(dMoney);
        }
Пример #13
0
        /// <summary>
        /// 设置亲情号码资料
        /// </summary>
        /// <param name="p_strPhoneInfo">亲情号码卡信息</param>
        /// <param name="p_lisPhones">亲情号码</param>
        /// <returns></returns>
        public bool WriteFamilyPhones(string p_strPhoneInfo, List <string> p_lisPhones)
        {
            byte bSection = 10;
            Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();
            string l_strPhoneInfo = p_strPhoneInfo + "FFFFFFFFFFFFFFFFFFFFFF";

            string l_strPhoneNo1 = FormatPhoneNo(p_lisPhones[0], p_lisPhones[1]);
            string l_strPhoneNo2 = FormatPhoneNo(p_lisPhones[2], p_lisPhones[3]);

            if (l_strPhoneInfo.Length != 32)
            {
                throw new Exception("亲情号码卡信息格式不正确。");
            }

            if ((l_strPhoneNo1 + l_strPhoneNo2).Length != 64)
            {
                throw new Exception("亲情号码格式不正确。");
            }

            return(JocatDevice.WriteCard(m_intComPort, dicSection[bSection][0].ToString(), 3, l_strPhoneInfo + l_strPhoneNo1 + l_strPhoneNo2));
        }
Пример #14
0
        /// <summary>
        /// 设置水表管理卡
        /// </summary>
        /// <param name="watermeterPassword">水表消费密码</param>
        /// <param name="amountInEach">单次用水限额</param>
        /// <param name="amountInDay">日用水限额</param>
        /// <param name="unitPrice">每升价格</param>
        /// <returns></returns>
        public override bool SetWatermeterAdminCard(int port, string paymentPassword, int eachTimeMaxinumNumber, int dailyMaxinumNumber, decimal unitPrice)
        {
            byte   bSection = 2;
            bool   isSccess = false;
            string strPiece = EquipmentGeneral.GetCardSectionPieceList()[bSection][1].ToString();

            string l_strEachAmount = EquipmentGeneral.IntToHexInSorting(eachTimeMaxinumNumber, 4);
            string l_strMaxAmount  = EquipmentGeneral.IntToHexInSorting(dailyMaxinumNumber, 4);

            decimal fUPrice        = unitPrice * 100;
            int     uPrice         = Convert.ToInt32(fUPrice);
            string  l_strUnitPrice = EquipmentGeneral.IntToHexInSorting(uPrice, 4);

            string l_strWaterInfo = paymentPassword + l_strEachAmount + l_strMaxAmount + l_strUnitPrice + "FFFF";

            l_strWaterInfo = l_strWaterInfo + DataConvert.GetCRC16Code(l_strWaterInfo);

            isSccess = JocatDevice.WriteCard(port, strPiece, 2, l_strWaterInfo + l_strWaterInfo);

            return(isSccess);
        }
Пример #15
0
        public override decimal GetSubzVal()
        {
            decimal dSubzVal = 0.00M;
            byte    bSection = 2;

            try
            {
                if (!ReadCardsPrepare(bSection))
                {
                    return(0);
                }

                YuChuanDevice.rf_beep(_iBeepInterval);

                Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();

                byte[] arrData  = new byte[16];
                int    iResRead = YuChuanDevice.rf_read(dicSection[bSection][0], arrData);
                if (iResRead != 0)
                {
                    //读数失败
                    return(0);
                }
                string strPiece = YuChuanDevice.ChangeHexToString(arrData);
                if (strPiece.Length != 32)
                {
                    //读取块数据不完整,不足32位
                    return(0);
                }

                dSubzVal = EquipmentGeneral.HexMoneyToDouble(strPiece.Substring(0, 8));
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(dSubzVal);
        }
Пример #16
0
        /// <summary>
        /// 读卡资料
        /// </summary>
        /// <returns></returns>
        public override PaymentCard ReadCard()
        {
            try
            {
                byte bSection      = 0;
                var  l_objCardInfo = JocatDevice.ReadCard(m_intComPort, EquipmentGeneral.GetCardSectionPieceList()[bSection][0], this._strWriterPwd);

                //List<string> l_lisPhones = new List<string>();
                //string l_strPhoneInfo = "";

                //ReadFamilyPhones(out l_strPhoneInfo, out l_lisPhones);

                //l_objCardInfo.FamilyPhoneInfo = l_strPhoneInfo;
                //l_objCardInfo.FamilyPhoneNum = l_lisPhones;

                return(l_objCardInfo);
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
        }
Пример #17
0
        /// <summary>
        /// 读取亲情电话信息
        /// </summary>
        /// <param name="p_strPhineInfo"></param>
        /// <param name="p_lisPhones"></param>
        private void ReadFamilyPhones(out string p_strPhineInfo, out List <string> p_lisPhones)
        {
            p_strPhineInfo = "";
            p_lisPhones    = new List <string>();
            byte bSection = 10;
            Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();

            try
            {
                string l_strPhoneInfo = JocatDevice.ReadCard(m_intComPort, dicSection[bSection][0].ToString(), 3);

                p_strPhineInfo = ((char)Convert.ToByte(l_strPhoneInfo.Substring(0, 2), 16)).ToString() + l_strPhoneInfo.Substring(2, 8);

                p_lisPhones.Add(CollapsePhoneNo(l_strPhoneInfo.Substring(32, 16).Replace("F", "")));
                p_lisPhones.Add(CollapsePhoneNo(l_strPhoneInfo.Substring(48, 16).Replace("F", "")));
                p_lisPhones.Add(CollapsePhoneNo(l_strPhoneInfo.Substring(64, 16).Replace("F", "")));
                p_lisPhones.Add(CollapsePhoneNo(l_strPhoneInfo.Substring(80, 16).Replace("F", "")));
            }
            catch
            {
                throw new Exception("读取亲情号码信息失败。");
            }
        }
Пример #18
0
        public override bool WriteInitUserBasicInfo(PaymentCard payCard)
        {
            YuChuanDevice.rf_beep(_iBeepInterval);
            byte bSection = 3;

            try
            {
                Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();
                string strPieceData = string.Empty;

                #region 初始化第1块信息数据

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                //卡号
                string strCardNo = EquipmentGeneral.IntToHex(payCard.No, 4);
                strCardNo = strCardNo.Substring(2, 2) + strCardNo.Substring(0, 2);
                //状态值
                string strState = payCard.Valid ? "80" : "00";
                //注销时间
                string strRegDate = payCard.ExpiryDate.Value.ToString("yyMMdd");
                //功能
                string strFunc = string.Empty;
                if (payCard.FunctionCode.Length == 16)
                {
                    strFunc = EquipmentGeneral.BinToHex(payCard.FunctionCode).PadLeft(4, '0');
                }
                else if (payCard.FunctionCode.Length == 4)
                {
                    strFunc = payCard.FunctionCode;
                }
                else
                {
                    strFunc = string.Empty.PadRight(4, '0');
                }

                //姓名
                string strName = EquipmentGeneral.StrToHex(payCard.Name).PadRight(16, '0');

                strPieceData = strCardNo + strState + strRegDate + strFunc + strName;
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                byte[] arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                int    iRes    = YuChuanDevice.rf_write(dicSection[bSection][1], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                #region 初始化第2块信息数据

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                //卡内最低余额
                string strMinVal = EquipmentGeneral.IntToHex((int)(payCard.LimitRemainder * 100), 8);
                //每日最大消费额
                string strMaxPosVal = EquipmentGeneral.IntToHex((int)(payCard.DailyMaxPayment * 100), 8);
                //时段限次消费次数
                string strIntervalCount = EquipmentGeneral.IntToHex(payCard.Span1PaymentCount, 2) + EquipmentGeneral.IntToHex(payCard.Span2PaymentCount, 2) + EquipmentGeneral.IntToHex(payCard.Span3PaymentCount, 2) + EquipmentGeneral.IntToHex(payCard.Span4PaymentCount, 2);
                //卡片类型
                string strType = EquipmentGeneral.IntToHex(Convert.ToInt32(char.Parse(payCard.Type)), 2);

                strPieceData = strMinVal + payCard.PaymentPassword + strMaxPosVal + strIntervalCount + strType;
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                iRes    = YuChuanDevice.rf_write(dicSection[bSection][2], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion
            }
            catch (Exception ex)
            {
                throw ex;
            }

            YuChuanDevice.rf_beep(_iBeepInterval);
            return(true);
        }
Пример #19
0
        public override bool WriteInitPosVal(decimal dMoney)
        {
            YuChuanDevice.rf_beep(_iBeepInterval);
            byte bSection;

            try
            {
                bSection = 4;
                Dictionary <byte, List <byte> > dicSect = EquipmentGeneral.GetCardSectionPieceList();

                #region 写入初始消费金额数据

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                //卡内金额
                string strCardVal = EquipmentGeneral.IntToHex((int)(dMoney * 100), 8).PadRight(8, '0');
                strCardVal = strCardVal.Substring(6, 2) + strCardVal.Substring(4, 2) + strCardVal.Substring(2, 2) + strCardVal.Substring(0, 2);

                //卡内金额反码
                string strComplement = EquipmentGeneral.GetComplement(strCardVal);

                string strPieceData = strCardVal + strComplement + strCardVal + this._strPosValCRC;
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                byte[] arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                int    iRes    = YuChuanDevice.rf_write(dicSect[bSection][0], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                #region 写入备份消费金额数据

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                strPieceData = strCardVal + strComplement + strCardVal + this._strPosValCRC;
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                iRes    = YuChuanDevice.rf_write(dicSect[bSection][1], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                bSection = 5;

                #region 写入初始消费金额数据(备份扇区)

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                strPieceData = strCardVal + strComplement + strCardVal + this._strPosValBakCRC;
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                iRes    = YuChuanDevice.rf_write(dicSect[bSection][0], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                #region 写入备份消费金额数据(备份扇区)

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                strPieceData = strCardVal + strComplement + strCardVal + this._strPosValBakCRC;
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                iRes    = YuChuanDevice.rf_write(dicSect[bSection][1], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                bSection = 6;

                #region 写入消费记录初始数据(0号位置)

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                strPieceData = DateTime.Now.AddDays(-1).ToString("yyMMdd01");
                strPieceData = strPieceData.PadLeft(24, '0').PadRight(32, '0');
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                iRes    = YuChuanDevice.rf_write(dicSect[bSection][0], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                #region 写入消费记录初始数据(1号位置)

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                iRes    = YuChuanDevice.rf_write(dicSect[bSection][1], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                #region 写入消费记录初始数据(2号位置)

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                string strPieceDataTmp = string.Empty.PadLeft(30, '0') + "AA";
                arrData = YuChuanDevice.ChangeStrToHex(strPieceDataTmp);
                iRes    = YuChuanDevice.rf_write(dicSect[bSection][2], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion


                bSection = 7;

                #region 写入备份消费记录初始数据(0号位置)

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                iRes    = YuChuanDevice.rf_write(dicSect[bSection][0], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                #region 写入备份消费记录初始数据(1号位置)

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                iRes    = YuChuanDevice.rf_write(dicSect[bSection][1], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                #region 写入备份消费记录初始数据(2号位置)

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceDataTmp);
                iRes    = YuChuanDevice.rf_write(dicSect[bSection][2], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion
            }
            catch (Exception ex)
            {
                throw ex;
            }
            YuChuanDevice.rf_beep(_iBeepInterval);
            return(true);
        }
Пример #20
0
        public override PaymentCard GetUserBasicInfos()
        {
            PaymentCard payCard  = new PaymentCard();
            byte        bSection = 3;

            try
            {
                Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();

                string strPwdTemp = this._strSectionPwd;
                this._strSectionPwd = string.Empty.PadRight(12, 'F');
                payCard.MACID       = GetMacID();
                this._strSectionPwd = strPwdTemp;

                #region 读第1块

                if (!ReadCardsPrepare(bSection))
                {
                    return(null);
                }

                byte[] arrData  = new byte[16];
                int    iResRead = YuChuanDevice.rf_read(dicSection[bSection][1], arrData);
                if (iResRead != 0)
                {
                    //读数失败
                    return(null);
                }
                string strPiece1 = YuChuanDevice.ChangeHexToString(arrData);
                if (strPiece1.Length != 32)
                {
                    //读取到的块数据不完整,不足32位
                    return(null);
                }

                #endregion

                #region 读第2块

                if (!ReadCardsPrepare(bSection))
                {
                    return(null);
                }

                arrData  = new byte[16];
                iResRead = YuChuanDevice.rf_read(dicSection[bSection][2], arrData);
                if (iResRead != 0)
                {
                    //读数失败
                    return(null);
                }
                string strPiece2 = YuChuanDevice.ChangeHexToString(arrData);
                if (strPiece2.Length != 32)
                {
                    //读取块数据不完整,不足32位
                    return(null);
                }

                #endregion

                #region 解释第一块数据

                string strPieceData = strPiece1;

                //出厂ID
                payCard.MACID = GetMacID();

                //卡号
                string strHexCardNo = strPieceData.Substring(2, 1) + strPieceData.Substring(3, 1) + strPieceData.Substring(0, 1) + strPieceData.Substring(1, 1);
                payCard.No = Convert.ToInt32(strHexCardNo, 16);

                //状态
                payCard.Valid = strPieceData.Substring(4, 2) == "80" ? true : false;

                //注册时间
                try
                {
                    payCard.ExpiryDate = DateTime.ParseExact(strPieceData.Substring(6, 6), "yyMMdd", null);
                }
                catch (Exception EX)
                {
                    payCard.ExpiryDate = null;
                }

                //系统功能
                payCard.FunctionCode = Convert.ToString(Convert.ToInt32(strPieceData.Substring(12, 4), 16), 2).PadLeft(16, '0');

                //卡片所有人姓名
                payCard.Name = EquipmentGeneral.HexToStr(strPieceData.Substring(16, 16));

                #endregion

                #region 解释第二块数据

                strPieceData = strPiece2;

                //最低余额
                payCard.LimitRemainder = (decimal)(Convert.ToInt32(strPieceData.Substring(0, 8), 16) / 100.00M);

                //消费密码
                payCard.PaymentPassword = strPieceData.Substring(8, 6);

                //每天最大消费额
                payCard.DailyMaxPayment = (decimal)(Convert.ToInt32(strPieceData.Substring(14, 8), 16) / 100.00M);

                //时段消费次数
                payCard.Span1PaymentCount = Convert.ToInt32(strPieceData.Substring(22, 2), 16);
                payCard.Span2PaymentCount = Convert.ToInt32(strPieceData.Substring(24, 2), 16);
                payCard.Span3PaymentCount = Convert.ToInt32(strPieceData.Substring(26, 2), 16);
                payCard.Span4PaymentCount = Convert.ToInt32(strPieceData.Substring(28, 2), 16);

                //卡类型
                payCard.Type = ((char)Convert.ToByte(strPieceData.Substring(30, 2), 16)).ToString();

                #endregion
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(payCard);
        }
Пример #21
0
        public override List <string> GetPhoneNumList()
        {
            List <string> listPhones = new List <string>();
            byte          bSection   = 10;

            try
            {
                YuChuanDevice.rf_beep(_iBeepInterval);
                Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();

                if (!ReadCardsPrepare(bSection))
                {
                    return(null);
                }

                byte[] arrData  = new byte[16];
                int    iResRead = YuChuanDevice.rf_read(dicSection[bSection][0], arrData);
                if (iResRead != 0)
                {
                    //读数失败
                    return(null);
                }
                string strPiece = YuChuanDevice.ChangeHexToString(arrData);
                if (strPiece.Length != 32)
                {
                    //读取块数据不完整,不足32位
                    return(null);
                }
                strPiece = strPiece.ToUpper().TrimEnd('F');
                strPiece = Convert.ToChar(Convert.ToInt32(strPiece.Substring(0, 2), 16)).ToString() + strPiece.Substring(2, strPiece.Length - 2);
                listPhones.Add(strPiece);

                string strEmpty = string.Empty;
                strEmpty = strEmpty.PadRight(16, '0');
                for (int i = 0; i < 2; i++)
                {
                    if (!ReadCardsPrepare(bSection))
                    {
                        return(null);
                    }

                    arrData  = new byte[16];
                    iResRead = YuChuanDevice.rf_read(dicSection[bSection][i + 1], arrData);
                    if (iResRead != 0)
                    {
                        //读数失败
                        return(null);
                    }
                    strPiece = YuChuanDevice.ChangeHexToString(arrData);
                    if (strPiece.Length != 32)
                    {
                        //读取块数据不完整,不足32位
                        return(null);
                    }

                    string strPhoneOneTmp = strPiece.Substring(0, 16);
                    string strPhoneTwoTmp = strPiece.Substring(16, 16);
                    if (strPhoneOneTmp != strEmpty)
                    {
                        string strPhoneOne = GetPhoneNum(strPhoneOneTmp);
                        if (!string.IsNullOrEmpty(strPhoneOne) && strPhoneOne.Substring(0, 1) != "1" && strPhoneOne.Length != 7 && strPhoneOne.Length != 8)
                        {
                            strPhoneOne = "0" + strPhoneOne;
                        }
                        listPhones.Add(strPhoneOne);
                    }
                    if (strPhoneTwoTmp != strEmpty)
                    {
                        string strPhoneTwo = GetPhoneNum(strPhoneTwoTmp);
                        if (!string.IsNullOrEmpty(strPhoneTwo) && strPhoneTwo.Substring(0, 1) != "1" && strPhoneTwo.Length != 7 && strPhoneTwo.Length != 8)
                        {
                            strPhoneTwo = "0" + strPhoneTwo;
                        }
                        listPhones.Add(strPhoneTwo);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(listPhones);
        }
Пример #22
0
        public override bool RechargeSubsidize(decimal p_dMoney)
        {
            try
            {
                byte bSection = 2;
                Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();

                #region 读第1块

                if (!ReadCardsPrepare((bSection)))
                {
                    return(false);
                }

                byte[] arrData  = new byte[16];
                int    iResRead = YuChuanDevice.rf_read(dicSection[bSection][0], arrData);
                if (iResRead != 0)
                {
                    //读数失败
                    return(false);
                }
                string strPiece8 = YuChuanDevice.ChangeHexToString(arrData);
                if (strPiece8.Length != 32)
                {
                    //读取块数据不完整,不足32位
                    return(false);
                }
                decimal dMoney = EquipmentGeneral.HexMoneyToDouble(strPiece8.Substring(0, 8));

                #endregion

                dMoney = dMoney + p_dMoney;

                #region 写入第1块数据

                if (!ReadCardsPrepare((bSection)))
                {
                    return(false);
                }

                //水控金额
                string strCardVal = EquipmentGeneral.IntToHex((int)(dMoney * 100), 8).PadRight(8, '0');
                strCardVal = strCardVal.Substring(6, 2) + strCardVal.Substring(4, 2) + strCardVal.Substring(2, 2) + strCardVal.Substring(0, 2);

                //水控金额反码
                string strComplement = EquipmentGeneral.GetComplement(strCardVal);

                string strPieceData = strCardVal + strComplement + strCardVal + this._strSubValCRC;
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                int iRes = YuChuanDevice.rf_write(dicSection[bSection][0], arrData);
                if (iRes == 0)
                {
                    YuChuanDevice.rf_beep(_iBeepInterval);
                }
                else
                {
                    return(false);
                }

                #endregion

                #region 读第2块

                if (!ReadCardsPrepare((bSection)))
                {
                    return(false);
                }

                arrData  = new byte[16];
                iResRead = YuChuanDevice.rf_read(dicSection[bSection][1], arrData);
                if (iResRead != 0)
                {
                    //读数失败
                    return(false);
                }
                string strPiece9 = YuChuanDevice.ChangeHexToString(arrData);
                if (strPiece9.Length != 32)
                {
                    //读取块数据不完整,不足32位
                    return(false);
                }
                dMoney = EquipmentGeneral.HexMoneyToDouble(strPiece9.Substring(0, 8));

                #endregion

                dMoney = dMoney + p_dMoney;

                #region 写入第2块数据

                if (!ReadCardsPrepare((bSection)))
                {
                    return(false);
                }

                //水控备份金额
                string strCardBakVal = EquipmentGeneral.IntToHex((int)(dMoney * 100), 8).PadRight(8, '0');
                strCardBakVal = strCardBakVal.Substring(6, 2) + strCardBakVal.Substring(4, 2) + strCardBakVal.Substring(2, 2) + strCardBakVal.Substring(0, 2);

                //水控备份金额反码
                string strBakComplement = EquipmentGeneral.GetComplement(strCardBakVal);

                strPieceData = strCardBakVal + strBakComplement + strCardBakVal + this._strSubValBakCRC;
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                iRes    = YuChuanDevice.rf_write(dicSection[bSection][1], arrData);
                if (iRes == 0)
                {
                    YuChuanDevice.rf_beep(_iBeepInterval);
                }
                else
                {
                    return(false);
                }

                #endregion
            }
            catch (Exception ex)
            {
                return(false);
            }
            return(true);
        }
Пример #23
0
        public override bool WriteInitContactPhone(string strContactInfo, List <string> listPhoneNums)
        {
            YuChuanDevice.rf_beep(_iBeepInterval);
            byte bSection;

            try
            {
                bSection = 10;
                Dictionary <byte, List <byte> > dicSection = EquipmentGeneral.GetCardSectionPieceList();

                //strContactInfo = Convert.ToString(Convert.ToInt32(char.Parse(strContactInfo.Substring(0, 1))), 16) + strContactInfo.Substring(1, strContactInfo.Length - 1);
                if (string.IsNullOrEmpty(strContactInfo))
                {
                    return(false);
                }

                string strPhoneInfo;
                if (strContactInfo.Length == 9)
                {
                    strContactInfo = Convert.ToString(Convert.ToInt32(char.Parse(strContactInfo.Substring(0, 1))), 16) + strContactInfo.Substring(1, strContactInfo.Length - 1);
                }
                strPhoneInfo = strContactInfo.PadRight(32, 'F');


                #region 初始化卡显示信息

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                byte[] arrData = YuChuanDevice.ChangeStrToHex(strPhoneInfo);
                int    iRes    = YuChuanDevice.rf_write(dicSection[bSection][0], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                string        strPhoneSub   = string.Empty.PadLeft(12, 'F');
                List <string> listPhoneWait = new List <string>();
                for (int i = 0; i < 4; i++)
                {
                    listPhoneWait.Add(strPhoneSub);
                }
                for (int i = 0; i < listPhoneNums.Count; i++)
                {
                    listPhoneWait[i] = listPhoneNums[i].PadLeft(12, '0').PadRight(16, 'F');
                }
                string strPhoneListOne = listPhoneWait[0] + listPhoneWait[1];
                string strPhoneListTwo = listPhoneWait[2] + listPhoneWait[3];

                #region 初始化第一批电话列表

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPhoneListOne);
                iRes    = YuChuanDevice.rf_write(dicSection[bSection][1], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                #region 初始化第二批电话列表

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPhoneListTwo);
                iRes    = YuChuanDevice.rf_write(dicSection[bSection][2], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion
            }
            catch (Exception ex)
            {
                throw ex;
            }

            YuChuanDevice.rf_beep(_iBeepInterval);
            return(true);
        }
Пример #24
0
        public override bool WriteInitSubzVal(decimal dMoney)
        {
            Dictionary <byte, List <byte> > dicSect = EquipmentGeneral.GetCardSectionPieceList();
            byte bSection = 2;

            YuChuanDevice.rf_beep(_iBeepInterval);

            try
            {
                #region 写入初始水控金额数据

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                //水控金额
                string strSubVal = EquipmentGeneral.IntToHex((int)(dMoney * 100), 8).PadRight(8, '0');
                strSubVal = strSubVal.Substring(6, 2) + strSubVal.Substring(4, 2) + strSubVal.Substring(2, 2) + strSubVal.Substring(0, 2);

                //水控金额反码
                string strSubComplement = EquipmentGeneral.GetComplement(strSubVal);

                string strPieceData = strSubVal + strSubComplement + strSubVal + this._strSubValCRC;
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                byte[] arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                int    iRes    = YuChuanDevice.rf_write(dicSect[bSection][0], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion

                #region 写入备份水控金额数据

                if (!ReadCardsPrepare(bSection))
                {
                    return(false);
                }

                strPieceData = strSubVal + strSubComplement + strSubVal + this._strSubValBakCRC;
                if (strPieceData.Length != 32)
                {
                    return(false);
                }

                arrData = YuChuanDevice.ChangeStrToHex(strPieceData);
                iRes    = YuChuanDevice.rf_write(dicSect[bSection][1], arrData);
                if (iRes != 0)
                {
                    return(false);
                }

                #endregion
            }
            catch (Exception ex)
            {
                throw ex;
            }

            YuChuanDevice.rf_beep(_iBeepInterval);
            return(true);
        }