using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using MyCode.Project.Infrastructure.Common;
using MyCode.Project.Infrastructure.Constant;
using MyCode.Project.Infrastructure.Extensions;
using System.Text.RegularExpressions;
using System.Linq;
namespace MyCode.Project.Infrastructure
{
///
///
///
public class MyUtils
{
#region GetNewId(取得自递增ID,非雪花算法)
///
/// 取得自递增ID
///
///
public static long GetNewId()
{
System.Threading.Thread.Sleep(1);
return Convert.ToInt64(DateTime.Now.ToString("yyMMddHHmmssfff") + WebConfigUtils.GetAppSettingsInfo("IdLastNum"));
}
#endregion
#region 获取业务编号
///
/// 获取单据编号
///
/// 前缀
///
public static string GetBillNo(string prefix)
{
System.Threading.Thread.Sleep(1);
var num = (new Random().Next(99) + 1).ToString("00");
return prefix + DateTime.Now.ToString("yyMMddHHmmssfff") + num;
}
#endregion
#region GetRandNum(从一个范围得到一个随机的数字)
public static int GetRandNum(int min,int max)
{
return new Random().Next(min, max);
}
#endregion
private static char[] constant = { '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
#region GenerateRandom(生成不重复的随机数)
///
/// 生成不重复的随机数
///
/// 长度
///
public static string GenerateRandom(int length)
{
var random = new StringBuilder(62);
Random rd = new Random(Guid.NewGuid().GetHashCode());
for (int i = 0; i < length; i++)
{
random.Append(constant[rd.Next(62)]);
}
var returnV = random.ToString();
return returnV;
}
#endregion
#region CreateValidateCode(生成验证码)
///
/// 生成验证码
///
/// 指定验证码的长度
///
public static string CreateValidateCode(int pMax)
{
pMax = (pMax < 2 || pMax > 6) ? 4 : pMax;
int[] randMembers = new int[pMax];
int[] validateNums = new int[pMax];
StringBuilder validateNumberStr = new StringBuilder();
//生成起始序列值
int seekSeek = unchecked((int)DateTime.Now.Ticks);
Random seekRand = new Random(seekSeek);
int beginSeek = seekRand.Next(0, Int32.MaxValue - pMax * 10000);
int[] seeks = new int[pMax];
for (int i = 0; i < pMax; i++)
{
beginSeek += 10000;
seeks[i] = beginSeek;
}
//生成随机数字
for (int i = 0; i < pMax; i++)
{
Random rand = new Random(seeks[i]);
int pownum = 1 * (int)Math.Pow(10, pMax);
randMembers[i] = rand.Next(pownum, Int32.MaxValue);
}
//抽取随机数字
for (int i = 0; i < pMax; i++)
{
string numStr = randMembers[i].ToString();
int numLength = numStr.Length;
Random rand = new Random();
int numPosition = rand.Next(0, numLength - 1);
validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
}
//生成验证码
for (int i = 0; i < pMax; i++)
{
validateNumberStr.Append(validateNums[i]);
}
return validateNumberStr.ToString();
}
#endregion
#region ConvertLongToDateTime(转long为时间)
// long --> DateTime
public static DateTime ConvertLongToDateTime(long d)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(d + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
return dtStart.Add(toNow);
}
#endregion
#region GetTimeStamp(得到Linux那边的时间戳)
public static int GetTimeStamp()
{
var startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(DateTime.Now - startTime).TotalSeconds;
}
#endregion
#region GetDistance(取得两点位置的距离)
//地球半径,单位米
private const double EARTH_RADIUS = 6378137;
///
/// 计算两点位置的距离,返回两点的距离,单位 米
/// 该公式为GOOGLE提供,误差小于0.2米
///
/// 第一点经度
/// 第一点纬度
/// 第二点经度
/// 第二点纬度
///
public static double GetDistance( double lng1, double lat1, double lng2 ,double lat2)
{
double radLat1 = Rad(lat1);
double radLng1 = Rad(lng1);
double radLat2 = Rad(lat2);
double radLng2 = Rad(lng2);
double a = radLat1 - radLat2;
double b = radLng1 - radLng2;
double result = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2))) * EARTH_RADIUS;
return result;
}
///
/// 经纬度转化成弧度
///
///
///
private static double Rad(double d)
{
return (double)d * Math.PI / 180d;
}
#endregion
#region SubStrAddSuffix(截取字符串长度,超出部分使用后缀suffix代替)
///
/// 截取字符串长度,超出部分使用后缀suffix代替,比如abcdevfddd取前3位,后面使用...代替
///
///
///
///
///
public static string SubStrAddSuffix(string orginStr, int length, string suffix)
{
string ret = orginStr;
if (orginStr.Length > length)
{
ret = orginStr.Substring(0, length) + suffix;
}
return ret;
}
#endregion
#region 删除最后结尾的一个逗号
///
/// 删除最后结尾的一个逗号
///
public static string DelLastComma(string str)
{
if (str.Length < 1)
{
return "";
}
return str.Substring(0, str.LastIndexOf(","));
}
#endregion
#region 删除最后结尾的指定字符后的字符
///
/// 删除最后结尾的指定字符后的字符
///
public static string DelLastChar(string str, string strchar)
{
if (string.IsNullOrEmpty(str))
return "";
if (str.LastIndexOf(strchar) >= 0 && str.LastIndexOf(strchar) == str.Length - 1)
{
return str.Substring(0, str.LastIndexOf(strchar));
}
return str;
}
#endregion
#region 生成指定长度的字符串
///
/// 生成指定长度的字符串,即生成strLong个str字符串
///
/// 生成的长度
/// 以str生成字符串
///
public static string StringOfChar(int strLong, string str)
{
string ReturnStr = "";
for (int i = 0; i < strLong; i++)
{
ReturnStr += str;
}
return ReturnStr;
}
#endregion
#region 截取字符长度
///
/// 截取字符长度
///
/// 字符
/// 长度
///
public static string CutString(string inputString, int len)
{
if (string.IsNullOrEmpty(inputString))
return "";
inputString = DropHTML(inputString);
ASCIIEncoding ascii = new ASCIIEncoding();
int tempLen = 0;
string tempString = "";
byte[] s = ascii.GetBytes(inputString);
for (int i = 0; i < s.Length; i++)
{
if ((int)s[i] == 63)
{
tempLen += 2;
}
else
{
tempLen += 1;
}
try
{
tempString += inputString.Substring(i, 1);
}
catch
{
break;
}
if (tempLen > len)
break;
}
//如果截过则加上半个省略号
byte[] mybyte = System.Text.Encoding.Default.GetBytes(inputString);
if (mybyte.Length > len)
tempString += "…";
return tempString;
}
#endregion
#region 清除HTML标记
public static string DropHTML(string Htmlstring)
{
if (string.IsNullOrEmpty(Htmlstring)) return "";
//删除脚本
Htmlstring = Regex.Replace(Htmlstring, @"", "", RegexOptions.IgnoreCase);
//删除HTML
Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"