New file |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | |
| | | namespace Shared.Phone |
| | | { |
| | | /// <summary> |
| | | /// 一般的共通逻辑方法 |
| | | /// </summary> |
| | | public class HdlCommonLogic |
| | | { |
| | | #region ■ 变量声明___________________________ |
| | | |
| | | /// <summary> |
| | | /// 界面相关的逻辑 |
| | | /// </summary> |
| | | private static HdlCommonLogic m_Current; |
| | | /// <summary> |
| | | /// 界面相关的逻辑 |
| | | /// </summary> |
| | | public static HdlCommonLogic Current |
| | | { |
| | | get |
| | | { |
| | | if (m_Current == null) |
| | | { |
| | | m_Current = new HdlCommonLogic(); |
| | | } |
| | | return m_Current; |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 16进制转化_________________________ |
| | | |
| | | /// <summary> |
| | | /// 将16进制的文本翻译为正常文本 |
| | | /// </summary> |
| | | /// <param name="hexText">16进制的文本</param> |
| | | /// <param name="count">以多少个字节为一组</param> |
| | | /// <returns></returns> |
| | | public string TranslateHexadecimalIntoText(string hexText, int count = 2) |
| | | { |
| | | string textValue = string.Empty; |
| | | while (hexText.Length > 0) |
| | | { |
| | | string temp = hexText.Substring(0, count); |
| | | hexText = hexText.Substring(count); |
| | | int value = Convert.ToInt32(temp, 16); |
| | | textValue += ((char)value).ToString(); |
| | | } |
| | | return textValue; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 将文本翻译为16进制的文本 |
| | | /// </summary> |
| | | /// <param name="text">指定文本</param> |
| | | /// <returns></returns> |
| | | public string TranslateTextIntoHexadecimal(string text) |
| | | { |
| | | string textValue = string.Empty; |
| | | foreach (char c in text) |
| | | { |
| | | int value = Convert.ToInt32(c); |
| | | textValue += Convert.ToString(value, 16); |
| | | } |
| | | return textValue; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 加密和解密_________________________ |
| | | |
| | | /// <summary> |
| | | /// 加密密码 |
| | | /// </summary> |
| | | /// <param name="keys"></param> |
| | | /// <param name="strPsw"></param> |
| | | /// <returns></returns> |
| | | public string EncryptPassword(string keys, string strPsw) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(strPsw) == true) |
| | | { |
| | | return strPsw; |
| | | } |
| | | var des = new System.Security.Cryptography.DESCryptoServiceProvider(); |
| | | byte[] inputByteArray = Encoding.Default.GetBytes(strPsw); |
| | | des.Key = ASCIIEncoding.ASCII.GetBytes(keys); |
| | | des.IV = ASCIIEncoding.ASCII.GetBytes(keys); |
| | | var ms = new System.IO.MemoryStream(); |
| | | var cs = new System.Security.Cryptography.CryptoStream(ms, des.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write); |
| | | cs.Write(inputByteArray, 0, inputByteArray.Length); |
| | | cs.FlushFinalBlock(); |
| | | StringBuilder ret = new StringBuilder(); |
| | | foreach (byte b in ms.ToArray()) |
| | | { |
| | | ret.AppendFormat("{0:X2}", b); |
| | | } |
| | | return ret.ToString().ToLower(); |
| | | } |
| | | catch { return strPsw; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 解密密码 |
| | | /// </summary> |
| | | /// <param name="strPsw"></param> |
| | | /// <returns></returns> |
| | | public string DecryptPassword(string keys, string strPsw) |
| | | { |
| | | try |
| | | { |
| | | if (strPsw == string.Empty) |
| | | { |
| | | return strPsw; |
| | | } |
| | | var des = new System.Security.Cryptography.DESCryptoServiceProvider(); |
| | | |
| | | byte[] inputByteArray = new byte[strPsw.Length / 2]; |
| | | for (int x = 0; x < strPsw.Length / 2; x++) |
| | | { |
| | | int i = (Convert.ToInt32(strPsw.Substring(x * 2, 2), 16)); |
| | | inputByteArray[x] = (byte)i; |
| | | } |
| | | |
| | | des.Key = ASCIIEncoding.ASCII.GetBytes(keys); |
| | | des.IV = ASCIIEncoding.ASCII.GetBytes(keys); |
| | | var ms = new System.IO.MemoryStream(); |
| | | var cs = new System.Security.Cryptography.CryptoStream(ms, des.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write); |
| | | cs.Write(inputByteArray, 0, inputByteArray.Length); |
| | | cs.FlushFinalBlock(); |
| | | |
| | | StringBuilder ret = new StringBuilder(); |
| | | |
| | | return System.Text.Encoding.Default.GetString(ms.ToArray()); |
| | | } |
| | | catch { return strPsw; } |
| | | } |
| | | #endregion |
| | | |
| | | #region ■ 时间转换___________________________ |
| | | |
| | | /// <summary> |
| | | /// 将utc时间类型的字符串(这种格式:2019-11-11T11:31:01),转换为本地时间 |
| | | /// </summary> |
| | | /// <param name="timeText">这种格式:2019-11-11T11:31:01</param> |
| | | /// <returns></returns> |
| | | public DateTime ConvertUtcTimeToLocalTime(string timeText) |
| | | { |
| | | var utcTime = Convert.ToDateTime(timeText); |
| | | return TimeZoneInfo.ConvertTimeFromUtc(utcTime, TimeZoneInfo.Local); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 将utc时间类型的字符串(这种格式:1597302318861,13位数),转换为本地时间 |
| | | /// </summary> |
| | | /// <param name="timeText">这种格式:1597302318861,13位数</param> |
| | | /// <returns></returns> |
| | | public DateTime ConvertUtcTimeToLocalTime2(string timeText) |
| | | { |
| | | DateTime dtStart = new DateTime(1970, 1, 1); |
| | | long lTime = long.Parse(timeText + "0000"); |
| | | TimeSpan toNow = new TimeSpan(lTime); |
| | | DateTime utcTime = dtStart.Add(toNow); |
| | | |
| | | return TimeZoneInfo.ConvertTimeFromUtc(utcTime, TimeZoneInfo.Local); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 拼接超时信息_______________________ |
| | | |
| | | /// <summary> |
| | | /// 拼接网关回复超时的信息 |
| | | /// </summary> |
| | | /// <param name="errorMsg">错误信息</param> |
| | | /// <param name="resultData">网关返回的resultData,里面有【errorMessageBase】这个东西的那种对象</param> |
| | | /// <param name="strResultData">网关返回的resultData,里面的【errorMessageBase】的值,设定有此值时,resultData无效</param> |
| | | /// <param name="addBrackets">是否添加括号</param> |
| | | /// <returns></returns> |
| | | public string CombineGatewayTimeOutMsg(string errorMsg, object resultData, string strResultData = null, bool addBrackets = true) |
| | | { |
| | | if (resultData == null && strResultData == null) |
| | | { |
| | | return errorMsg; |
| | | } |
| | | |
| | | string errorMsgBase = strResultData; |
| | | if (errorMsgBase == null) |
| | | { |
| | | if (resultData is ReceiptGatewayResult) |
| | | { |
| | | errorMsgBase = string.Empty; |
| | | if (((ReceiptGatewayResult)resultData).ErrorMsgDiv == 0) |
| | | { |
| | | errorMsgBase = "回复超时"; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Type myType = resultData.GetType(); |
| | | object errorObj = myType.InvokeMember("errorMessageBase", System.Reflection.BindingFlags.GetField, null, resultData, null); |
| | | if (errorObj == null) |
| | | { |
| | | return errorMsg; |
| | | } |
| | | errorMsgBase = errorObj.ToString(); |
| | | } |
| | | } |
| | | |
| | | if (errorMsgBase.Contains("回复超时") == false) |
| | | { |
| | | //只有回复超时的时候才会加上 |
| | | return errorMsg; |
| | | } |
| | | errorMsg += "\r\n"; |
| | | if (addBrackets == true) |
| | | { |
| | | //(网关回复超时,请稍后再试) |
| | | return errorMsg + "(" + Language.StringByID(R.MyInternationalizationString.uGatewayResponseTimeOut) + ")"; |
| | | } |
| | | else |
| | | { |
| | | //网关回复超时,请稍后再试 |
| | | return errorMsg + Language.StringByID(R.MyInternationalizationString.uGatewayResponseTimeOut); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 读取Resources文件夹的INI___________ |
| | | |
| | | /// <summary> |
| | | /// 读取Resources文件夹的INI内容 |
| | | /// </summary> |
| | | /// <param name="i_iniFileName">Ini文件的名字</param> |
| | | /// <returns></returns> |
| | | public List<string> GetInitFileContent(string i_iniFileName) |
| | | { |
| | | System.IO.StreamReader streamReader = null; |
| | | var listText = new List<string>(); |
| | | try |
| | | { |
| | | #if iOS |
| | | string textFile = Foundation.NSBundle.MainBundle.PathForResource(i_iniFileName, null); |
| | | streamReader = new System.IO.StreamReader(textFile, Encoding.UTF8); |
| | | string text; |
| | | while ((text = streamReader.ReadLine()) != null) |
| | | { |
| | | listText.Add(text.Trim()); |
| | | } |
| | | return listText; |
| | | #endif |
| | | #if Android |
| | | var stream = Application.Activity.Assets.Open(i_iniFileName); |
| | | streamReader = new System.IO.StreamReader(stream, Encoding.UTF8); |
| | | string text; |
| | | while ((text = streamReader.ReadLine()) != null) |
| | | { |
| | | listText.Add(text.Trim()); |
| | | } |
| | | stream.Close(); |
| | | return listText; |
| | | #endif |
| | | } |
| | | catch |
| | | { |
| | | return listText; |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | streamReader?.Close(); |
| | | } |
| | | catch |
| | | { |
| | | } |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 一般方法___________________________ |
| | | |
| | | /// <summary> |
| | | /// 从一堆文字中,获取这一堆文字里面数字字符串的最长长度 |
| | | /// </summary> |
| | | /// <param name="listText"></param> |
| | | /// <returns></returns> |
| | | public int GetNumberMaxLength(List<string> listText) |
| | | { |
| | | int maxLength = 0; |
| | | foreach (var text in listText) |
| | | { |
| | | string value = string.Empty; |
| | | foreach (var c in text) |
| | | { |
| | | if (char.IsNumber(c) == true) |
| | | { |
| | | //数字 |
| | | value += c.ToString(); |
| | | continue; |
| | | } |
| | | else if (value != string.Empty) |
| | | { |
| | | //判断数字长度 |
| | | if (maxLength <= value.Length) |
| | | { |
| | | maxLength = value.Length; |
| | | } |
| | | value = string.Empty; |
| | | } |
| | | } |
| | | //判断数字长度 |
| | | if (maxLength <= value.Length) |
| | | { |
| | | maxLength = value.Length; |
| | | } |
| | | } |
| | | return maxLength; |
| | | } |
| | | #endregion |
| | | } |
| | | } |