【问题标题】:Decode incoming SMS numbers解码传入的短信号码
【发布时间】:2016-04-16 13:41:06
【问题描述】:

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

+CMT: "+38012345678", ...

但是,当 SMS 来自我的手机运营商或某些名为 Google 的 SMS 服务时,我会看到一些来自 Google 的垃圾:

+CMT: "16p6p6w237562767963656", ...

还有一个:

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

还有更多:

+CMT: "#497966737471627", ...  

根据模块文档,此参数名为<oa>,表示 GSM 03.40 TP-Originating-Address Address-Value 字符串字段。 是否可以在任何编程语言上对其进行解码,例如从蟒蛇?会是什么?如果我切换到 UCS2 并从中解码,那是完全一样的。

【问题讨论】:

    标签: sms gsm at-command


    【解决方案1】:

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

    GSM 03.40 TP-Destination-Address 字符串中的地址-值字段 格式; BCD 数字(或 GSM 默认字母字符)被转换 到当前选择的 TE 字符集的字符(参考 3GPP TS 27.007 中的命令 +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。我也想知道!

    在搜索其他编码数字示例后,我假设 HEX 数字 0、A-F 具有等效的不同字符:

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

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

    "w49511#495946535451425" 代表"@Y?KYIVSTAR"。代码"11" 不可打印,替换为"?"

    "#497966737471627" 代表"Kyivstar"

    【讨论】:

      【解决方案2】:

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

      有关详细信息,请参阅 SIMCOM AT 命令手册,内容非常丰富(380 页 pdf)。

      【讨论】:

      • 是的,我确定,我在启动时配置它,而且 PDU 模式还有其他 AT 命令结构。也许是供应商文本模式问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多