解码传入的SMS号码

时间:2016-04-16 13:41:07

标签: sms gsm at-command

我使用一些SIMCOM GSM模块接收传入的消息。当我从手机发送短信时,我看到了正常的号码:

+CMT: "+38012345678", ...

但是当短信来自我的手机运营商,或者某些名为短信的服务作为谷歌时,我看到像Google这样的垃圾:

+CMT: "16p6p6w237562767963656", ...
再来一次:

+CMT: "w49511#495946535451425", ...

以及更多:

+CMT: "#497966737471627", ...  

根据模块文档,此参数名为<oa>,表示GSM 03.40 TP-Originating-Address Address-Value字符串字段。 是否可以在任何编程语言上对其进行解码,例如:来自python?它能是什么?如果我切换到UCS2并从它解码完全相同。

2 个答案:

答案 0 :(得分:1)

在接收短信时,您确定您的模块设置为文本格式(AT + CMGF = 1)吗?如果您关闭了模块并再次打开它可能会被设置为&#34; PDU&#34;模式,比人类更适合计算机..

有关详细信息,请参阅SIMCOM AT Command手册,它非常广泛(380页pdf)。

答案 1 :(得分:1)

根据SIM800系列AT命令手册v1.10,第114页:

  

GSM 03.40 TP-目的地址地址-值字段(字符串)   格式; BCD数字(或GSM默认字母字符)被转换   到当前所选TE字符集的字符(请参阅   3GPP TS 27.007中的Command + CSCS);

给出的地址类型

如果CMT消息中的电话号码不是以“ +”号开头,则将使用BCD号码进行编码。

我试图将这些数字与ASCII表进行比较。这不完全是BCD编码,但是看起来非常相似。

要解码“ 16p6p6w237562767963656”,请分成两对:16 p6 p6 w2 37 56 27 67 96 36 56

然后反转每对:61 6p 6p 2w 73 65 72 76 69 63 65

现在与ASCII表中的HEX代码进行比较,并得到结果:all services。您可能想知道如何阅读6p 6p 2w。我也不知道!

在搜索了编码数字的其他示例之后,我假设十六进制数字0,A-F具有等效的不同字符:

0 - w
A
B - #
C - p
D
E - +
F - @

我不知道为什么将十六进制数字替换为随机字母。

"w49511#495946535451425"代表"@Y?KYIVSTAR"。代码"11"无法打印,并由"?"代替。

"#497966737471627"代表"Kyivstar"