SMS短信的PDU编码规则

目前,发送短消息常用Text和PDU(Protocol Data Unit)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A B C D E F G H I J K L M十三项组成。

A:短信息中心地址长度,2位十六进制数(1字节)。
B:短信息中心号码类型,2位十六进制数。
C:短信息中心号码,B+C的长度将由A中的数据决定。
D:pduType,2位十六进制数。 
E:Message Reference,2位十六进制数。
F:被叫号码长度,2位十六进制数。
G:被叫号码类型,2位十六进制数,取值同B。
H:被叫号码,长度由F中的数据决定。
I:协议标识,2位十六进制数。
J:数据编码方案,2位十六进制数。
K:有效期,2位十六进制数。
L:用户数据长度,2位十六进制数。
M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。

PDU编码协议简单说明

例1 发送:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“Hello!”。从手机发出的PDU串可以是
08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0 00 00 00 06 C8 32 9B FD 0E 01
对照规范,具体分析:
分段 含义 说明
08 SMSC地址信息的长度 共8个八位字节(包括91)
91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,补‘F’凑成偶数个
11 基本参数(TP-MTI/VFP) 发送,TP-VP用相对格式
00 消息基准值(TP-MR) 0
0D 目标地址数字个数 共13个十进制数(不包括91和‘F’)
91 目标地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 96 03 29 30 F0 目标地址(TP-DA) 8613693092030,补‘F’凑成偶数个
00 协议标识(TP-PID) 是普通GSM类型,点到点方式
00 用户信息编码方式(TP-DCS) 7-bit编码
00 有效期(TP-VP) 5分钟
06 用户信息长度(TP-UDL) 实际长度6个字节
C8 32 9B FD 0E 01 用户信息(TP-UD) “Hello!”

例2 接收:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“你好!”。手机接收到的PDU串可以是
08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 96 03 29 30 F0 00 08 30 30 21 80 63 54 80 06 4F 60 59 7D 00 21
对照规范,具体分析:
分段 含义 说明
08 地址信息的长度 个八位字节(包括91)
91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,补‘F’凑成偶数个
84 基本参数(TP-MTI/MMS/RP) 接收,无更多消息,有回复地址
0D 回复地址数字个数 共13个十进制数(不包括91和‘F’)
91 回复地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 96 03 29 30 F0 回复地址(TP-RA) 8613693092030,补‘F’凑成偶数个
00 协议标识(TP-PID) 是普通GSM类型,点到点方式
08 用户信息编码方式(TP-DCS) UCS2编码
30 30 21 80 63 54 80 时间戳(TP-SCTS) 2003-3-12 08:36:45  +8时区
06 用户信息长度(TP-UDL) 实际长度6个字节
4F 60 59 7D 00 21 用户信息(TP-UD) “你好!”

若基本参数的最高位(TP-RP)为0,则没有回复地址的三个段。从Internet上发出的短消息常常是这种情形。
注意号码和时间的表示方法,不是按正常顺序顺着来的,而且要以‘F’将奇数补成偶数。

在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。

