我们如何执行地址验证?
甚至可以执行地址(物理地址,而不是电子邮件)验证吗?似乎地址格式的数量巨大,即使在美国也是如此,这将使这项工作变得相当困难。另一方面,对于多个业务需求来说,这似乎是一项必要的任务。
解决方案
对于美国地址,我们可以要求一个有效的状态,并验证邮政编码是否有效。我们甚至可以检查邮政编码是否处于正确的状态,但是除此之外,我认为我们可以运行很多测试,这些测试不会带来很多假阴性。
我们要做什么-防止简单的错误或者强制进行某种身份检查?
对于基于我们的地址数据,我公司使用了GeoStan。它具有C和Java的绑定(并且我们创建了Perl绑定)。请注意,这是一种商业产品,并不便宜。不过,它相当快(每秒约300个地址),并提供CASS认证(USPS大宗邮件折扣),DPV(传递点验证)标记和LON / LAT地理编码等功能。
有一个Perl模块Geo :: PostalAddress,但是它使用启发式方法,没有GeoStan提到的其他功能。
编辑:有些人提到"自己动手做",如果我们决定这样做,则美国人口普查老虎数据集是一个很好的信息来源,它包含许多有关美国的信息,包括地址信息。
有提供这项服务的公司。处理群发邮件的服务局将清理整个邮件列表,使其格式正确,从而降低邮资。 USPS出售可用于开发定制解决方案的地址信息数据库。他们还列出了提供此类软件和服务的认可供应商。
有一些(但不是很多)程序包具有用于将地址验证挂接到软件中的API。
但是,我们说对了,这是一个非常讨厌的问题,这是正确的。
http://www.usps.com/ncsc/ziplookup/vendorslicensees.htm
如前所述,有很多服务,如果我们想真正验证整个地址,那么我强烈建议我们使用Web服务类型的服务,以确保应用程序可以快速识别更改。
除了上面列出的服务之外,webservice.net还提供此美国地址验证服务。 http://www.webservicex.net/WCF/ServiceDetails.aspx?SID=24
我们在Perfect Address方面取得了成功。
他们的数据库包含所有美国街道名称和街道编号范围。如果我们很幸运拥有这种数据,它也可以作为自由格式地址字段的一个不错的解析器。
验证它是否为有效地址是一回事。
但是,如果我们要验证给定的人居住在给定的地址,则我们唯一的保证将是一封发送到该地址的测试邮件,甚至不确定该人是否组织或者认识该地址。
否则,人们只能指定一个他们知道存在的任意随机地址,这对我们没有任何意义。
要取得立竿见影的效果,我们最好的办法就是要求用户发送银行对账单头或者其他最近居住证明的照相/扫描副本,因为至少这样一来,他们必须更加努力地忘记它,并且伪造说,基本的图像取证分析可以很容易地显示事物。
我已经使用了http://www.melissadata.com的服务,它们的"地址对象"效果很好。它的价格很高,是的。但是,当我们考虑编写自己的解决方案的成本时,应用程序中脏数据的成本,退回的邮件损失了销售等成本就可以证明是合理的。
这是一种免费的"即开即用"的方法。不是100%完美,但它应该拒绝公然不存在的地址。
将整个地址提交到Google的地理编码网络服务。这项服务会尝试返回我们提供的位置的确切坐标,即纬度和经度。
以我的经验,如果地址无效,我们将从服务中获得602的结果。肯定存在误报或者误报的可能性,但与其他一致性检查结合使用可能会很有用。
(另一方面,如果该镇存在,但其余地址是虚假的,Yahoo的地理编码Web服务将返回镇中心的坐标。只要我们密切注意"结果)。
没有全局解决方案。对于任何给定的国家,这充其量都是棘手的。
在英国,邮局控制邮政地址,并可以(付费)提供地址信息以进行验证。
政府机构还保留了大量地址,这些地址集中在NLPG(国家土地和财产公报)中。
实际上,根据这些列表进行验证非常困难。大多数人甚至都不知道邮政局持有的地址如何。有些企业甚至不知道他们在特定街道上的号码。
最好的选择是与专门从事这种事情的公司联系。
USPS拥有一个在线地址清除程序,有人将屏幕抓取到了一个穷人的网络服务中。但是,如果我们经常这样做,那么最好申请一个USPS帐户并致电他们自己的Web服务。
我将向我们推荐我的博客文章"地址存储"课程,我将介绍地址验证过程中使用的一些技术和算法。我的主要思想是:"不要懒于地址存储,它只会在将来让我们头疼!"
另外,还有另一个StackOverflow问题问这个问题。标题为国际地理地址应如何存储在关系数据库中。
雅虎也有一个Placemaker API。它仅对位置有用,但对所有世界位置都具有通用ID。
看来ISO清单中没有标准。