你如何进行地址validation?
是否可以执行地址(物理,而不是电子邮件)validation? 即使仅在美国,地址格式的数量似乎也会变得相当困难。 另一方面,对于一些业务需求来说,这似乎是一项必要的任务。
这是一个免费的“外面的”方式来做到这一点。 不是100%完美的,但它应该拒绝公然不存在的地址。
将整个地址提交给Google的地理编码networking服务 。 此服务会尝试返回您input的位置的精确坐标,即经度和纬度。
根据我的经验,如果地址是无效的,您将从服务中得到602的结果。 肯定存在误报或漏报的可能性,但是与其他一致性检查一起使用可能是有用的。
(另一方面, 雅虎的地理编码networking服务将返回城镇中心的坐标,但是其余的地址是伪造的。只要您密切注意“精确”字段结果)。
在这里有很多好的答案,但是他们中的大多数都假设用户想要一个“API”解决scheme,他们必须编写代码连接到第三方服务和/或屏幕刮取USPS。 这一切都很好,但是应该考虑到与实施相关的业务需求和成本,然后与期望的收益进行权衡。
根据业务需求和数据接收到系统的方式,实时地址处理解决scheme可能是最好的select。 如果需要实时解决scheme,您将需要考虑Google Maps / Bing / Yahoo API的许可协议和技术限制。 它们通常会限制您每天可以拨打的电话数量。 美国邮政networking工具API是相同的额外限制如何/为什么你可以使用他们的系统,以及如何被允许使用此后的数据。
与此同时,还有一些优秀的服务提供商可以轻松地处理一个静态的地址列表。 从本质上讲,您可以向服务提供商提供一个CSV文件或Excel文件,他们将其清理并将其还给您。 这是一个没有长期承诺或义务的一次性交易 – 通常。
充分披露:我是SmartyStreets的创始人。 我们确实在美国境内的地址进行validation。 我们很容易能够CASSauthentication一个列表 ,我们还提供地址validationWeb服务API 。 我们没有隐藏的费用,合同或任何东西。 你使用我们的服务,直到你不再需要它,你可以走开。 (与需要合同的手机公司不同)
USPS在网上有一个地址清理器,有人把屏幕刮到一个穷人的web服务中。 但是,如果您经常这样做,最好申请一个USPS帐户并调用他们自己的web服务 。
我会把你介绍给我的博客文章 – 地址存储的一课 ,我介绍一些在地址validation过程中使用的技术和algorithm。 我的关键思想是“不要懒惰地址存储,将来只会让你头疼!”
此外,还有另一个StackOverflow问题提出这个问题。 国际地理地址如何存储在关系数据库中 ?
在我曾经为一家德国公司开发室内地址validation服务的过程中,我遇到了很多方法来解决这个问题。 我会尽我所能来总结我的发现如下:
免费,开源软件
显然,任何人都会采取的第一种方法是开放源码( openstreetmap.org ),这绝对不是一个坏主意。 但是,你是否真的可以把这个好的和可靠的使用很大程度上取决于你需要多less依靠的结果。
地址是一个令人难以置信的变数。 validation美国地址不是一件容易的事情,但是可以承受,但是一旦你去了欧洲,特别是英国的邮政编码系统,开放源代码的方法就是缺乏数据。
Web服务/ API
企业级软件
钱明显地完成了。 但是并不是每个企业或开发者都可以花费大约0.15美元的地址查询(1000个API请求是150美元),这是绝大多数地址validationAPI已经实现的非常昂贵的商业模式。
我最终整合了: streetlayer API
由于我不愿意采取手动validation地址数据的程序化方法,我终于得出结论,我需要一个价格标签,不会让我的老板想要解雇我,仍然提供坚实可靠的API国际validation结果。
长话短说,我最终整合了一个由应用程序构build的API,称为“街机API”。 我很容易通过简单的JSON集成,令人惊讶的准确validation结果和开发人员友好的定价说服。 此外,100个请求/月是完全免费的。
希望这可以帮助!
我们已经与完美的地址成功。
他们的数据库有美国的所有街道名称和街道号码范围。 如果你足够幸运有这样的数据,它也可以作为自由格式地址字段的相当好的parsing器。
我已经使用http://www.melissadata.com的服务他们的“地址对象”工作得很好。; 它昂贵,是的。 但是,当您考虑编写自己的解决scheme的成本,应用程序中的脏数据成本,退回的邮寄者(销售损失等)时,成本可能是合理的。
对于我们的地址数据,我的公司使用GeoStan 。 它具有C和Java的绑定(并且我们创build了一个Perl绑定)。 请注意,这是一个商业产品,并不便宜。 虽然(每秒约300个地址)速度相当快,并提供了CASSauthentication(USPS批量邮件折扣),DPV(交付点validation)标记和LON / LAT地理编码等function。
有一个Perl模块Geo :: PostalAddress ,但它使用启发式,并没有GeoStan提到的其他function。
编辑:有些人提到“自己动手”,如果你决定这样做的话,一个很好的信息来源是美国人口普查老虎数据集 ,其中包含许多关于美国的信息,包括地址信息。
您也可以尝试SAP的数据质量解决scheme,这些解决scheme既可以在服务器平台中处理大量请求,也可以作为可embedded的SDK,如果您想在应用程序中运行它。 我们在我们的应用程序中使用它,它非常强大和可扩展。
正如在reddit上看到的那样:
$address = urlencode('1600 Pennsylvania Avenue, Washington, DC'); $json = json_decode(file_get_contents("http://where.yahooapis.com/geocode?q=$address&flags=J")); print_r($json);
有些公司提供这项服务。 处理群发邮件的服务机构将清理整个邮件列表,以便以正确的格式进行邮寄,从而实现邮资折扣。 USPS销售可用于开发定制解决scheme的地址信息的数据库。 他们也有提供这种软件和服务的认可供应商名单。
有一些(但不是很多)的软件包具有将地址validation挂钩到你的软件的API。
然而,你说得对,这是一个非常讨厌的问题。
如上所述,有很多服务,如果你正在寻找真正的validation整个地址,那么我强烈build议使用Web服务types的服务,以确保你的应用程序可以快速识别更改。
除了上面列出的服务外,webservice.net还有这个美国地址validation服务。 http://www.webservicex.net/WCF/ServiceDetails.aspx?SID=24
validation它是一个有效的地址是一回事。
但是,如果你想validation一个给定的人住在一个给定的地址,那么你唯一的保证将是一个testing邮件的地址,即使这个人是有组织的或不知道在这个地址的人。
否则,人们可以指定一个他们知道存在的任意的随机地址,这对你来说没有任何意义。
你可以做的最好的办法是要求用户发送银行对账单头或其他一些近期居住certificate的照片/扫描副本,因为至less他们必须更加努力地忘记,锻造说事情很容易显示出一个基本的图像取证分析的水平。
没有全球解决scheme。 对于任何一个特定的国家来说,这最好是相当棘手的。
在英国,PostOffice控制邮政地址,并且可以提供用于validation目的的地址信息。
政府机构也有广泛的地址列表,并在NLPG(国土资源地名录)中集中整理。
实际上对这些列表进行validation是非常困难的。 大多数人甚至不知道他们的地址是如何由PostOffice掌握的。 有些企业甚至不知道他们在特定街道上的号码。
你最好的办法是找一家专门从事这种事情的公司。
雅虎还有一个Placemaker API。 它只适用于所在地点,但对于所有的世界地点都有一个通用的ID。
看来ISO列表中没有标准。
NAICS.com正在推出一个API,将添加包括街道地址在内的各种关键业务数据。 这将发生在您的网站的forms进行处理的飞行。 https://www.naics.com/business-intelligence-api/
Fixaddress.com服务提供以下服务,
1)地址validation。
2)地址更正。
3)地址拼写纠正。
4)正确解决语音错误。
Fixaddress.com使用USPS和Tiger数据作为参考数据。
欲了解更多详细信息,
对于美国地址,您可以要求有效的状态,并validation该zip是有效的。 你甚至可以检查邮政编码是否在正确的状态,但除此之外,我不认为有很多testing你可以运行,不会提供很多的假阴性。
你想做什么 – 防止简单的错误或执行某种身份检查?