18

我的应用程序向人们发送 SMS 消息,但作为手机输入的号码有时是固定电话(这是用户错误或用户不知道他们拥有的联系号码是手机还是固定电话。)

我发现一些网站可以告诉我一个号码是固定电话还是手机,但它们不提供编程 API。有谁知道 Web 应用程序可以确定一个号码是否可以接收 SMS 消息的方法?

我想测试 SMS 消息是一种方法,但是当我当前的 SMS 网关获得固定电话号码并且没有告诉我它尝试将 SMS 发送到的固定电话号码时,它会严重失败。我将与我的运营商一起跟进这一点,但如果用户是固定电话或手机号码,我希望有一种简单的方法让用户输入电话号码。

更新:有办法解决这个问题。看看http://www.phonevalidator.com,他们可以查询电话号码并确定它是固定电话还是手机。

4

12 回答 12

6

这不是一项免费服务,但一家名为 Targus 的公司(不是包公司)有一个用于查询电话信息的 API。他们可以判断它是固定电话还是手机,甚至地址验证。费用基于您执行的查询次数(一次查询几美分)。 http://www.targusinfo.com/

跟进:我在 2011 年 2 月 24 日联系了 TARGUSinfo,他们的销售代表告诉我,他们只处理数十万到数百万的记录集,通常他们的客户会插入他们的 API 以进行实时访问。区分较小记录集的单元格号码和陆线号码“不是他们可以帮助的”。

于 2009-04-19T02:32:19.173 回答
6

您可以让 JavaScript 打开一个带有 url 的弹出窗口:“ http://www.phonevalidator.com/results.aspx?p= ”+phoneNumber

于 2009-04-23T22:47:04.090 回答
5

恐怕唯一真正找到它的方法是联系短信网关服务提供商。例如,可以在此处找到它们的列表:

http://en.wikipedia.org/wiki/SMS_gateways

无论如何,我建议不要这样做:

当用户在他或她的个人资料中插入手机号码时,向该号码发送带有确认码的测试短信。如果号码未经用户验证,请不要打扰稍后向其发送 SMS 消息。

于 2009-04-13T15:27:51.483 回答
5

实际上有允许接收短信的固定电话运营商。通过 text2voice 网关或具有扩展功能的电话终端。此外,在欧洲,手机运营商已经开始提供“虚拟陆线”,实际上是分配给一个特定基站的 GSM 手机。但他们确实遵循陆线编号方案。

恢复 — 不允许向固定电话号码发送 SMS 是错误的。

于 2009-04-18T09:56:16.773 回答
2

以下脚本返回

646-826-3879    LANDLINE

Stack Overflow 热线。

#!/usr/bin/perl -w
use strict;
use warnings;

use LWP::Simple;
use LWP::Simple::Cookies ( autosave => 1, file => "$ENV{'HOME'}/lwp_cookies.dat" );

my $usage = "Usage: $0 <phone_number>\n\nwhere phone_number is on format XXX-XXX-XXXX or XXXXXXXXX";

die $usage unless scalar @ARGV == 1;

my $number = shift @ARGV;
die $usage unless $number =~ /(\d\d\d)-?(\d\d\d)/;
my $NPA = $1;
my $NXX = $2;

#GET /search.asp?frmNPA=646&frmNXX=826&frmCity=&frmState=&frmZip=&frmCounty=&frmCompany=&search.x=0&search.y=0 HTTP/1.0
my $doc = get 'http://www.area-codes.com/search.asp?frmNPA=' . $NPA . '&frmNXX=' . $NXX . '&frmCity=&frmState=&frmZip=&frmCounty=&frmCompany=&search.x=0&search.y=0';

# html format:
#...
#    <td><strong>NXX Use Type:</strong></td>
#        <td>LANDLINE</td>
#...
my $next = 0;
my $result = "";
grep {
    if (/NXX Use Type:/) {
        $next = 1;
    } else {
        if ($next) {
            $next = 0;
            $result = $_;
        }
    }
} split(/\n/, $doc);

$result =~ /<[^>]*>(.*)<[^>]*>/;

print "$number\t$1\n";
于 2009-04-18T03:10:10.340 回答
2

