如何通过php/ajax/javascript动态检测移动运营商?

12

我之所以这样问,是因为我一整天都在SO上,但似乎找不到答案。

以下是我想要完成的内容(不使用付费网关):

-首先,我正在设置一个包含各种信息和日期的数据库。

-使用cron,我将运行一个脚本,通过电子邮件发送用户提供的各种信息到该日期的用户手机上(使用SMS PHP脚本)。

-为了避免维护一个准确的手机运营商列表,我想以某种方式对号码进行ping,并返回运营商和适当的“@carrier-email-extension”以发送消息。(我不想在注册时询问用户;为了简化注册流程 - 以免成为PIA并获得更多用户)-我目前有一个下拉列表,列出了约50个运营商(我知道可能会忘记或意外地遗漏一些),但我不想维护这个列表。我希望删除表单中的这部分内容。理想情况下,我想在输入时通过ajax / javascript检查号码并将运营商信息发送到MYSQL。

-用户已同意从我的服务接收短信消息/更新/文本,因此没有任何恶意行为。他们将在设置另一条消息时同意:

您将发送一条SMS消息,其中包含以下信息{listed information}到您的手机号码{mobile number},日期为{date}。

有什么建议吗?


@DarylGill 他们正在为以后的某个日期或其他用户在类似信息集中标记他们时,设置提醒和警报到他们的手机号码。 - rcpilotp51
1
如果您拥有用户的电话号码,则可以进行NPA/NXX查询以获取运营商信息。 - Sammitch
1
@Sammitch,你知道这是否准确吗?通过我的研究,fongfinder.net可以做到这一点(我根据它输出的URL知道)。我输入了我的号码,我的以前的运营商出现了。(我的运营商被另一个运营商收购了)。你知道我需要做什么才能做到这一点吗? - rcpilotp51
1
我同意@Sammitch的看法。你得到什么取决于你付出了什么。如果你找到一个免费的服务,它很可能会不太准确。 - Kevin
谢谢大家!这很有道理。所以问题是,我是否使用服务来进行NPA/NXX请求?如果是,那么这些服务是如何做到的? - rcpilotp51
显示剩余8条评论
3个回答

3

我也遇到过这个问题 - 这里提供一个快速解决方案,只需输入手机号码即可获取电信运营商信息,以实现电子邮件发送至短信的功能:

<?php                               
// leave this blank - we may never implement an authentication key
$smsarc_API_key = ''; 

// enter the user's 10 digit cell phone number. 
// example format: $smsarc_to = '5556667777';
$smsarc_number = '3123094991'; 

// lookup carrier
$ch = curl_init();  curl_setopt ($ch, CURLOPT_URL, 'http://www.smsarc.com/api-carrier-lookup.php?sa_number='.$smsarc_number);   $AskApache_result = curl_exec ($ch);        $smsarc_message_status =  $AskApache_result; curl_close($ch);

// print the carrier lookup results
echo $smsarc_carrier;
?>

他们网站上的开发者API: http://www.smsarc.com/free-php-cell-phone-carrier-lookup/


1
截至今天,这似乎已经离线了(smsarc.com的DNS错误):( - Kevin Ashcraft
1
该服务似乎已不存在。 - John A. Vink

3

这是一个两步骤的过程。

  1. 查找移动设备的国家代码。您可以使用Google API完成。Google免费提供此服务。(Google:libphonenumber-Google的电话号码处理库)

  2. 维基百科上提供了网络代码列表。对于每个国家,您必须通过选择前几位国家代码来实现。(Google:Mobile country code-Wikipedia)

您将在每个国家的网络代码列表中看到运营商名称和MCC / CMNC列表。当您从手机号码中确定了一个国家的国家代码后,每个运营商都有一个唯一的MCC MNC。然后,对于每个国家,您需要编写一个查找表;选择移动号码的前三位并指定其网络代码...为您的国家运营商执行此操作,您将弄清楚它。

因为我已经将其实施到文本API,所以可以告诉您,这需要大量的努力。祝你好运!


@Ehtesham Haque,感谢您的回答。您能否详细解释一下? - rcpilotp51
@rcpilotp51 我更新了回复... 我有一个在Excel中的查找表,不太确定如何发送它... 如果你在做编程方面,这将对你有所帮助。 它包含了所有国家代码和网络代码... 尽管价值连城 :) - Ehtesham Haque
libphonenumber无法确定号码的运营商,只能确定国家、号码类型、地理位置(适用于固定电话)等信息。 - pilsetnieks
1
此外,您没有考虑到手机号码可携带性,即在保留号码的情况下在运营商之间迁移,对于许多国家,号码范围可以细分为比您提到的3位数字前缀更小的部分。 - pilsetnieks
@pilsetnieks 是的!号码可携带性是一个重大问题!有没有办法用这个号码向所有运营商发送ping请求,如果得到肯定的回应就发送消息? - rcpilotp51
  1. 是的,有 - 上述的HLR查询;
  2. 不幸的是,它不会是免费的。
- pilsetnieks

3
如果你想确定一个电话号码的实际运营商,你应该进行所谓的HLR(Home Location Register)查找。许多消息服务提供此类服务,并且它们通常具有HTTP API。但是,这将花费您一些费用 - 每次查找都有一个价格,虽然很小,但总体上会增加。

另外,如果您需要针对特定国家进行查询,负责电话编号的监管机构可能会或可能不会拥有某种可以查询编号数据的数据库服务。这些通常具有固定成本,因此如果您要查找该国家的号码足够多次以便收回成本,那么您应该进行计算。


1
嗨,谢谢回答,但我正在寻找免费选项,符合我的问题。谢谢。 - rcpilotp51
很不幸,对于已实施手机号保留的国家来说,没有免费的选项。 - pilsetnieks

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