using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Runtime.Serialization;
namespace Atomx.Utils.Extension
{
public static class StringExtension
{
//
/// MD5加密,输出的字母是大写
///
///
///
public static string ToMD5(this string text)
{
MD5 md5 = MD5.Create();
return BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(text))).Replace("-", "");
}
///
/// 字符串加密为通用的密码
///
///
///
public static string ToMd5Password(this string text)
{
var md5 = text.ToMD5().ToMD5();
return md5;
}
///
/// 随机数字字符串
///
///
///
public static string GetRandomNumberString(int length)
{
string buffer = "0123456789";
StringBuilder sb = new StringBuilder();
Random r = new Random();
int range = buffer.Length;
for (var i = 0; i < length; i++)
{
sb.Append(buffer.Substring(r.Next(range), 1));
}
return sb.ToString();
}
///
/// 随机数字字符串
///
///
///
public static string GetRandomString(int length)
{
string buffer = "abcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder();
Random r = new Random();
int range = buffer.Length;
for (var i = 0; i < length; i++)
{
sb.Append(buffer.Substring(r.Next(range), 1));
}
return sb.ToString();
}
///
/// 获取URL参数字段值
///
///
///
///
public static string GetQueryString(this string queryString, string paramName)
{
if (string.IsNullOrEmpty(queryString) || string.IsNullOrEmpty(paramName))
{
return "";
}
string paramValue = HttpUtility.ParseQueryString(queryString).Get(paramName)?.ToString() ?? string.Empty;
return paramValue ?? "";
}
///
/// 转换URL参数
///
///
///
public static string BuildQueryString(this object source)
{
var buff = new StringBuilder(string.Empty);
if (source == null)
return buff.ToString();
var modelDict = source.GetType().GetProperties().ToDictionary(a => a.Name.ToLower());
foreach (var item in modelDict)
{
// Skip properties marked with IgnoreDataMember
if (item.Value.IsDefined(typeof(IgnoreDataMemberAttribute), false))
{
continue;
}
if (item.Value.PropertyType != typeof(DateTime?[]))
{
System.Reflection.PropertyInfo? pi = null;
if (modelDict.TryGetValue(item.Key, out pi))
{
object? obj = pi.GetValue(source, null);
if (pi != null && obj != null)
{
var value = obj.ToString();
if (!string.IsNullOrEmpty(value))
{
buff.Append($"{item.Key}={value}&");
}
}
}
}
else
{
System.Reflection.PropertyInfo? pi = null;
if (modelDict.TryGetValue(item.Key, out pi))
{
object? obj = pi.GetValue(source, null);
if (pi != null && obj != null)
{
var data = obj as DateTime?[];
if (data != null)
{
long start = 0;
long end = 0;
if (data[0].HasValue) {
var time1 = data[0].Value.ConvertStartDateTime();
start = time1.DateToNumber();
}
if (data[1].HasValue)
{
var time1 = data[1].Value.ConvertEndDateTime();
end = time1.DateToNumber();
}
if (start > 0 && end > 0)
{
buff.Append($"{item.Key}={start}-{end}&");
}
}
}
}
}
}
return buff.ToString().Trim('&');
}
///
/// url参数转换成字典
///
///
///
public static Dictionary ToUrlDictionary(this string formData)
{
if (string.IsNullOrEmpty(formData))
{
return new Dictionary();
}
try
{
//将参数存入字符数组
string[] dataArry = formData.Split('&');
//定义字典,将参数按照键值对存入字典中
Dictionary dataDic = new Dictionary();
//遍历字符数组
for (int i = 0; i <= dataArry.Length - 1; i++)
{
//当前参数值
string dataParm = dataArry[i];
//"="的索引值
int dIndex = dataParm.IndexOf("=");
//参数名作为key
string key = dataParm.Substring(0, dIndex);
//参数值作为Value
string value = dataParm.Substring(dIndex + 1, dataParm.Length - dIndex - 1);
//将编码后的Value解码
string deValue = HttpUtility.UrlDecode(value, Encoding.GetEncoding("utf-8"));
if (key != "__VIEWSTATE")
{
//将参数以键值对存入字典
dataDic.Add(key, deValue);
}
}
return dataDic;
}
catch (Exception)
{
return new Dictionary();
}
}
}
}