需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。如果用户信息(TP-UD)中存在一个头(基本参数的TP-UDHI为1),在所有编码方式下,用户信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM 03.42所建议的压缩算法(TP-DCS的高3位为001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和。

1、发送信息的 PDU 数据格式:

1.接收信息的 PDU 数据格式:

协议文档描述如下:

1. 发送方PDU格式SMS-SUBMIT-PDU

*1Message type (1 octet)                                                 PDUType
* 2. A message ref (1 octet)                                               MR
* 3. The length of the SMS dest number (1 octet)           
* 4. The address format (1 octet)                                     DA
* 5. The destination number (length/2 octets)
* 6. Protocol identifier (1 octet)                                         PID
* 7. Data coding scheme (1 octet)                                      DCS
* 8. Validity Period (relative: 1 octet)                                 VP
* 9. The actual user data length (header + SMS message body) (1 octet)    UDL
* 10. The actual user data (i.e. the SMS message body)   UD

2. 接受方PDU格式 SMS-DELIVER-PDU

各个字段含义:

1. SCA:Service Center Address,服务中心地址

包含三个部分:

A、Len:短消息中心地址长度(不包含该位)。如果Len被设置为00&h,并不提供后面的部分,那么终端设备将读取SIM中设置的SCA填充到SMS-PUD中,通过“AT+CSCA=xxxxx”指令可以设置SIM卡中存储的SCA值。

B、Type:短消息中心地址的类型,是国际号码还是国内号码(81&h表示国内,91&h表示国际的)。

  91&h是TON/NPI遵守International/E.164标准,指在号码前需加‘+’号;此外还有其它数值,但91&h最常用。

C、Add:短消息中心地址。

2. PDUType

  PDUType是SMS-SUBMIT、SMS-DELIVER的第一个八位位组,在两个PDU中组成如下:

A、 RP 应答路径(Reply Paht),1表示设置,0表示未设置

B、 UDHI 用户数据头标识(User Data Header Indicator),0表示用户数据(UD)部分不包含头信息,1表示用户数据(UD)开始部分包含用户头信息

C、 SRR 请求状态报告(Status Report Request),1表示需要状态报告,0表示不需要

D、 SRI 状态报告指示(Status Report Indication),此值仅被短消息服务中心(SMSC)设置,1表示状态报告将返回给短消息实体(SME),0表示不返回状态报告

E、 VPF 有效期格式(Validity Period Format),00 –VP 段没有提供(长度为0 ),01 –保留,10 –VP 段以整型形式提供(相对的),11 –VP 段以8位组的一半(semi-octet)形式提供(绝对的)

F、 RD 拒绝复本(Reject Duplicate),0 –通知短消息服务中心(SMSC)接受一个SMS-SUBMIT,即使该消息是先前已提交过的,并还存在于

SMSC中未发送出去。 1 –通知SMSC拒绝一个重复的SMS

G、 MMS 有更多的信息需要发送(More Messages to Send),此值仅被SMSC设置,0表示在 SMSC 中有更多的信息等待 MS,1表示在SMSC 中没有更多的信息

H、 MTI 信息类型指示(Message Type Indicator),

00 – SMS-DELIVER(SMSC -> MS)

00 – SMS-DELIVER REPORT(MS -> SMSC),当手机接收到SMS-DELIVER 时自动产生

01 – SMS-SUBMIT(MS -> SMSC)

01 – SMS-SUBMIT REPORT(SMSC -> MS)

10 – SMS-STATUS REPORT (SMSC -> MS)

10 – SMS-COMMAND(MS -> SMSC)

11 – 保留

SMS短信的编码规则相关推荐

  1. SMS短信PDU编码详细解析

    以一个例子来详细解析: 01 08 91 683110300405F1 60 05 A1 0110F0 00 08 31808061349523 04 4F60597D (1)01-短信状态: [01 ...

  2. java usc2短信编码_手机短信PDU编码与解码

    编码代码: / ///文 件:PDUdecoding.cs ///程 序 员:klude ///编制日期:2007-11-04 ///概 要:针对国内短信编码(USC2) ///组成结构:包含四个函数 ...

  3. 阿里云sms短信服务

    阿里云sms短信服务 阿里云短信介绍 开通阿里云短信服务 添加签名管理与模板管理 获取用户AccessKey 搭建server-msm模块 导入Maven依赖 application.yml 启动类 ...

  4. java 短信平台_Java通过SMS短信平台实现发短信功能

    本程序是通过使用中国网建提供的SMS短信平台实现的(该平台目前为注册用户提供5条免费短信,3条免费彩信,这足够用于我们测试用了.在使用前需要注册,注册地址为http://sms.webchinese. ...

  5. 中国网建java发送短信_短信验证登陆-中国网建提供的SMS短信平台

    一.JAVA发送手机短信常见的有三种方式(如下所列): 使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册 使用短信mao的方式进行短信 ...

  6. SMS短信通API下行接口参数

    为什么80%的码农都做不了架构师?>>>    JAVA发送手机短信 方法: (1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送, ...

  7. java创建短信平台_Java通过SMS短信平台实现发短信功能

    前言 本文记录的是使用中国网建的SMS短信平台,使用前需要注册,这里只记录SMS接口的使用. 2.注册后直接登录. 3.登录成功后,首先找到短信秘钥,调接口需要. 找到秘钥后,要先把签名的内容填入,这 ...

  8. 一小时学会使用SpringBoot整合阿里云SMS短信服务

    1. 登录阿里云进入控制台 进入阿里云控制台,https://home.console.aliyun.com/在个人头像位置点击进入AccessKey管理: 2. 创建用户和用户组 创建用户组 添加完 ...

  9. java通过SMS短信平台实现发短信的功能

    一.使用java发送短信的方法: java发送手机短信,通常有几种方法: (1)使用webserive接口发送手机短信: (2)使用短信猫的方式进行短信的发送,比较常用的方式,不过需要购买硬件设备: ...

最新文章

  1. ORACLE RAC 更改instance name完整步骤
  2. 炒菜机器人煎鸡蛋视频_我的生活小技巧,今天才发现鹅油那么好用,炸鸡蛋炸豆腐都挺好...
  3. 记录一下集成修改触发模式的过程
  4. yunyang1994 tensorflow_yolov3 对于检测中心点的边缘物体时评估IOU对召回率和精度的影响
  5. Linux CenOS7下安装ActivetMQ
  6. 不要在foreach循环里进行元素的remove/add操作。remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁
  7. Kaseya 修复供应链勒索攻击事件中被利用的缺陷
  8. ubuntu 14.04/14.10 iptables 防火墙设置
  9. Cursor finalized without prior close()
  10. 个人所得税纳税记录(原税收完税证明)下载方法
  11. 主页被强制绑定为360导航
  12. dh参数逆运动学_UR机械臂运动学正逆解方法
  13. 2018年总——不忘初心
  14. 【Python】MySQLdb库的使用以及格式化输出字段中的值
  15. PHP中的SAPI是什么,都有那些模式?
  16. ts给Number类型数据添加自定义方法报错:类型“Number”上不存在属性“divideStr”的解决方案
  17. 快递员能开你家锁了,问你怕不怕?
  18. 小程序源码:百变头像框制作-多玩法安装简单
  19. 17.战略管理.组织级项目管理.项目集.项目组合.量化项目管理
  20. ofd格式文件转换成pdf格式的方法

热门文章

  1. 苹果手机投影到墙上_电视VS投影仪,你会选哪个?
  2. PHP上传文件大小限制大全
  3. PhotoShop将彩色图片修改为只有黑白线条
  4. 没错,我真的拒了蚂蚁金服的Offer
  5. Windows——插件:动态主题(轻量级 每日自动换壁纸)
  6. 一锁知千秋,再和腾讯大佬的技术对话,我还是小看锁了!面试加分的答案都已安排
  7. C++在一个类中定义另一个有参数构造函数的类的对象
  8. Google adsense单价降低的原因-失误的无效点击过滤
  9. 灰色预测方法预测温度matlab,灰色预测matlab代码怎么写
  10. Android模拟器的安装、连接和操作