Beispiel #1
0
        /// <summary>
        /// 解读第一块信息
        /// </summary>
        /// <param name="p_strCode">16进制信息</param>
        /// <param name="p_objCardInfo">卡</param>
        private static void EncodeBlock1(string p_strCode, PaymentCard p_objCardInfo)
        {
            //取得块1数据
            string l_strTemp = p_strCode.Substring(0, 6);
            var    l_arrTemp = l_strTemp.ToCharArray();

            //取得卡号
            p_objCardInfo.No = Convert.ToInt32(l_arrTemp[5].ToString() + l_arrTemp[2].ToString() + l_arrTemp[3].ToString() + l_arrTemp[0].ToString() + l_arrTemp[1].ToString(), 16);

            //取得状态
            p_objCardInfo.Valid = l_arrTemp[4] == '8' ? true : false;

            //取得有效时间
            l_strTemp = p_strCode.Substring(6, 6);
            p_objCardInfo.ExpiryDate = DateTime.ParseExact("20" + l_strTemp, "yyyyMMdd", null);

            //取得系统功能
            //l_strTemp = Convert.ToString(Convert.ToInt32(p_strCode.Substring(12, 4), 16), 2);
            //p_objCardInfo.FunctionCode = ("0000000000000000").Substring(0, 16 - l_strTemp.Length) + l_strTemp;
            //p_objCardInfo.FunctionCode = p_strCode.Substring(12, 4);
            p_objCardInfo.FunctionCode = Convert.ToString(Convert.ToInt32(p_strCode.Substring(12, 4), 16), 2).PadLeft(16, '0');

            //取得持卡人姓名
            l_strTemp          = p_strCode.Substring(16, 16);
            p_objCardInfo.Name = EquipmentGeneral.HexToStr(l_strTemp);
        }
Beispiel #2
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);
        }
Beispiel #3
0
        /// <summary>
        /// 解读优卡特消费机水表可读数据格式
        /// </summary>
        /// <param name="dicPieceData"></param>
        /// <param name="payCard"></param>
        /// <returns></returns>
        private ReturnValueInfo DecodeJocatUserInfo(Dictionary <int, string> dicPieceData, ref PaymentCard payCard)
        {
            ReturnValueInfo rvInfo = new ReturnValueInfo();

            try
            {
                #region 解释第一块数据

                string strPieceData = dicPieceData[1];

                //出厂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;

                //注册时间
                payCard.ExpiryDate = DateTime.ParseExact(strPieceData.Substring(6, 6), "yyMMdd", 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 = dicPieceData[2];

                //最低余额
                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

                #region 解释第四块数据

                strPieceData = dicPieceData[4];

                payCard.Money = EquipmentGeneral.HexMoneyToDouble(strPieceData.Substring(0, 8));

                #endregion

                #region 解释第五块数据

                strPieceData = dicPieceData[5];

                payCard.MoneyBackup = EquipmentGeneral.HexMoneyToDouble(strPieceData.Substring(0, 8));

                #endregion

                #region 解释第六块数据

                payCard.MachineList += dicPieceData[6];

                #endregion

                #region 解释第八块数据

                strPieceData = dicPieceData[8];

                payCard.Subsidize = EquipmentGeneral.HexMoneyToDouble(strPieceData.Substring(0, 8));

                #endregion

                #region 解释第九块数据

                strPieceData = dicPieceData[9];

                payCard.SubsidizeBackup = EquipmentGeneral.HexMoneyToDouble(strPieceData.Substring(0, 8));

                #endregion

                #region 解释第十块数据

                payCard.MachineList += dicPieceData[10];

                #endregion
            }
            catch (Exception ex)
            {
                rvInfo.isError     = true;
                rvInfo.messageText = ex.Message;
            }

            return(rvInfo);
        }