前段时间接到一个需求,就是将系统接收到的短信内容进行分解,然后更新到业务系统中。
目前可支持的短信格式为:
1. ZC 员工号 密码 (空格可有可无)
2. QS 工作单号[...] 签收人 (空格可有可无,可支持最多5个单号的短信分解)
QS 工作单号 工作单号 签收人 工作单号 签收人
QS 工作单号 工作单号 工作单号 签收人
这些内容都是手机反馈回来的数据,现要写一个程序来分解这些短信为:
ZC 员工号 密码
QS 工作单号 签收人
QS 工作单号 签收人
经过测试,核心算法及代码如下,有注释:
#region 重组短信内容方法
/// <summary>
/// 重组短信内容方法
/// </summary>
/// <param name="MsgText"></param>
/// <returns></returns>
public static string BreakMsg(string MsgText)
{
string su = "";
string Flag = "";
string NewStr = "";
//验证短信最小长度
if (MsgText.Trim().Length > 0)
{
for (int i = 0; i < MsgText.Length; i++)
{
//验证字符是否为数字
if (Char.IsNumber(MsgText, i))
{
switch (Flag)
{
case "":
{
Flag = "数字";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
case "数字":
{
Flag = "数字";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
case "字母":
{
Flag = "数字";
su = MsgText.Substring(i, 1); ;
NewStr += "," + su;
}
break;
}
}
else
{
switch (Flag)
{
case "":
{
Flag = "字母";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
case "数字":
{
Flag = "字母";
su = MsgText.Substring(i, 1); ;
NewStr += "/" + su;
}
break;
case "字母":
{
Flag = "字母";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
}
}
}
}
else
{
NewStr = MsgText;
}
return NewStr;
}
#endregion
#region 全角转换为半角
/// <summary>
/// 全角转换为半角
/// </summary>
/// <param name="strInput"></param>
/// <returns></returns>
public static string ToDBC(string strInput)
{
char[] c = strInput.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 12288)
{
c[i] = (char)32;
}
else if (c[i] > 65280 && c[i] < 65375)
{
c[i] = (char)(c[i] - 65248);
}
}
return new string(c);
}
#endregion
#region 半角转换为全角
/// <summary>
/// 半角转换为全角
/// </summary>
/// <param name="strInput"></param>
/// <returns></returns>
public static string ToSBC(string strInput)
{
char[] c = strInput.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 32)
{
c[i] = (char)12288;
}
else if (c[i] < 127)
{
c[i] = (char)(c[i] + 65248);
}
}
return new string(c);
}
#endregion
效果图如下:
https://p-blog.csdn.net/images/p_blog_csdn_net/jato333/EntryImages/20090914/fenjie.JPG