using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone
{
///
/// 一般的共通逻辑方法
///
public class HdlCommonLogic
{
#region ■ 变量声明___________________________
///
/// 界面相关的逻辑
///
private static HdlCommonLogic m_Current;
///
/// 界面相关的逻辑
///
public static HdlCommonLogic Current
{
get
{
if (m_Current == null)
{
m_Current = new HdlCommonLogic();
}
return m_Current;
}
}
#endregion
#region ■ 16进制转化_________________________
///
/// 将16进制的文本翻译为正常文本
///
/// 16进制的文本
/// 以多少个字节为一组
///
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;
}
///
/// 将文本翻译为16进制的文本
///
/// 指定文本
///
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 ■ 加密和解密_________________________
///
/// 加密密码
///
///
///
///
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; }
}
///
/// 解密密码
///
///
///
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 ■ 时间转换___________________________
///
/// 将utc时间类型的字符串(这种格式:2019-11-11T11:31:01),转换为本地时间
///
/// 这种格式:2019-11-11T11:31:01
///
public DateTime ConvertUtcTimeToLocalTime(string timeText)
{
var utcTime = Convert.ToDateTime(timeText);
return TimeZoneInfo.ConvertTimeFromUtc(utcTime, TimeZoneInfo.Local);
}
///
/// 将utc时间类型的字符串(这种格式:1597302318861,13位数),转换为本地时间
///
/// 这种格式:1597302318861,13位数
///
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 ■ 拼接超时信息_______________________
///
/// 拼接网关回复超时的信息
///
/// 错误信息
/// 网关返回的resultData,里面有【errorMessageBase】这个东西的那种对象
/// 网关返回的resultData,里面的【errorMessageBase】的值,设定有此值时,resultData无效
/// 是否添加括号
///
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___________
///
/// 读取Resources文件夹的INI内容
///
/// Ini文件的名字
///
public List GetInitFileContent(string i_iniFileName)
{
System.IO.StreamReader streamReader = null;
var listText = new List();
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 ■ 一般方法___________________________
///
/// 从一堆文字中,获取这一堆文字里面数字字符串的最长长度
///
///
///
public int GetNumberMaxLength(List 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
}
}