MSISDN:它是SIM卡数据吗?为什么所有提供的功能(来自Blackberry和Android)用于获取MSISDN都不可靠?

15

我有几个关于MSISDN的问题。我了解:

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

我需要进一步了解的是:

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

  2. 有些人建议使用以下代码获取MSISDN。但是,如果“我的电话号码”未设置在设备上,两种代码都返回null。反之,它将返回“我的电话号码”(如果已设置)。因此,问题是:“我的电话号码”等于MSISDN吗?

    TelephonyManager.getLine1Number(); --> 适用于Android

    Phone.getDevicePhoneNumber(true); --> 适用于Blackberry

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

3个回答

28

我可以为你提供一些相关见解。

  1. MSISDN号码可以存储在SIM卡上,但是大多数网络提供商(南非所有提供商)不会在SIM卡上存储MSISDN号码。原因有几个,最显著的是:
    • 动态MSISDN分配:预付费SIM卡有时会在首次使用时分配一个MSISDN号码。这意味着网络拥有一组可用的MSISDN号码,并在每次新的预付费SIM卡上线时分配它们。这意味着当SIM卡被发货时,它们还没有MSISDN号码,这意味着你无法在发货之前存储MSISDN号码。某些网络会在一段不活动时间后“过期”MSISDN分配,特别是当可用号码数量低时,会将这些号码返回给可用池。
    • 移动号码可携带性:一些国家允许移动用户保留其MSISDN号码而更换网络。这意味着MSISDN号码将从一个属于一个网络的SIM卡移动到另一个网络的SIM卡上。

因此,用户常常会发现SIM卡上的MSISDN号码为空。用户仍然可以自行存储MSISDN号码在SIM卡上,但这也允许他们存储任意号码,并且不能保证设置或者甚至是用户的实际电话号码。

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

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

我所知道的唯一半可靠的检测MSISDN的方法是通过WAP / WEB,在移动运营商包含MSISDN于头文件中时(您可以使用一些Web视图技巧来查看传递的头文件) - 但仅当网络支持并且用户使用移动数据时才能看到这些内容,即如果用户使用WiFi,则无法使用。

我能想到的另一种机制(唯一可以保证的机制)是通过USSD会话进行,因为您始终可以从运营商获取正确的MSISDN,但我还没有找到一种在Android上以编程方式打开USSD会话和阅读响应的方法。 我有一个仅输出MSISDN的USSD服务,但可惜目前对我来说无法使用。


非常感谢,darryn.ten。我相信很多人会从你的回答中获得很大的好处。我将尝试通过GPRS模式的头部信息获取MSISDN。 - Maria Hientono

1

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

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

感谢您的回复,@SzilardBarany。我确实同意运营商有一种映射表,可以将IMSI转换为MSISDN。 - Maria Hientono
是的,您可以将其烧录到SIM卡中。 - TJJ

0

你应该考虑到MSISDN是BIGINT类型。因此,在输出之前需要进行类型转换,就像这样


$msidn = $result['terms']['term'][!msidn']; $msidn = $result ['terms'] ['term'] [! msidn']; - Mikhail Levin
var_dump($msidn); - Mikhail Levin
请编辑您的问题,而不是添加评论。了解更多关于编辑的内容 - buczek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接