您的位置:首页 > 其它

pdu短信解码

2009-07-25 13:55 295 查看
针对:http://blog.csdn.net/duwx/archive/2009/03/07/3967017.aspx介绍短信解码不能解析非13(即一些SP)位号码的修改

Code
/////////////////////////////////////
///文 件:FFPDUdecoding.cs
///概 要:针对国内短信解码(USC2)
///组成结构:包含四个函数:
/// 1、GetEverySMS(string SMS)
/// 2、GetTelphone(string SMS)
/// 3、GetDataTime(string SMS)
/// 4、GetContent(string SMS)
////////////////////////////////////
using System;
using System.Text;
namespace SMS
{
/// <summary>
/// FPDUdecoding 的摘要说明。
/// </summary>
public class FPDUdecoding
{
public FPDUdecoding()
{

// TODO: 在此处添加构造函数逻辑

}

/// <summary>
/// 判断接受的短信是PDU格式还是TEXT格式
/// </summary>

public bool IsPDU(string SMS)
{
if (SMS.Substring(40, 2) != "08")
return false;
return true;
}

/// <summary>
/// 函数功能:短信内容提取
/// 函数名称:GetEverySMS(string SMS)
/// 参 数:SMS 要进行提取的整个短信内容
/// 返 回 值:将多个短信内容拆分
/// </summary>

public string[] GetEverySMS(string SMS)
{
char[] str = "\n".ToCharArray();
string[] temp = SMS.Split(str);
return temp;
}
/// <summary>
/// 对方电话号码长度,补偶
/// </summary>
/// <param name="SMS"></param>
/// <returns></returns>
public int GetTelphoneLenght(string SMS)
{
int len = Convert.ToInt16(SMS.Substring(20, 2), 16);

return len;
}
/// <summary>
/// 函数功能:提取短信的发送人电话号码
/// 函数名称:GetTelphone(string SMS)
/// 参 数:SMS 要进行转换的整个短信内容
/// 返 回 值:电话号码
/// </summary>

public string GetTelphone(string SMS)
{
int len= GetTelphoneLenght(SMS);
string tel = SMS.Substring(24, (len % 2 == 0 ? len : len + 1));
string s = "";
for (int i = 0; i <tel.Length; i += 2)
{
s += tel[i + 1];
s += tel[i];
}
return s.Replace("F","");
}

/// <summary>
/// 函数功能:提取短信的发送时间
/// 函数名称:GetDataTime(string SMS)
/// 参 数:SMS:要进行转换的整个短信内容
/// 返 回 值:发送时间
/// </summary>

public string GetDataTime(string SMS)
{
int len=GetTelphoneLenght(SMS);
string time = SMS.Substring(24+(len% 2 ==0 ? len : len + 1)+4, 12);
string s = "";
for (int i = 0; i < 11; i += 2)
{
s += time[i + 1];
s += time[i];
}
string t = s.Substring(0, 2) + "年" + s.Substring(2, 2) + "月" + s.Substring(4, 2) + "日" + s.Substring(6, 2) + ":" + s.Substring(8, 2) + ":" + s.Substring(10, 2);
return t;
}

/// <summary>
/// 函数功能:提取短信的内容(PDU)
/// 函数名称:GetContent(string SMS)
/// 参 数:SMS:要进行转换的整个短信内容
/// 返 回 值:短信内容
/// </summary>

public string GetContent(string SMS)
{
string c = "";

int phoneLength = GetTelphoneLenght(SMS);
int start = 24 + (phoneLength % 2 == 0 ? phoneLength : phoneLength + 1) + 4 + 12+2;
string s = SMS.Substring(start, 2);
int length = Convert.ToInt16(s, 16);
length *= 2;
string content = SMS.Substring(start + 2, length);
for (int i = 0; i < length; i += 4)
{
string temp = content.Substring(i, 4);
int by = System.Convert.ToInt16(temp, 16);
char ascii = (char)by;
c += ascii.ToString();
}
return c;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: