15

我有几个关于 MSISDN 的问题。我明白:

  1. MSISDN 基本上是电话号码
  2. 不是IMSI

我需要进一步了解的是:

  1. MSISDN 号码是否被烧毁(存储)在 SIM 卡中?如果是,是否所有提供商都确保 SIM 卡中有 MSISDN 信息?如果不是,需要澄清一下,没有任何编程代码可以获取 MSISDN 号码?

  2. 有些人建议按照以下代码获取 MSISDN。但如果设备中未设置“我的电话号码”,则这两个代码都返回 null。相反,如果设置了,它将返回“我的电话号码”。因此,问题是:“我的电话号码”等于 MSISDN?

    TelephonyManager.getLine1Number(); --> 对于安卓

    Phone.getDevicePhoneNumber(true); --> 对于黑莓

  3. 如上面的代码,返回的字符串数据是从设备本身还是从 SIM 卡中获取的?

4

3 回答 3

26

我对你有一些了解。

  1. MSISDN可以存储在 SIM 卡上,但是大多数网络提供商(所有南非的提供商)不会将 MSISDN 存储在 SIM 卡上。这有几个原因,最值得注意的是:
    • 动态 MSISDN 分配:预付费 SIM 在首次使用时有时会分配一个 MSISDN。这意味着网络有一个可用的 MSISDN 池,并在新的预付费 SIM 上线时分配它们。这意味着在运送 SIM 卡时,它们还没有 MSISDN,这意味着您无法在运送 SIM 卡之前存储 MSISDN。一些网络在一段时间不活动后“过期” MSISDN 分配,尤其是当它们的可用号码运行不足时,并将这些号码返回到可用池。
    • 移动号码可携带性:一些国家允许移动用户保留其 MSISDN,但更改网络。这意味着 MSISDN 将从用于 1 个网络的 SIM 转移到用于另一个网络的 SIM。

因此,用户经常以 SIM 上的 MSISDN 条目为空白而告终。用户仍然可以将 MSISDN 存储在自己的 SIM 卡上,但这也允许他们存储任意号码,并且不能保证设置或什至是用户的实际电话号码。

   2.您询问的那些电话获取存储在 SIM 卡中的号码。如果未设置号码,您将不会得到它,如果用户设置了错误的号码,那么您将获得不正确的详细信息。

   3. 正确,此字符串是从 SIM 卡本身获取的。

当移动运营商在标头中包含 MSISDN 时,我检测 MSISDN 的唯一半可靠方法是通过 WAP/WEB(您可以做一些 webview 技巧来查看正在通过的标头) - 但是您只能在网络上看到这些支持它,如果用户使用移动数据 - 即如果用户使用 WiFi,它将无法工作。

我能想到的另一种机制(我能想到的唯一有保证的机​​制)是通过 USSD 会话,因为您总是从运营商那里获得正确的 MSISDN,但我还没有找到一种以编程方式打开 USSD 会话并阅读的方法响应(至少在 Android 中)。我有一个 USSD 服务,它的唯一输出是 MSISDN,但不幸的是,这还没有证明对我有用。

于 2012-06-21T09:45:24.887 回答
1

由于在您发布问题后的最后一个小时内没有人回复,所以这是我所知道的(虽然我不是这方面的专家,只是有一些经验):

  1. MSISDN 是电话号码;人们可以打电话给你的号码。
  2. 它不能“烧”到 sim 卡中,因为您可以更改 sim 卡(升级或更改为其他运营商)并保留您的电话号码 = MSISDN。我认为运营商有一个映射表,可以在进行呼叫/数据传输时从 sim 卡 ID 转换为 MSISDN 并返回。MSISDN 可能存储在卡上。
于 2012-05-22T05:44:19.997 回答
0

您应该考虑到 MSISDN 具有 BIGINT 类型。因此输出它提前进行类型转换,像这样

于 2016-10-12T14:42:09.590 回答