/// <summary>
        /// mac值计算
        /// </summary>
        /// <param name="preMsg"></param>
        /// <returns></returns>
        private string CalculateMac(byte[] preMsg)
        {
            StringBuilder mac = new StringBuilder();

            mac.Append(BitConverter.ToString(preMsg.GetSubArray(13, preMsg.Length - 21)).Replace("-", ""));
            return(IEncry.CalculateMAC(mac));
        }
        /// <summary>
        /// 签到
        /// </summary>
        /// <returns></returns>
        public bool Sign()
        {
            ServiceUtil.PayClient.Open();
            SignResponseModel responseModel = ServiceUtil.PayClient.Sign(new VisualSelfServiceEquipment {
                TerminalNo = Settings.TerminalNo
            });

            ServiceUtil.PayClient.Close();

            if (responseModel.ResponseCode != "00")
            {
                return(false);
            }
            string        key       = responseModel.Content;
            StringBuilder sbWorkKey = new StringBuilder();
            bool          result    = false;

            switch (_creditCardPayType)
            {
            case CreditCardPayType.AllInPay:
                #region 通联验证逻辑
                sbWorkKey.Append(key.Substring(6, 32));
                StringBuilder sbMak = new StringBuilder();
                sbMak.Append(key.Substring(46, 16));
                StringBuilder sbTrk = new StringBuilder();
                sbTrk.Append(key.Substring(86, 32));

                IEncry.LoadWorkKeySign(sbWorkKey, sbMak, sbTrk);

                result = IEncry.CheckPIN(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(38, 8) &&
                         IEncry.CheckMAK(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(78, 8) &&
                         IEncry.CheckTRK(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(118, 8);
                #endregion
                break;

            case CreditCardPayType.ChinaUnionPay:
                #region 银联加密
                sbWorkKey.Append(key.Substring(4, 32));
                sbMak = new StringBuilder();
                sbMak.Append(key.Substring(44, 16));
                IEncry.LoadWorkKeySign(sbWorkKey, sbMak);
                result = IEncry.CheckPIN(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(36, 8) &&
                         IEncry.CheckMAK(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(76, 8);
                #endregion
                break;

            default:
                break;
            }

            return(result);
        }
        /// <summary>
        /// 根据读取的磁道数据的明文计算加密后的磁道信息
        /// </summary>
        /// <param name="trackInfo">磁道信息</param>
        /// <returns></returns>
        private string CalculateTrackBlock(string trackInfo)
        {
            string trackStr = BitConverter.ToString(Utilities.TrackBlock(trackInfo)).Replace("-", "");

            return(IEncry.CalculateTRK(new StringBuilder(trackStr)));
        }
        /// <summary>
        /// 根据输入的明文密码和卡号计算加密后的PIN值
        /// </summary>
        /// <param name="CardNo">卡号</param>
        /// <param name="pin">明文密码</param>
        /// <returns></returns>
        private string CalculatePinBlock(string CardNo, string pin)
        {
            string pinStr = BitConverter.ToString(Utilities.PinBlock(pin, CardNo.Substring(CardNo.Length - 13, 12))).Replace("-", "");

            return(IEncry.CalculatePIN(new StringBuilder(pinStr)));
        }
 /// <summary>
 /// 关闭密码键盘
 /// </summary>
 public void CloseF10()
 {
     IEncry.Close();
 }
 /// <summary>
 /// 打开F10密码键盘
 /// </summary>
 public void OpenF10()
 {
     //打开F10密码键盘
     IEncry.Open(M100.CacheCard.CardNo);
     //F10.Open(M100.CacheCard.CardNo);
 }