public static string Guid8()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
var num = BitConverter.ToUInt32(buffer, 0) ^ BitConverter.ToUInt32(buffer, 4) ^ BitConverter.ToUInt32(buffer, 8) ^ BitConverter.ToUInt32(buffer, 12);
return num.ToString("X");
}
标签: .NET Core
C# 求最小公倍数
public int GetGBS(int num1, int num2)
{
int temp, a, b;
if (num1 < num2)
{
temp = num1;
num1 = num2;
num2 = temp;
}
a = num1;
b = num2;
while (b != 0)
{
temp = a % b;
a = b;
b = temp;
}
return num1 * num2 / a;
}
C# LoadXml 时发生 hexadecimal value 0x08, is an invalid character 错误
解决 XmlDocument 在调用 LoadXml 方法时发生 hexadecimal value 0x08, is an invalid character 和 hexadecimal value 0x12, is an invalid character 等错误。
原因是有很多符号不能在XML代码中出现,所以我们要替换掉:
private string ReplaceHexadecimalSymbols(string txt)
{
if (txt != "")
{
string r = "[\x00-\x08\x0B\x0C\x0E-\x1F]";
return Regex.Replace(txt, r, "", RegexOptions.Compiled);
}
else
{
return "";
}
}
C# .NET 搭建简易 Http server
要完成高性能的Web服务功能,通常都是需要用到服务,如:IIS、Apache、Tomcat和Nginx,但是众所周知的Web服务器配置的复杂性,如果我们只是需要一些简单的功能,安装这些组件看起来就没多大必要。我们需要的是一个简单的HTTP类,可以很容易地嵌入到简单的Web请求的服务,加到自己的程序里。
.net
框架下有一个简单但很强大的类 System.Net.HttpListener
。这个类几行代码就能完成一个简单的服务器功能。
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8081/");
listener.Start();
Console.WriteLine("Listening...");
Task task = Task.Factory.StartNew(() => {
while(listener.IsListening)
{
HttpListenerContext context = listener.GetContext();
Console.WriteLine("Http requesting...");
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
Console.WriteLine("Http responseting...");
string responseString = "<html><title>Http server in C#</title><body><p>Hello world!</p></body></html>";
using (StreamWriter writer = new StreamWriter(response.OutputStream))
{
writer.WriteLine(responseString);
}
}
});
task.Wait();
结果
C# .NET CSV 转 DataTable
C# 读取 CSV 文件数据到 DataTable。
public static DataTable ReadCSVtoDataTable(string fileName)
{
DataTable dt = new DataTable();
Regex regex = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
using (StreamReader sr = new StreamReader(fileName))
{
string[] headers = sr.ReadLine().Split(',');
foreach (string header in headers)
{
dt.Columns.Add(header);
}
while (sr.Peek() > 0)
{
string[] rows = regex.Split(sr.ReadLine());
DataRow dr = dt.NewRow();
for (int i = 0; i < headers.Length; i++)
{
dr[i] = rows[i];
}
dt.Rows.Add(dr);
}
}
return dt;
}
C# .NET DataTable 转 CSV
DataTable 导出 CSV,支持.NET Framework 4.0以上。
public byte[] DataTableToCSV(DataTable data)
{
StringBuilder sb = new StringBuilder();
IEnumerable<string> columnNames = data.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in data.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field =>
string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
sb.AppendLine(string.Join(",", fields));
}
return System.Text.Encoding.Default.GetBytes(sb.ToString());
}
C# .NET 使用正则获取a标签href属性
MatchCollection matches = Regex.Matches(content, @"<a[^>]*href=([""'])?(?<href>[^'""]+)\1[^>]*>", RegexOptions.IgnoreCase);
foreach (Match item in matches)
{
var href= item.Groups[1].Value;
}
IP2Location for .NET Standard 组件
IP2Location for.net Standard 组件是一个基于 .net Standard 框架的软件开发组件和数据解决方案,它使您能够实时发现您的web访问者通过ip地址来自何处。然后您可以根据访问者的国家、地区、城市、纬度、经度、邮政编码、ISP、域名、时区、连接速度、IDD代码、区号、气象站代码、气象站名称、MCC、MNC、移动品牌名称、海拔和使用类型动态调整网站内容。
文件下载:
IP2Location 组件: https://down.24kplus.com/dev/IP2Location-1.0.0.0.zip
免费 IP2Location BIN 数据: https://lite.ip2location.com
商业 IP2Location BIN 数据: https://www.ip2location.com/database/ip2location
要求
Microsoft .NET 4.0 framework 或更高 / Microsoft .NET Core 2.0 或更高。
方法
方法名
|
描述
|
---|---|
Close
|
关闭并清理文件缓存
|
IPQuery
|
IP信息查询
|
Dispose
|
释放由 IP2Location 占用的资源。
|
属性
属性名
|
描述
|
---|---|
UseMemoryMappedFile
|
设置或获取是否使用内存映射文件(MMF)
|
MapFileName
|
内存映射文件名(仅Win32平台有效)
|
IPDatabasePath
|
IP数据库文件位置
|
IPDatabaseVersion
|
IP数据库版本
|
示例
static void Main(string[] args)
{
using (Component component = new Component())
{
component.IPDatabasePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "IP2LOCATION.BIN");
IPResult result = component.IPQuery("58.220.95.56");
Console.WriteLine("AreaCode: " + result.AreaCode);
Console.WriteLine("CountryCode: " + result.CountryCode);
Console.WriteLine("Country: " + result.Country);
Console.WriteLine("Region: " + result.Region);
Console.WriteLine("City: " + result.City);
Console.WriteLine("Latitude: " + result.Latitude);
Console.WriteLine("Longitude: " + result.Longitude);
...
}
Console.ReadKey();
}
C# .NET 验证Email是否正确
验证字符串是否为有效的电子邮件格式
示例
该示例定义 IsValidEmail
方法,如果字符串包含有效的电子邮件地址,则该方法返回 true
,否则返回 false
,但不采取其他任何操作。
请注意, IsValidEmail
方法不执行身份验证来验证电子邮件地址。 它只确定其格式对于电子邮件地址是否有效。 此外, IsValidEmail
方法不对顶级域名是否是 IANA 根区域数据库中列出的有效域名进行验证,这需执行查找操作。 相反,正则表达式仅验证由二到二十四个 ASCII 字符组成的顶级域名,该域名以字母数字开头并以字符结尾,且其余的字符是字母数字或连字符 (-)。
using System;
using System.Globalization;
using System.Text.RegularExpressions;
public class RegexUtil
{
public static bool IsValidEmail(string email)
{
if (string.IsNullOrWhiteSpace(email))
return false;
try
{
// Normalize the domain
email = Regex.Replace(email, @"(@)(.+)$", DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200));
}
catch (RegexMatchTimeoutException e)
{
return false;
}
catch (ArgumentException e)
{
return false;
}
try
{
return Regex.IsMatch(email,
@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}
}
static string DomainMapper(Match match)
{
// Use IdnMapping class to convert Unicode domain names.
var idn = new IdnMapping();
// Pull out and process domain name (throws ArgumentException on invalid)
var domainName = idn.GetAscii(match.Groups[2].Value);
return match.Groups[1].Value + domainName;
}
}
C# .NET Ping 域名或IP地址
Ping 域名或者IP地址,判读是否能正常连接到目标服务器。建议执行循环3~5次,取平均值判断网络延时更准确。
实例:
public static void SimplePing ()
{
Ping pingSender = new Ping ();
PingReply reply = pingSender.Send ("www.24kplus.com");
if (reply.Status == IPStatus.Success)
{
Console.WriteLine ("Address: {0}", reply.Address.ToString ());
Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
}
else
{
Console.WriteLine (reply.Status);
}
}