MSISDN:是SIM卡数据吗? 为什么所有提供的function(从黑莓和Android)获取MSISDN不可靠?

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

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

我需要进一步了解的是:

  1. SIM卡中是否烧录(存储)了MSISDN号码? 如果是,所有提供商是否确认SIM卡中有MSISDN信息? 如果是,澄清,没有编程代码可以获取MSISDN号码?

  2. 有人build议像下面的代码一样获取MSISDN。 但是,如果设备中没有设置“我的电话号码”,则这两个代码都会返回null。 另一方面,如果设置了,它将返回“我的电话号码”。 因此,问题是:“我的电话号码”等于MSISDN?

    TelephonyManager.getLine1Number(); – >为Android

    Phone.getDevicePhoneNumber(true); – >为黑莓

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

我对你有一些了解。

  1. MSISDN 可以存储在SIM卡上,但是大多数networking提供商(南非的所有提供商)都不在SIM卡上存储MSISDN。 这有几个原因,最显着的是:
    • dynamicMSISDN分配:预付费SIM卡在首次使用时有时会被分配一个MSISDN。 这意味着networking有一个可用的MSISDN池,并在新的预付费SIM卡联机时分配给他们。 这意味着当SIM卡出货时,它们还没有MSISDN,这意味着在发送SIM卡之前您不能存储MSISDN。 某些networking在一段时间内处于非活动状态(特别是当其可用数量不足时)“MSISDN”分配“过期”,并将这些数字返回给可用池。
    • 移动号码可携带性:一些国家允许移动用户保留其MSISDN但改变networking。 这意味着MSISDN将从用于1个networking的SIM移动到用于另一个networking的SIM。

所以用户通常最终将SIM上的MSISDN条目留空。 用户仍然可以将MSISDN存储在SIM卡本身上,但是这也允许他们存储任意的号码,并且不能保证被设置或者甚至不是用户实际的电话号码。

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

3.正确的,这个string是从SIM本身获取的。

当移动运营商在报头中包含MSISDN时,你可以通过WAP / WEB来检测MSISDN,这是唯一的半可靠的方式(你可以通过webview的方式来查看报头是否经过),但是只有在networking支持它,如果用户在移动数据 – 即如果用户在WiFi上将无法正常工作。

我能想到的其他机制(我能想到的唯一保证机制)是通过USSD会话,因为您始终从操作员那里获得正确的MSISDN,但是我还没有find以编程方式打开USSD会话和阅读(在Android中至less)。 我有一个USSD服务,其唯一的输出是MSISDN,但不幸的是,这尚未certificate可用于我。

既然你发布了你的问题,在过去一个小时内没有回复,这里是我所知道的(尽pipe我不是这方面的专家,只是有一些经验):

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

您应该考虑到MSISDN具有BIGINTtypes。 所以输出它做了types转换,就这样