我不确定您是否真的要这样做...如果您想知道电话号码或固定电话提供商是否保留了号码,您应该能够在您所在国家/地区的电信监管实体的某些文件中找到范围(不知道谁在美国这样做 - 可能是http://www.nanpa.com/)。这些文件通常是公开的。

但问题是手机号码!= 能够接收短信。如今,通过号码移植和所有“统一通信”的想法,您可以轻松地将本地号码重定向到手机,处理短信的非地理号码和本地“特殊”号码将您收到的短信重写为 Facebook 消息;)例如我当地的“座机”号码被重定向到另一个国家和几个其他位置的手机。

您不应该为发送到不存在/其他陌生号码的消息付费,因此这可能是检查是否有人可以接收它们的好方法。如果您对 SMS 网关有很好的控制,您可以发送一条消息,其中传递报告处于活动状态并且到期 == 即时消息(忘记正式名称)。只需发送测试/欢迎消息 - 如果不接受,您可以将号码标记为不可用。否则,您可以只要求“接受短信的号码”而不是“手机号码”。

于 2009-04-19T00:50:16.983 回答
2

试图在这里结合一些答案......

丹尼尔提到

您可以让 JavaScript 打开一个带有 url 的弹出窗口:“ http://www.phonevalidator.com/results.aspx?p= ”+phoneNumber

这仍然有效吗?我似乎无法重现它。如果我们可以让它工作,那么也许我们可以使用如下脚本......

#!/usr/bin/perl -w
use strict;
use warnings;

use LWP::Simple;

my $usage = "Usage: $0 <phone_number>\n\nwhere phone_number is on format XXX-XXX-XXXX or XXXXXXXXX";

die $usage unless scalar @ARGV == 1;

my $number = shift @ARGV;
die $usage unless $number =~ /(\d\d\d)-?(\d\d\d)/;
my $NPA = $1;
my $NXX = $2;

#GET /search.asp?frmNPA=646&frmNXX=826&frmCity=&frmState=&frmZip=&frmCounty=&frmCompany=&search.x=0&search.y=0 HTTP/1.0
my $doc = get 'http://www.phonevalidator.com/results.aspx?p=' . $NPA . $NXX;

# html format:
#...
#                                                       <td class="style16">
#                                Phone Line Type:
#                            </td>
#                            <td class="style13">
#                                <span id="PhoneTypeLabel">LANDLINE</span>
#                            </td>
#
#...
my $result = "";
grep {
    if (/PhoneTypeLabel/) {
        $result = $_;
    }
} split(/\n/, $doc);

$result =~ /<[^>]*>(.*)<[^>]*>/;

print "$number\t$1\n";
于 2012-05-07T17:43:26.890 回答
0

另一种选择是让用户从列表中选择他们的手机提供商。只是一个想法。

于 2009-04-18T23:23:03.357 回答
0

为什么不列出固定电话和手机号码的常用格式?例如,我所在的固定电话始终遵循以下格式:

9xxxx xxxx

和手机总是:

04xx xxx xxx

您可以轻松列出您所服务地区的固定电话/手机号码的一般格式。然后,当想知道一个美国号码是固定电话还是手机号码时,只需比较一下,看看它是否与固定电话格式或手机号码格式匹配。

验证电话号码的另一件事是通过短信向用户的手机发送一个临时密码,并要求他们输入该密码以验证他们的号码。

于 2009-04-19T01:24:37.790 回答
0

如果我可以访问核心移动网络,我可以想象这样做。不过,这是一个 SS7 API,而不是 Web API。我敢打赌,任何提供 Web API 的服务都充当 SS7 网络的代理,而不是依赖于数据库。唯一的其他选择是查询号码可携带性数据库。最终,要终止呼叫,所有网络运营商都需要确定他们需要连接到哪个其他运营商。

于 2009-04-20T15:07:54.340 回答
0

我们有一项服务,为美国和加拿大提供固定线路/蜂窝检测,还检测号码是活的还是死的,号码被移植到哪个无线运营商等。有一个完整的网络 API。

如果您在 www.hlrcheck.com 上注册一个帐户,我将对其进行验证并添加一些免费积分供您测试。我们目前处于测试阶段,但即将推出完整的候选版本。

于 2014-08-04T11:24:20.730 回答
0

这里提到的所有解决方案都是静态号码模式查找,但确定给定手机号码是否有效(并准备好接收 SMS)的唯一可靠方法是执行 HLR 查找。HLR 代表归属位置寄存器,它是具有实时用户信息的移动网络运营商数据库。有几个用于 HLR 查找的 API 服务,例如 www.hlr-lookups.com。

于 2016-01-08T14:44:19.710 回答