Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
 }
Exemple #6
0
 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);
        }
Exemple #8
0
 /// <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);
        }
Exemple #11
0
        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)));
        }
Exemple #14
0
        /// <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);
        }
Exemple #15
0
        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, " "));
            }
        }
Exemple #16
0
        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

        }
Exemple #18
0
        /// <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));
        }
Exemple #21
0
 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;
     }
 }
Exemple #22
0
        /// <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);
        }
Exemple #23
0
 /// <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);
 }
Exemple #24
0
 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);
 }
Exemple #25
0
            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));
                }
            }
Exemple #26
0
        /// <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);
        }
Exemple #28
0
 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);
 }
Exemple #29
0
 /// <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);
 }
Exemple #30
0
        /// <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);
        }
Exemple #31
0
        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);
        }