Files
17168ERP/web/App_Code/function.cs
2025-08-29 01:27:25 +08:00

588 lines
20 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Text;
using System.Text.RegularExpressions;
using System.Net;
using System.Reflection;
using System.ComponentModel;
using System.Web.UI.WebControls;
namespace MyWeb
{
public class function : System.Web.UI.Page
{
public function()
{
//
// TODO: 在這裡新增建構函式邏輯
//
}
public string randCode(int count)
{
//產生驗證碼
Random rnd = new Random(Guid.NewGuid().GetHashCode());
string[] code = {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"m",
"n",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z"
};
string rnd_code = null;
//產生10碼
for (int i = 1; i <= count; i++)
{
rnd_code += "" + code[rnd.Next(0, code.Length - 1)];
}
return rnd_code;
}
public string randKey(int count)
{
//產生驗證碼
Random rnd = new Random(Guid.NewGuid().GetHashCode());
string[] code = {
"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","B","D","E","F","G","H","I", "J","K","L","M", "N", "O","P","Q","R","S","T","U","V","W","X","Y","Z",
"+","/"
};
string rnd_code = null;
//產生10碼
for (int i = 1; i <= count; i++)
{
rnd_code += "" + code[rnd.Next(0, code.Length - 1)];
}
return rnd_code;
}
public bool IsNumeric(object Expression)
{
bool isNum;
double retNum;
isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
return isNum;
}
public bool isDate(object chkString)
{
DateTime dt;
return DateTime.TryParse(Convert.ToString(chkString), out dt);
}
public DateTime ValDate(object Expression)
{
DateTime _DateTime = Convert.ToDateTime(Expression);
return _DateTime;
}
public int Val(object Expression)
{
int _Int = 0;
if (IsNumeric(Expression))
{
_Int = Convert.ToInt32(Expression.ToString().Replace(",", ""));
}
return _Int;
}
public float ValFloat(object Expression)
{
float _Int = 0;
if (!isStrNull(Expression))
{
_Int = Convert.ToSingle(ValString(Expression).Replace(",", ""));
}
return _Int;
}
public string ValMoney(object Expression, int DecimalLength = 2) //千分位預設最多到小數點第2位
{
string format = "N0";
string[] m = ValString(Expression).Replace(",", "").Split('.');
if (ValString(Expression).IndexOf(".") > -1)
{
int ML = (m[m.Length - 1].Length > DecimalLength ? DecimalLength : m[m.Length - 1].Length);
if (!isStrNull(m[m.Length - 1])) { format = "N" + ML.ToString(); }
}
return ValFloat(Expression).ToString(format);
}
public string ValString(object Expression)
{
string _String = "";
_String = Convert.ToString(Expression);
return _String;
}
public string ValMoneyCh(object Expression)
{
string price = Expression.ToString().Split('.')[0]; //去除小數點
string i = price.Replace(",", ""); //去除千分位
string[] numc_arr = ("零,壹,貳,參,肆,伍,陸,柒,捌,玖").Split(',');
string[] unic_arr = (",拾,佰,仟").Split(',');
string[] unic1_arr = ("元整,萬,億,兆,京").Split(',');
int c0 = 0;
List<string> str = new List<string>();
do
{
int aa = 0;
int c1 = 0;
string s = "";
//取最右邊四位數跑迴圈,不足四位就全取
int lan = (i.Length >= 4 ? 4 : i.Length);
int j = Convert.ToInt32(i.Substring(i.Length - lan, lan));
while (j > 0)
{
int k = j % 10; //餘數
if (k > 0) { aa = 1; s = numc_arr[k] + unic_arr[c1] + s; }
else if (k == 0 && aa == 1) { s = "0" + s; }
j = j / 10; //商
c1++;
}
//轉成中文後丟入陣列,全部為零不加單位
str.Add((s == "" ? "" : s + unic1_arr[c0]));
//計算剩餘字串長度
int count_len = i.Length - 4;
i = (count_len > 0 ? i.Substring(0, count_len) : "");
c0++;
} while (!string.IsNullOrEmpty(i));
string chstring = "";
while (str.Count > 0) { chstring += str[str.Count - 1]; str.Remove(str[str.Count - 1]); }
string pattern = "0+";
string replacement = "零";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(chstring, replacement);
return result;
}
public string Left(object Expression, int Length)
{
string str = "";
str = ValString(Expression);
if (Length > str.Length) { Length = str.Length; }
str = str.Substring(0, Length);
return str;
}
public string Right(object Expression, int Length)
{
string str = "";
str = ValString(Expression);
int startIndex = str.Length - Length;
if (startIndex < 0)
{
startIndex = 0;
Length = str.Length;
}
str = str.Substring(startIndex, Length);
return str;
}
public bool isStrNull(object value)
{
return (value == null || value == DBNull.Value || Convert.ToString(value) == "" ? true : false);
}
//截字
public string cut_str(string str, int limit)
{
return str; //不截字避免顏文字之類的圖在viewstate會出錯
MatchCollection findCount;
string Based = "[\u0080-\uFFFF]";
//中日韓3byte以上的字符
string tmp = null;
int j = 0;
for (int i = 0; i < str.Length; i++)
{
findCount = Regex.Matches(str.Substring(i, 1), Based, RegexOptions.Compiled);
//找str裡面是否有Based指定的字
if (findCount.Count == 0)
{
j += 1;
}
else
{
j += 2;
//一個中文字占兩個
}
if (j <= limit)
{
tmp = tmp + str.Substring(i, 1);
}
else
{
i -= 1;
if (i < str.Length)
{
if (!isStrNull(str.Substring(i, 1).Trim()))
{
//捨棄不完整的英文單字或數字
int n = 0;
for (int t = tmp.Length - 1; t >= 0; t--)
{
n++;
if (Regex.Matches(tmp.Substring(t, 1), Based, RegexOptions.Compiled).Count > 0) //中文字
{
tmp = Left(tmp, tmp.Length - n + 1);
break;
}
else if (isStrNull(tmp.Substring(t, 1).Trim()))
{
tmp = Left(tmp, tmp.Length - n);
break;
}
}
}
tmp = tmp + "...";
}
break;
}
}
return tmp;
}
public enum msgIcon : int
{
none = 0,
success = 1,
error = 2,
warning = 3,
info = 4,
question = 5
}
public void ScriptMsg(string txt, string url="", msgIcon icon= msgIcon.none)
{
ScriptManager.RegisterClientScriptBlock((Page)HttpContext.Current.Handler, typeof(string), "js", "msgbox('" + txt + "','" + (icon != msgIcon.none ? icon.ToString() : "") + "','" + url + "');", true);
}
public void ScriptMsgTop(string txt, msgIcon icon)
{
ScriptManager.RegisterClientScriptBlock((Page)HttpContext.Current.Handler, typeof(string), "js", "msgtop('" + txt + "','" + (icon != msgIcon.none ? icon.ToString() : "") + "');", true);
}
public void ScriptJS(string script)
{
ScriptManager.RegisterClientScriptBlock((Page)HttpContext.Current.Handler, typeof(string), "js", script, true);
}
public void ScriptMsg2(string txt, string url = "", msgIcon icon = msgIcon.none)
{
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "init", "msgbox('" + txt + "','" + (icon != msgIcon.none ? icon.ToString() : "") + "','" + url + "');", true);
}
public void ScriptMsgTop2(string txt, msgIcon icon)
{
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "init", "msgtop('" + txt + "','" + (icon != msgIcon.none ? icon.ToString() : "") + "');", true);
}
public void ScriptJS2(string script)
{
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "init", script, true);
}
public string br(string str)
{
return str.Replace(Convert.ToString((char)10), "<br>").Replace(Convert.ToString((char)13), "");
}
//日期格式
public string datetype(string dtmp)
{
if (dtmp != null)
{
System.DateTime d = ValDate(dtmp);
return d.ToString("yyyy-MM-dd");
}
else
{
return null;
}
}
public string datetype(string dtmp, string format)
{
if (dtmp != null)
{
System.DateTime d = ValDate(dtmp);
return d.ToString(format);
}
else
{
return null;
}
}
string allowReqAtt = System.Configuration.ConfigurationManager.AppSettings["allowReqAtt"].ToString();
public bool AllowReq(string name)
{
if (!isStrNull(allowReqAtt))
{
string[] qns = allowReqAtt.Split(',');
foreach (string qn in qns)
if (qn.ToLower() == name.ToLower())
return true;
return false;
}
return true;
}
//傳回GET值並拿掉不要的回傳格式為?xxxx=xxxx&yyyy=yyyy
public string rtnQueryString(string noUseQuery)
{
string new_query = "";
if (HttpContext.Current.Request.Url.AbsoluteUri.Split('?').Length == 2)
{
string[] query = HttpContext.Current.Request.Url.AbsoluteUri.Split('?')[1].Split('&');
for (int i = 0; i < query.Length; i++)
{
string[] qs = query[i].Split('=');
if (qs.Length == 2 && qs[0].ToLower() != noUseQuery.ToLower())
{
if (AllowReq(qs[0]))
new_query += (new_query == "" ? "?" : "&") + qs[0] + "=" + Server.UrlEncode(Server.UrlDecode(qs[1]));
}
}
}
return new_query;
}
public string rtnQueryString(Array noUseQuery)
{
string new_query = "";
if (HttpContext.Current.Request.Url.AbsoluteUri.Split('?').Length == 2)
{
string[] query = HttpContext.Current.Request.Url.AbsoluteUri.Split('?')[1].Split('&');
for (int i = 0; i < query.Length; i++)
{
string[] qs = query[i].Split('=');
if (qs.Length == 2)
{
bool setAdd = true;
foreach (string nq in noUseQuery)
{
if (qs[0].ToLower() == nq.ToLower())
{
setAdd = false;
break;
}
}
if (setAdd)
{
if (AllowReq(qs[0]))
new_query += (new_query == "" ? "?" : "&") + qs[0] + "=" + Server.UrlEncode(Server.UrlDecode(qs[1]));
}
}
}
}
return new_query;
}
public string UrlHost()
{
string url = (IsHttps() ? "https://" : "http://")
//+ HttpContext.Current.Request.Url.Host
+ Request.ServerVariables["HTTP_HOST"]
+ VirtualPathUtility.ToAbsolute("~/");
return url;
}
public string UrlAddr()
{
string url = (IsHttps() ? "https://" : "http://") + HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.Url.AbsolutePath;
return url;
}
public static bool IsHttps()
{
return HttpContext.Current.Request.IsSecureConnection;
}
#region
public string GetEnumsDescription(Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
return attributes.Length > 0 ? attributes[0].Description : value.ToString();
}
public void InitEnumsOptions<T>(Control obj)
{
foreach (object value in Enum.GetValues(typeof(T)))
if (obj is DropDownList)
((DropDownList)obj).Items.Add(new ListItem(GetEnumsDescription((Enum)value), ((int)value).ToString()));
else if (obj is RadioButtonList)
((RadioButtonList)obj).Items.Add(new ListItem(GetEnumsDescription((Enum)value), ((int)value).ToString()));
else if (obj is CheckBoxList)
((CheckBoxList)obj).Items.Add(new ListItem(GetEnumsDescription((Enum)value), ((int)value).ToString()));
}
#endregion
public class WreqInfo
{
public string log = "";
public string data = "";
}
public enum Method { POST, GET, PUT, DELETE }
public WreqInfo WRequest(string URL, Method method, string POSTdata, string Referer = "", string UserAgent = "")
{
WreqInfo responseData = new WreqInfo();
try
{
HttpWebRequest hwrequest = (HttpWebRequest)WebRequest.Create(URL);
hwrequest.Accept = "*/*";
hwrequest.AllowAutoRedirect = true;
hwrequest.Timeout = 5000;
hwrequest.Method = method.ToString();
if (!isStrNull(UserAgent))
hwrequest.UserAgent = UserAgent;
else
hwrequest.UserAgent = "http_requester/0.1";
if (!isStrNull(Referer))
hwrequest.Referer = Referer;
if (URL.ToLower().IndexOf("https://") > -1)
{
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
hwrequest.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate());
}
if (hwrequest.Method == "POST")
{
hwrequest.ContentType = "application/x-www-form-urlencoded";
//ASCIIEncoding encoding = new ASCIIEncoding();
UTF8Encoding encoding = new UTF8Encoding();
byte[] postByteArray = encoding.GetBytes(POSTdata);
hwrequest.ContentLength = postByteArray.Length;
Stream postStream = hwrequest.GetRequestStream();
postStream.Write(postByteArray, 0, postByteArray.Length);
postStream.Close();
}
HttpWebResponse hwresponse = (HttpWebResponse)hwrequest.GetResponse();
if (hwresponse.StatusCode == HttpStatusCode.OK)
{
StreamReader responseStream = new StreamReader(hwresponse.GetResponseStream());
responseData.data = responseStream.ReadToEnd();
}
hwresponse.Close();
}
catch (Exception ex)
{
responseData.log = ex.Message;
}
return responseData;
}
#region
public static class ChineseConverter
{
internal const int LOCALE_SYSTEM_DEFAULT = 0x0800;
internal const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000;
internal const int LCMAP_TRADITIONAL_CHINESE = 0x04000000;
[System.Runtime.InteropServices.DllImport("kernel32", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
internal static extern int LCMapString(int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, [System.Runtime.InteropServices.Out] string lpDestStr, int cchDest);
public static string ToSimplified(string pSource)
{
String tTarget = new String(' ', pSource.Length);
int tReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_SIMPLIFIED_CHINESE, pSource, pSource.Length, tTarget, pSource.Length);
return tTarget;
}
public static string ToTraditional(string pSource)
{
String tTarget = new String(' ', pSource.Length);
int tReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, pSource, pSource.Length, tTarget, pSource.Length);
return tTarget;
}
}
#endregion
#region
public string ReadFileContent(string path)
{
string text = "";
try
{
if (path.IndexOf("~/") > -1) { path = Server.MapPath(path); }
Stream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);
StreamReader objReader = new StreamReader(stream);
text = objReader.ReadToEnd();
objReader.Close();
objReader.Dispose();
stream.Close();
stream.Dispose();
}
catch (Exception)
{
//throw;
}
return text;
}
#endregion
}
}