移动短信回执

移动的短信回执,收到的编码是 “0031003065E500310031003A00320033002081F30031003500300033003100310039003900370030003477ED4FE190018FBE000A536B751F90E856DE5E94690D726959766CB95B89516895EE9898FF0C79F06B638FDB884C98CE96698BC44F30FF1B6B64524D670962A5905379F051765BCC542B53CD5F0F810280AA9178FF0C589E52A060A375C598CE9669”
和普通短信编码有很大区别,希望有人能解出来并提供方法,谢谢了。

这个是PDU串
  string _mobileNumber = “12345678901”;//手机号码
  string _content =”测试”;//短信同容
  string centerNo = “13800100500”;
  string length = string.Empty;
  string smstosendPDU = string.Empty;
  length = PDUencoding.CountSMSLength(_mobileNumber, _content);
  smstosendPDU = PDUencoding.PDUEncodingSMS(centerNo, _mobileNumber, _content);
  string str = "AT+CMGS=" + length + "\r" + smstosendPDU + "\x01A";//指令格式
  tbSmsPduCode.Text = str;



 1 /// <summary>
 2 /// 计算消息长度
 3 /// </summary>
 4 /// <param name="_phoneNumber">Phone</param>
 5 /// <param name="_targetText">Context</param>
 6 /// <returns></returns>
 7 public static string CountSMSLength(string _phoneNumber, string _targetText)
 8 {
 9 if (!(_phoneNumber.Substring(0, 2) == "86"))
10 {
11 _phoneNumber = String.Format("86{0}", _phoneNumber); //检查手机号是否按标准格式书写,不是,就补上“”
12 }
13 return (8 + ((_phoneNumber.Length % 2) == 0 ? _phoneNumber.Length / 2 : (_phoneNumber.Length + 1) / 2) + _targetText.Length * 2).ToString();
14 }
15 
16 /// <summary>
17 /// 对整个要发送的短信的PDU编码
18 /// </summary>
19 /// <param name="cscaNumber"></param>
20 /// <param name="PhoneNumber"></param>
21 /// <param name="TargetText"></param>
22 /// <returns></returns>
23 public static string PDUEncodingSMS(string _cscaNumber, string _phoneNumber, string _targetText)
24 {
25 if (!(_cscaNumber.Substring(0, 2) == "86"))
26 {
27 _cscaNumber = String.Format("86{0}", _cscaNumber); //检查手机号是否按标准格式书写,不是,就补上“”
28 }
29 if (!(_phoneNumber.Substring(0, 2) == "86"))
30 {
31 _phoneNumber = String.Format("86{0}", _phoneNumber); //检查手机号是否按标准格式书写,不是,就补上“”
32 }
33 //开始号码
34 StringBuilder _sb = new StringBuilder();
35 _sb.Append("0891");
36 //短信中心
37 _sb.Append(ReversalNumber(_cscaNumber));
38 _sb.Append("1100" + String.Format("{0,2:X}", _phoneNumber.Length).Replace(' ', '0') + "91");
39 //目标号码
40 _sb.Append(ReversalNumber(_phoneNumber));
41 //协议标识,编码信息和有效期
42 _sb.Append("0008FF");//+ String.Format("{0,2:X}", TargetText.Length * 2).Replace(' ', '0'));
43 //短信长度和内容
44 _sb.Append(ContentEncoding(_targetText));
45 return _sb.ToString();
46 }
47 
48 /// <summary>
49 /// 手机号码的编码
50 /// </summary>
51 /// <param name="Target"></param>
52 /// <returns></returns>
53 public static string ReversalNumber(string _phone)
54 {
55 string _strResult = string.Empty;
56 if (!(_phone.Substring(0, 2) == "86"))
57 {
58 _phone = String.Format("86{0}", _phone); //检查手机号是否按标准格式书写,不是,就补上“”
59 }
60 
61 char[] _eachnumber = (_phone.Length % 2 == 0) ? Convert.ToString(_phone).ToCharArray() : Convert.ToString(_phone + "F").ToCharArray();
62 for (int i = 0; i < _eachnumber.Length - 1; i += 2)
63 {
64 _strResult += (_eachnumber[i + 1].ToString() + _eachnumber[i].ToString());
65 }
66 return _strResult;
67 }
68 
69 /// <summary>
70 /// 短信内容的编码
71 /// </summary>
72 /// <param name="srvContent"></param>
73 /// <returns></returns>
74 public static string ContentEncoding(string _srvContent)
75 {
76 Encoding encodingUTF = System.Text.Encoding.BigEndianUnicode;
77 string s = string.Empty;
78 byte[] encodedBytes = encodingUTF.GetBytes(_srvContent);
79 for (int i = 0; i < encodedBytes.Length; i++)
80 {
81 s += BitConverter.ToString(encodedBytes, i, 1);
82 }
83 s = String.Format("{0:X2}{1}", s.Length / 2, s);
84 
85 return s;
86 }

posted @ 2011-05-09 11:17  董雨  阅读(385)  评论(0编辑  收藏  举报