/// <summary> /// 询卡 /// </summary> /// <returns></returns> public YCTWallet Poll() { var response = Request(YCTCommandType.Poll, null); if (response != null && response.IsCommandExcuteOk && response.Data != null && response.Data.Length == 52) { byte[] data = response.Data; YCTWallet w = new YCTWallet(); w.WalletType = data[0]; if (w.WalletType == 1) { w.PhysicalCardID = HexStringConverter.HexToString(Slice(data, 1, 4), string.Empty); //M1钱包物理卡只取前四字节 } else { w.PhysicalCardID = HexStringConverter.HexToString(Slice(data, 1, 8), string.Empty); } w.LogicCardID = HexStringConverter.HexToString(Slice(data, 9, 8), string.Empty); w.Balance = BEBinaryConverter.BytesToInt(Slice(data, 17, 4)); w.Count = BEBinaryConverter.BytesToInt(Slice(data, 21, 2)); w.CardType = HexStringConverter.HexToString(Slice(data, 23, 2), string.Empty); w.MinBalance = data[25] * 100; w.MaxBalance = BEBinaryConverter.BytesToInt(Slice(data, 26, 3)); w.Deposit = BEBinaryConverter.BytesToInt(Slice(data, 29, 4)); if (w.WalletType == 2) { w.Balance -= w.MinBalance; //CPU钱包可用余额为余额减去最小余额 } return(w); } return(null); }
/// <summary> /// 未完整交易记录处理,返回TAC(M1钱包时为4个字节0x00),如果返回空通过 GetlastError获取错误代码 /// </summary> /// <param name="lcn">逻辑卡号(BCD类型)</param> /// <param name="fcn">物理卡号(HEX类型)</param> /// <param name="xrn">票卡交易计数器</param> /// <param name="fee">交易金额</param> /// <param name="bal">本次余额</param> /// <returns></returns> public string RestorePaid(string lcn, string fcn, int xrn, int fee, int bal) { try { List <byte> data = new List <byte>(); data.AddRange(HexStringConverter.StringToHex(lcn)); string fcnTemp = fcn.PadRight(16, '0');//M1卡时,物理卡号只有4字节,向右填充0到8字节字符串 data.AddRange(HexStringConverter.StringToHex(fcnTemp)); data.AddRange(BEBinaryConverter.ShortToBytes((short)xrn)); data.AddRange(BEBinaryConverter.IntToBytes(fee)); data.AddRange(BEBinaryConverter.IntToBytes(bal)); var response = Request(YCTCommandType.RestorePay, data.ToArray()); if (response != null && response.IsCommandExcuteOk) { return(HexStringConverter.HexToString(response.Data, string.Empty)); } return(null); } catch (Exception ex) { Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex); } return(null); }
public static FreeAuthorizationLog Deserialize(string value) { FreeAuthorizationLog item = null; string hex = (new DTEncrypt()).DSEncrypt(value); byte[] data = HexStringConverter.StringToHex(hex); string text = System.Text.UTF8Encoding.UTF8.GetString(data, 0, data.Length); string[] temp = text.Split('|'); if (temp != null && temp.Length > 0) { try { item = new FreeAuthorizationLog(); item.LogDateTime = DateTime.Parse(temp[0]); item.CardID = temp[1]; item.BeginDateTime = DateTime.Parse(temp[2]); item.EndDateTime = DateTime.Parse(temp[3]); item.InPark = bool.Parse(temp[4]); item.CheckOut = bool.Parse(temp[5]); item.OperatorID = temp[6]; item.StationID = temp[7]; item.Memo = temp[8]; } catch (Exception ex) { Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex); item = null; } } return(item); }
/// <summary> /// 充值收费记录反序列化 /// </summary> /// <param name="value"></param> /// <returns></returns> public static CardChargeRecord Deserialize(string value) { CardChargeRecord item = null; try { string hex = (new DTEncrypt()).DSEncrypt(value); byte[] data = HexStringConverter.StringToHex(hex); string text = System.Text.UTF8Encoding.UTF8.GetString(data, 0, data.Length); string[] temp = text.Split('|'); if (temp != null && temp.Length > 0) { item = new CardChargeRecord(); item.ChargeDateTime = DateTime.Parse(temp[0]); item.CardID = temp[1]; item.OwnerName = temp[2]; item.CardCertificate = temp[3]; item.CarPlate = temp[4]; item.ChargeAmount = decimal.Parse(temp[5]); item.Payment = decimal.Parse(temp[6]); item.Balance = decimal.Parse(temp[7]); item.ValidDate = DateTime.Parse(temp[8]); item.PaymentMode = (PaymentMode)(byte.Parse(temp[9])); item.OperatorID = temp[10]; item.StationID = temp[11]; item.Memo = temp[12]; } } catch (Exception ex) { ExceptionPolicy.HandleException(ex); item = null; } return(item); }
/// <summary> /// 充值收费记录序列化 /// </summary> /// <param name="payment"></param> /// <returns></returns> public static string Serialize(CardChargeRecord payment) { try { string text = string.Format("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11}|{12}", payment.ChargeDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), payment.CardID, payment.OwnerName, payment.CardCertificate, payment.CarPlate, payment.ChargeAmount, payment.Payment, payment.Balance, payment.ValidDate.ToString(), (byte)payment.PaymentMode, payment.OperatorID, payment.StationID, payment.Memo); byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(text); string hex = HexStringConverter.HexToString(data, string.Empty); string encript = (new DTEncrypt()).Encrypt(hex); return(encript); } catch (Exception ex) { ExceptionPolicy.HandleException(ex); } return(string.Empty); }
private void SendData(byte[] outPut) { try { lock (_PortLocker) { if (this.IsOpened) { _Port.DtrEnable = false; _Port.RtsEnable = true; if (Debug) { LJH.GeneralLibrary.LOG.FileLog.Log("串口通讯", "----------------------------------------------------------------------------------------------"); } if (Debug) { LJH.GeneralLibrary.LOG.FileLog.Log("串口通讯", "发送数据:" + HexStringConverter.HexToString(outPut, " ")); } _Port.Write(outPut, 0, outPut.Length); int count = (int)(Math.Ceiling((double)outPut.Length / 15)) + 1; //1200bps的波特率,每100ms可以发送的最大的字符15个字符,在此基础上再加100ms等待时长 Thread.Sleep(count * 100); } } } catch (Exception ex) { _LastError = ex.Message; } }
/// <summary> /// 读取加密狗信息 /// </summary> public SoftDogInfo ReadDog() { SoftDogInfo info = null; CheckDog(); info = new SoftDogInfo(); info.DogDevice = true; //项目编号 info.ProjectNo = ReadInteger(61, 4); //适用的软件列表 info.SoftwareList = (SoftwareType)ReadInteger(31, 4); //有效期 string d = MydsEncrypt.Encrypt(ReadString(17, 6)); info.StartDate = DateTime.Parse("20" + d.Substring(0, 2) + "-" + d.Substring(2, 2) + "-" + d.Substring(4, 2)); d = MydsEncrypt.Encrypt(ReadString(5, 6)); info.ExpiredDate = DateTime.Parse("20" + d.Substring(0, 2) + "-" + d.Substring(2, 2) + "-" + d.Substring(4, 2)); //是否是主机加密狗 info.IsHost = ReadInteger(37, 1) == 1; string temp = ReadString(40, 10).Trim(); if (!string.IsNullOrEmpty(temp)) { info.DBUser = MydsEncrypt.Encrypt(temp); } temp = ReadString(50, 10).Trim(); if (!string.IsNullOrEmpty(temp)) { info.DBPassword = MydsEncrypt.Encrypt(temp); } info.Data = HexStringConverter.HexToString(ReadData(0, 100), string.Empty); return(info); }
/// <summary> /// 向读卡器请求命令,并取得返回包 /// </summary> /// <param name="cmd">请求的命令</param> /// <param name="data">请求中包含的数据</param> /// <returns></returns> public YCTPacket Request(YCTCommandType cmd, byte[] data) { lock (_PortLocker) { byte[] request = CreateRequest(cmd, data); if (Log) { Ralid.GeneralLibrary.LOG.FileLog.Log("羊城通读卡器", "发送数据: " + HexStringConverter.HexToString(request, " ")); } _Port.OnDataArrivedEvent -= _Port_OnDataArrivedEvent; _buffer.Clear(); _Responsed.Reset(); _Response = null; _Port.OnDataArrivedEvent += _Port_OnDataArrivedEvent; _Port.SendData(request); if (_Responsed.WaitOne(5000)) { if (_Response != null && _Response.CheckCRC() && _Response.Command == (byte)cmd) { _LastError = _Response.Status; return(_Response); } } } _LastError = -1; return(null); }
public static string Serialize(CardPaymentInfo payment) { string text = string.Format("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11}|{12}|{13}|{14}|{15}|{16}", payment.ChargeDateTime.ToString("yyyy-MM-dd HH:mm:ss"), payment.CardID, payment.EnterDateTime != null ? payment.EnterDateTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : string.Empty, payment.CarPlate, payment.CardType, payment.CarType, (byte)payment.TariffType, payment.LastTotalPaid, payment.Accounts, payment.Paid, payment.Discount, (byte)payment.PaymentMode, (byte)payment.PaymentCode, payment.IsCenterCharge, payment.Operator, payment.StationID, payment.Memo); byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(text); string hex = HexStringConverter.HexToString(data, string.Empty); string encript = (new DTEncrypt()).Encrypt(hex); return(encript); }
public int WriteData(string strData) { int ret = -1; var data = HexStringConverter.StringToHex(strData); ret = DogWrite_32(data.Length, 0, data); return(ret); }
private string UserToString(AccountData user) { string passwordHash = HexStringConverter.ToString(user.PasswordHash); string salt = HexStringConverter.ToString(user.Salt); string difficulty = Convert.ToString(user.Difficulty); string accessLevel = Convert.ToString(user.AccessLevel); return(string.Format("{0} {1} {2} {3} {4} {5}", user.Username, passwordHash, salt, difficulty, accessLevel, user.Contact)); }
public void ConvertsProperly(string input, byte[] bytes) { Span <byte> outputBytes = stackalloc byte[input.Length / 2]; HexStringConverter.GetBytes(input, outputBytes); Assert.Equal(bytes, outputBytes.ToArray()); Assert.Equal(input, HexStringConverter.GetString(bytes)); }
public string EncryptPassword(string plainPassword) { ReadOnlySpan <char> password = plainPassword.AsSpan(0, Math.Min(256, plainPassword.Length)); byte[] bytes = new byte[Encoding.ASCII.GetByteCount(password)]; Encoding.ASCII.GetBytes(password, bytes); return(HexStringConverter.GetString(m_SHA2HashProvider.ComputeHash(bytes))); }
/// <summary> /// 完成消费,返回TAC,如果返回空通过 GetlastError获取错误代码 /// </summary> /// <returns></returns> public string CompletePaid() { var response = Request(YCTCommandType.CompletePaid, null); if (response != null && response.IsCommandExcuteOk) { return(HexStringConverter.HexToString(response.Data, string.Empty)); } return(null); }
private void _Port_OnDataArrivedEvent(object sender, byte[] data) { _buffer.Write(data); YCTPacket p = _buffer.Read(); if (p != null) { _Response = p; _Responsed.Set(); Ralid.GeneralLibrary.LOG.FileLog.Log("羊城通读卡器", "接收数据: " + HexStringConverter.HexToString(p.AllBytes, " ")); } }
private static AccountData StringToUser(string userString) { string[] split = userString.Split(' '); string username = split[0]; byte[] passwordHash = HexStringConverter.ToBytes(split[1]); byte[] salt = HexStringConverter.ToBytes(split[2]); int difficulty = Convert.ToInt32(split[3]); int accessLevel = Convert.ToInt32(split[4]); string contact = split[5]; return(new AccountData(username, passwordHash, salt, difficulty, accessLevel, contact)); }
public void TopicBind(string topic, string exchangeName, string queueName = null) { Guard.ArgumentNotNullOrEmpty(Identifier, "Identifier"); Guard.ArgumentNotNullOrEmpty(topic, "topic"); Guard.ArgumentNotNullOrEmpty(exchangeName, "exchangeName"); var isChange = false; if (_topic != topic) { checkTopic(topic); _topic = topic; isChange = true; } if (_exchangeName != exchangeName) { _exchangeName = exchangeName; isChange = true; } if (_queueName != queueName) { _queueName = queueName; isChange = true; } if(string.IsNullOrEmpty(_queueName)) { _queueName = new HexStringConverter() .ToString(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(topic + exchangeName + Identifier))); } if (!isChange) return; ConfigUtil.Instance.RegisterConsumer(ConfigKey);//添加 if (!string.IsNullOrEmpty(PullingRequestUri)) ChannelConsumerCountor.RemoveConsumer(PullingRequestUri);//移除CONSUMER记数 _pullingRequestUri = string.Format(Format, _topic, _exchangeName, Identifier, string.IsNullOrEmpty(_queueName) ? "" : "/" + _queueName, string.IsNullOrEmpty(HeaderFilter) ? "" : "?filter=" + HeaderFilter); Buffer.PullingRequestUri = _pullingRequestUri; Buffer.BatchSize = (int)this.BatchSize; Buffer.ReceiveTimeout = (int)this.ReceiveTimeout; ChannelConsumerCountor.AddConsumer(PullingRequestUri);//添加CONSUMER记数 #if DEBUG var directory = AppDomain.CurrentDomain.BaseDirectory; using (var sw = System.IO.File.AppendText(Path.Combine(directory, @"list.txt"))) { sw.WriteLine("{0}------>{1}", PullingRequestUri, new HexStringConverter().ToString( MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(PullingRequestUri)))); } #endif }
/// <summary> /// 停车收费记录反序列号 /// </summary> /// <param name="value"></param> /// <returns></returns> public static CardPaymentInfo Deserialize(string value) { CardPaymentInfo item = null; try { string hex = (new DTEncrypt()).DSEncrypt(value); byte[] data = HexStringConverter.StringToHex(hex); string text = System.Text.UTF8Encoding.UTF8.GetString(data, 0, data.Length); string[] temp = text.Split('|'); if (temp != null && temp.Length > 0) { item = new CardPaymentInfo(); item.ChargeDateTime = DateTime.Parse(temp[0]); item.CardID = temp[1]; if (string.IsNullOrEmpty(temp[2])) { item.EnterDateTime = null; } else { item.EnterDateTime = DateTime.Parse(temp[2]); } item.CarPlate = temp[3]; item.CardType = (CardType)byte.Parse(temp[4]); item.CarType = byte.Parse(temp[5]); item.TariffType = (TariffType)(byte.Parse(temp[6])); item.LastTotalPaid = decimal.Parse(temp[7]); item.Accounts = decimal.Parse(temp[8]); item.Paid = decimal.Parse(temp[9]); item.Discount = decimal.Parse(temp[10]); item.PaymentMode = (PaymentMode)(byte.Parse(temp[11])); item.PaymentCode = (PaymentCode)(byte.Parse(temp[12])); bool iscenter = false; if (bool.TryParse(temp[13], out iscenter)) { item.IsCenterCharge = iscenter; } item.OperatorID = temp[14]; item.StationID = temp[15]; item.Memo = temp[16]; item.ParkFee = decimal.Parse(temp[17]); } } catch (Exception ex) { ExceptionPolicy.HandleException(ex); item = null; } return(item); }
public bool ValidatePassword(string encryptedPassword, string plainPassword) { Span <byte> encryptedBytes = stackalloc byte[m_OutputSize]; HexStringConverter.GetBytes(encryptedPassword, encryptedBytes); ushort iterations = BinaryPrimitives.ReadUInt16LittleEndian(encryptedBytes.Slice(0, 2)); Span <byte> salt = encryptedBytes.Slice(2, m_SaltSize); ReadOnlySpan <byte> hash = new Rfc2898DeriveBytes(plainPassword, salt.ToArray(), iterations, m_Algorithm).GetBytes(m_HashSize); return(hash.SequenceEqual(encryptedBytes.Slice(m_SaltSize + 2))); }
public string EncryptPassword(string plainPassword) { Span <byte> output = stackalloc byte[m_OutputSize]; int iterations = Utility.RandomMinMax(m_MinIterations, m_MaxIterations); BinaryPrimitives.WriteUInt16LittleEndian(output.Slice(0, 2), (ushort)iterations); var rfc2898 = new Rfc2898DeriveBytes(plainPassword, m_SaltSize, iterations, m_Algorithm); rfc2898.Salt.CopyTo(output.Slice(2, m_SaltSize)); rfc2898.GetBytes(m_HashSize).CopyTo(output.Slice(m_SaltSize + 2)); return(HexStringConverter.GetString(output)); }
private void ReadDataTask() { try { while (true) { byte[] data = ReadData(); //从串口中读取数据 if (data != null && data.Length > 0) { _Buffer.AppendData(data); if (Debug) { LJH.GeneralLibrary.LOG.FileLog.Log("串口通讯", "收到数据:" + HexStringConverter.HexToString(data, " ")); } ResponsePacket p = _Buffer.Dequeue(); while (p != null) { if (Debug) { LJH.GeneralLibrary.LOG.FileLog.Log("串口通讯", p.CheckCRC ? "解析包成功" : "解析包成功但校验失败"); } if (p.CheckCRC) { if (p.PacketType == 0x01) //成组包,从设备主动上传的包 { OnPacketArrived(p); } else if (p.PacketType == 0x06) //从主包,从设备回复主设备 { if (_RequestPakcet != null && _RequestPakcet.Command == p.Command && _RequestPakcet.Address == p.Address) { _ResponsePacket = p; _DeviceResponsed.Set(); //通知设备有回复 } } } p = _Buffer.Dequeue(); } } Thread.Sleep(100); } } catch (ThreadAbortException) { } catch (Exception ex) { _LastError = ex.Message; } }
/// <summary> /// ¼ì²é¿¨Æ¬ÃÜÂ뺯Êý /// </summary> /// <param name="sector">ÉÈÇø</param> /// <param name="keybyte">ÃÜÂë</param> /// <returns></returns> public override bool CheckKey(int sector, byte[] keybyte) { string temp = HexStringConverter.HexToString(keybyte, string.Empty); if (!string.IsNullOrEmpty(temp)) { byte[] key = System.Text.ASCIIEncoding.ASCII.GetBytes(temp); if (NLRF_ChkKey(_Hdev, 0, key, 12) == 0) { return(true); } } return(false); }
/// <summary> /// 记录类型序列化 /// </summary> /// <param name="payment"></param> /// <returns></returns> public static string Serialize(RecordType type) { try { string text = type.ToString(); byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(text); string hex = HexStringConverter.HexToString(data, string.Empty); string encript = (new DTEncrypt()).Encrypt(hex); return(encript); } catch (Exception ex) { Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex); } return(string.Empty); }
private Packet GetPacket(List <byte> data) { while (data.Count > 0) //去掉前面的无用字节 { if (data[0] != _HEAD) { data.RemoveAt(0); } else { if (data.Count >= 7 && data[6] != _HEAD) //如果第6个字节不是包头,说明前面这些字符也是无效的。 { data.RemoveRange(0, 6); } else { if (data.Count >= 9 && data.Count >= data[8] + 11 && data[11 + data[8] - 1] != _TAIL) //如果包尾不是指定的字节,则说明前面的数据都是无用的 { data.RemoveRange(0, 11 + data[8]); } else { break; } } } } if (data.Count >= 9 && data.Count >= data[8] + 11) { byte[] p = new byte[data[8] + 11]; data.CopyTo(0, p, 0, p.Length); data.RemoveRange(0, p.Length); //同时从缓存中删除包 var ret = new Packet(); ret.Command = p[7]; ret.Address = HexStringConverter.HexToString(new byte[] { p[5], p[4], p[3], p[2], p[1] }, string.Empty).Trim('A'); if (p[8] > 2) //前两字节数据与请求数据的一样,不需要 { byte[] d = new byte[p[8] - 2]; Array.Copy(p, 9, d, 0, d.Length); ret.Data = d; } return(ret); } return(null); }
private static void ExtractTracks(IDictionary <string, string> decodeData, out string track1, out string track2, out bool encrypted, out string encryptedTrack) { track1 = null; track2 = null; encrypted = false; encryptedTrack = null; int formatId = GetFieldAsInt(decodeData, RamblerFormatId); var encodedTrack = GetFieldAsString(decodeData, RamblerEncodedTrack); if (formatId == RamblerFormatIdUnencrypted) { // If the card is unencrypted, decoding track var track1Length = GetFieldAsInt(decodeData, RamblerTrack1Length); var track2Length = GetFieldAsInt(decodeData, RamblerTrack2Length); try { var rawTrackBytes = HexStringConverter.ToByteArray(encodedTrack, true); if (track1Length > 0) { track1 = MagneticStripeParser.ExtractTrack(rawTrackBytes, 0, track1Length - 1, MagneticTrackKind.Track1); } if (track2Length > 0) { track2 = MagneticStripeParser.ExtractTrack(rawTrackBytes, track1Length, track2Length - 1, MagneticTrackKind.Track2); } } catch (Exception ex) { throw new FormatException("The card has invalid track.", ex); } } else if (formatId == RamblerFormatIdEncrypted) { encrypted = true; encryptedTrack = encodedTrack; } else { throw new NotSupportedException(string.Format("The Rambler data format '{0}' not supported.", formatId)); } }
/// <summary> /// 消费,返回消费记录,如果返回null,通过 GetlastError获取错误代码 /// </summary> /// <param name="paid">消费金额(分为单位)</param> /// <param name="walletType">钱包类型 1表示M1 2表示CPU</param> /// <param name="maxOfflineMonth">离线过期月数</param> /// <returns></returns> public YCTPaymentInfo Paid(int paid, int walletType, int maxOfflineMonth = 12) { var ret = Prepaid(paid, walletType, maxOfflineMonth); if (ret != null) { var response = Request(YCTCommandType.CompletePaid, null); if (response != null && response.IsCommandExcuteOk) { if (walletType == 2) { ret.交易认证码 = HexStringConverter.HexToString(response.Data, string.Empty); } return(ret); } } return(null); }
public static string Serialize(FreeAuthorizationLog log) { string text = string.Format("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}", log.LogDateTime.ToString("yyyy-MM-dd HH:mm:ss"), log.CardID, log.BeginDateTime.ToString("yyyy-MM-dd HH:mm:ss"), log.EndDateTime.ToString("yyyy-MM-dd HH:mm:ss"), log.InPark, log.CheckOut, log.OperatorID, log.StationID, log.Memo); byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(text); string hex = HexStringConverter.HexToString(data, string.Empty); string encript = (new DTEncrypt()).Encrypt(hex); return(encript); }
private YCTPaymentInfo GetPaymentInfoFromCPU(YCTPacket packet) { byte[] data = packet.Data; //86字节 if (data == null || data.Length == 0) { return(null); } try { YCTPaymentInfo payment = new YCTPaymentInfo(); payment.本次交易设备编号 = HexStringConverter.HexToString(Slice(data, 0, 6), string.Empty); payment.终端交易流水号 = BEBinaryConverter.BytesToInt(Slice(data, 6, 4)); payment.本次交易日期时间 = DateTime.ParseExact(HexStringConverter.HexToString(Slice(data, 10, 7), string.Empty), "yyyyMMddHHmmss", null); payment.逻辑卡号 = HexStringConverter.HexToString(Slice(data, 17, 8), string.Empty); payment.物理卡号 = HexStringConverter.HexToString(Slice(data, 25, 8), string.Empty); payment.交易金额 = BEBinaryConverter.BytesToInt(Slice(data, 33, 4)); payment.票价 = BEBinaryConverter.BytesToInt(Slice(data, 37, 4)); payment.本次余额 = BEBinaryConverter.BytesToInt(Slice(data, 41, 4)); payment.交易类型 = Slice(data, 45, 1)[0]; payment.附加交易类型 = Slice(data, 46, 1)[0]; payment.票卡充值交易计数 = BEBinaryConverter.BytesToInt(Slice(data, 47, 2)); payment.票卡消费交易计数 = BEBinaryConverter.BytesToInt(Slice(data, 49, 2)); payment.累计门槛月份 = HexStringConverter.HexToString(Slice(data, 51, 2), string.Empty); payment.公交门槛计数 = Slice(data, 53, 1)[0]; payment.地铁门槛计数 = Slice(data, 54, 1)[0]; payment.联乘门槛计数 = Slice(data, 55, 1)[0]; payment.本次交易入口设备编号 = HexStringConverter.HexToString(Slice(data, 56, 6), string.Empty); payment.本次交易入口日期时间 = HexStringConverter.HexToString(Slice(data, 62, 7), string.Empty); payment.次交易设备编号 = HexStringConverter.HexToString(Slice(data, 69, 6), string.Empty); payment.次交易日期时间 = HexStringConverter.HexToString(Slice(data, 75, 4), string.Empty); payment.区域代码 = HexStringConverter.HexToString(Slice(data, 79, 1), string.Empty); payment.区域卡类型 = HexStringConverter.HexToString(Slice(data, 80, 2), string.Empty); payment.区域子码 = HexStringConverter.HexToString(Slice(data, 82, 1), string.Empty); payment.交易认证码 = HexStringConverter.HexToString(Slice(data, 83, 4), string.Empty); return(payment); } catch (Exception ex) { Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex); } return(null); }
/// <summary> /// 记录类型反序列化 /// </summary> /// <param name="value"></param> /// <returns></returns> public static RecordType Deserialize(string value) { try { RecordType type = RecordType.Unknow; string hex = (new DTEncrypt()).DSEncrypt(value); //string hex = DSEncrypt(value); byte[] data = HexStringConverter.StringToHex(hex); string text = System.Text.UTF8Encoding.UTF8.GetString(data, 0, data.Length); if (System.Enum.TryParse <RecordType>(text, out type)) { return(type); } } catch (Exception ex) { Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex); } return(RecordType.Unknow); }
/// <summary> /// 询卡 /// </summary> /// <returns></returns> public YCTWallet ReadCard(WegenType wg = WegenType.Wengen34) { var response = Request(YCTCommandType.Poll, null); if (response != null && response.IsCommandExcuteOk && response.Data != null && response.Data.Length == 52) { byte[] data = response.Data; YCTWallet w = new YCTWallet(); w.WalletType = data[0]; if (w.WalletType == 1) { w.PhysicalCardID = HexStringConverter.HexToString(Slice(data, 1, 4), string.Empty); //M1钱包物理卡只取前四字节 } else { w.PhysicalCardID = HexStringConverter.HexToString(Slice(data, 1, 8), string.Empty); } w.LogicCardID = HexStringConverter.HexToString(Slice(data, 9, 8), string.Empty); w.Balance = BEBinaryConverter.BytesToInt(Slice(data, 17, 4)); w.Count = BEBinaryConverter.BytesToInt(Slice(data, 21, 2)); w.CardType = HexStringConverter.HexToString(Slice(data, 23, 2), string.Empty); w.MinBalance = data[25] * 100; w.MaxBalance = BEBinaryConverter.BytesToInt(Slice(data, 26, 3)); w.Deposit = BEBinaryConverter.BytesToInt(Slice(data, 29, 4)); _LastWallet = w; return(w); } else if (LastError == 0x83) //验证出错,说明卡片是其它IC卡,继续读其序列号 { string sn = ReadSN(wg == WegenType.Wengen26 ? 1 : 0); if (sn != null) { _LastWallet = new YCTWallet() { LogicCardID = sn, PhysicalCardID = sn, CardType = string.Empty }; return(_LastWallet); } } return(null); }
public static string GetCardID(byte[] data) { string ret = null; try { ret = ConvertToAsc(data); if (ret.Length <= 8) { byte[] temp = HexStringConverter.StringToHex(ret); if (temp != null && temp.Length > 0) { ret = BEBinaryConverter.BytesToUint(temp).ToString(); } } } catch { } return(ret); }