程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 短信編碼類無錯版PDUdecoding.cs實現代碼

短信編碼類無錯版PDUdecoding.cs實現代碼

編輯:關於C#
 

/////////////////////////////////////
///程 序 員:武志文(蠶蛹)
///文 件:PDUdecoding.cs
///概 要:針對國內短信編碼(USC2)
///組成結構:包含四個函數:
/// smsDecodedCenterNumber(string srvCenterNumber) 短信中心號編碼
/// smsPDUEncoded(string srvContent) 短信內容編碼
/// smsDecodedNumber(string srvNumber) 接收短信手機號編碼
/// smsDecodedsms(string strCenterNumber, string strNumber, string strSMScontent) 整個短信的編碼
/// 一個字段
/// string nLength; //要發送內容的長度,由兩部分組成,接收手機號加上要發送的內容
///
///版 本:1.0.20031020
///用 法:
/// 1,把文件拷貝到你的項目中,添加引用 using SMS;
/// 2,定義本類,例如:PDUdecoding ss = new SMS.PDUdecoding();
/// 3,現在你就可以使用本類了,例如:
/// textBox2.Text = ss.smsDecodedsms(txtCenterNumber.Text,txtNumber.Text,textBox1.Text);
///
///本類庫大家可以自由拷貝,必須保留以上版權信息。
///本類僅供研究學習之用,在沒有得到作者本人同意
///下,請不要用於任何商業利益用途。作者本人保留
///一切追究權利。
///版權歸作者所有
////////////////////////////////////
using System;
using System.Text;

namespace SMS
{
public class PDUdecoding
{

public string nLength; //要發送內容的長度,由兩部分組成,接收手機號加上要發送的內容
/// <summary>
/// 函數功能:短信內容編碼
/// 函數名稱:smsPDUEncoded(string srvContent)
/// 參 數:srvContent 要進行轉換的短信內容,string類型
/// 返 回 值:編碼後的短信內容,string類型
/// 程 序 員:[email protected]
/// 編制日期:2003-10-15
/// 函數說明:
/// 1,采用Big-Endian 字節順序的 Unicode 格式編碼,也就說把高低位的互換在這裡完成了
/// 2,將轉換後的短信內容存進字節數組
/// 3,去掉在進行Unicode格式編碼中,兩個字節中的"-",例如:00-21,變成0021
/// 4,將整條短信內容的長度除2,保留兩位16進制數
/// </summary>
public string smsPDUEncoded(string srvContent)
{
Encoding encodingUTF = System.Text.Encoding.BigEndianUnicode;
string s = null;
byte [] encodedBytes = encodingUTF.GetBytes(srvContent);
for (int i =0;i < encodedBytes.Length;i++)
{
s += BitConverter.ToString(encodedBytes,i,1);
}
s = String.Format("{0:X2}{1}",s.Length / 2,s);

return s;
}

/// <summary>
/// 函數功能:短信中心號編碼
/// 函數名稱:smsDecodedCenterNumber(string srvCenterNumber)
/// 參 數:srvCenterNumber 要進行轉換的短信中心號,string類型
/// 返 回 值:編碼後的短信中心號,string類型
/// 程 序 員:[email protected]
/// 編制日期:2003-10-15
/// 函數說明:
/// 1,將奇數位和偶數位交換。
/// 2,短信中心號奇偶數交換後,看看長度是否為偶數,如果不是,最後添加F
/// 3,加上短信中心號類型,91為國際化
/// 4,計算編碼後的短信中心號長度,並格化成二位的十六進制
/// </summary>
public string smsDecodedCenterNumber(string srvCenterNumber)
{
string s = null;
int nLength = srvCenterNumber.Length;
for(int i = 1 ; i < nLength;i += 2) //奇偶互換
{
s += srvCenterNumber[i];
s += srvCenterNumber[i-1];
}
if(!(nLength % 2 == 0)) //是否為偶數,不是就加上F,並對最後一位與加上的F位互換
{
s += 'F';
s += srvCenterNumber[nLength - 1];
}
s = String.Format("91{0}",s); //加上91,代表短信中心類型為國際化
s = String.Format("{0:X2}{1}",s.Length / 2,s); //編碼後短信中心號長度,並格式化成二位十六制
return s;
}

/// <summary>
/// 函數功能:接收短信手機號編碼
/// 函數名稱:smsDecodedNumber(string srvNumber)
/// 參 數:srvCenterNumber 要進行轉換的短信中心號,string類型
/// 返 回 值:編碼後的接收短信手機號,string類型
/// 程 序 員:[email protected]
/// 編制日期:2003-10-15
/// 函數說明:
/// 1,檢查當前接收手機號是否按標准格式書寫,不是,就補上“86”
/// 1,將奇數位和偶數位交換。
/// 2,短信中心號奇偶數交換後,看看長度是否為偶數,如果不是,最後添加F
/// </summary>
public string smsDecodedNumber(string srvNumber)
{
string s = null;
if (!(srvNumber.Substring(0,2) == "86"))
{
srvNumber = String.Format("86{0}",srvNumber); //檢查當前接收手機號是否按標准格式書寫,不是,就補上“86”
}
int nLength = srvNumber.Length;
for(int i = 1 ; i < nLength ; i += 2) //將奇數位和偶數位交換
{
s += srvNumber[i];
s += srvNumber[i-1];
}
if(!(nLength % 2 == 0)) //是否為偶數,不是就加上F,並對最後一位與加上的F位互換
{
s += 'F';
s += srvNumber[nLength - 1];
}
return s;
}

/// <summary>
/// 函數功能:整個短信的編碼
/// 函數名稱:smsDecodedsms(string strCenterNumber, string strNumber, string strSMScontent)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved