/// <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); }
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); }
/// <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); }