i18n 验证

16

Think Global, Act Local

这是人们常说的话。 然而,作为一名开发者,我在整个职业生涯中始终看到像Google、Microsoft、Oracle这样的大公司以本地化的方式进行验证:他们知道我的国家/地区,因此会使用适合本国的正确验证方法来验证我的电话号码、邮政编码和其他详细信息,如银行账户号码。昨天我注册了Google结帐,他们甚至向我展示了我的国家/地区的一些邮政编码格式示例!

那么我的问题是,他们是如何做到这一点的呢? 我知道他们有数千名员工,但我很难相信他们都必须重新发明轮子。美国有无数的验证方法,但其他国家呢?除了一个非常不完整和过时的PEAR尝试外,我还没有见过一个单一的开源优秀库来执行各种常见方面的国家验证,例如:

  • 民事 ID
  • 税务 ID
  • 社会安全号码(SSN)
  • BBAN(基本银行账户号码)
  • 传真、电话和移动电话号码
  • 邮政编码/邮政编码
  • 车牌号码
  • 钞票序列号
  • 等等 ...

是否有任何我不知道的良好资源?


我不认为SO是开始这样一个项目的正确地方。你可以成功地使用SO回答特定的问题(例如,“法国车牌的格式是什么”),但它不适用于进行全面的研究。 - Martin v. Löwis
@Martin:虽然我同意你的观点,但在删除问题之前,我会等待更多反馈。我认为最好的做法是有一个像这样的单一问题,并为每个国家提供几个答案,而不是成百上千个“我该如何验证YYY的XXX”的问题。 - Alix Axel
1
即使拥有数千名员工和本地分支机构,Google Checkout 也错过了我在阿根廷镇上的正确邮政编码。我被迫使用错误的代码进行注册。 - Eduardo Molteni
1
这个帖子里有两个问题。我同意第二个问题:使用SO作为协作工具是不合适的,但我非常感兴趣第一个问题:“他们是如何做到的?”所以请不要删除它 - 编辑它。谢谢。 - pixeline
1
似乎谷歌正在阅读这个:http://i18napis.appspot.com/ - Alix Axel
5个回答

1

简单验证和完整验证之间存在巨大的差异。通常无法在各个地区完全标准化验证,以下是一些例子:

  • CivilID/SSN等号码可以允许/禁止替代值(系统特定)、外国值、历史值等。我们的一个应用程序中有两个不同的验证系统用于同一字段,具体取决于上下文,其他IT系统可能有其他验证系统。

  • 邮政编码验证可能需要访问有效值列表,这是您需要订阅的内容。在许多国家,此订阅不是自动化的,并且由于版权规则,重新分发并不容易。

  • 电话号码也有类似的问题。您是否允许昂贵的号码、移动电话号码?如何检测它们?

您可能会认为在大多数情况下可以进行简单的验证 - 但对于简单的验证,使用模式匹配并让每个市场的本地部门定义有效模式通常更容易。

软件服务合同也存在问题。如果您购买软件并希望在5年内使用它,那么如果有任何变化,您可以更改验证规则是至关重要的。我曾经经历过我国电话号码系统发生4次变化,影响了简单的验证,例如“数字数量”和“第一个数字可以是什么”。

因此,最好的解决方案是拥有一个特定于区域的模式的集中数据库,并允许管理员修改验证模式。


1

PEAR 这个还不错。例如,新西兰的验证器有各种有用的东西,如邮政编码、IRD 号码、电话号码、银行账户号码http://pear.php.net/manual/en/package.validate.validate-nz.php

虽然它仍处于 Alpha 版本,但已经涵盖了相当多的国家。也许值得重新考虑一下?


我不这么认为,主要是因为新西兰(或任何其他国家)的验证方法与其他国家不一致:例如,西班牙只有DNI验证(民事身份证),而葡萄牙(以及许多其他国家)没有任何验证方法。在我看来,在i18n环境中这几乎没有用处。 - Alix Axel
1
你看过这个吗?http://www.thomasweidner.com/flatpress/2009/09/19/zend_validate_postcode/ - Steve
@Steve: 这很有趣,我如何能够查看一下代码? - Alix Axel

0

0

验证远不止于车牌和邮政编码,尽管万国邮政联盟在邮政编码格式方面拥有更好的资源(http://www.upu.int/post_code/en/postal_addressing_systems_member_countries.shtml)。关于维基百科上的车牌条目非常有限(只有大约30个国家的单张图片可用)。 - Alix Axel

0

嗯,我认为只需要一个来自那个国家的程序员和几天时间进行研究和编写验证就可以了...没有什么特别的...此外,维基百科上有大量信息。


这正是重点,我来自葡萄牙,我可以编写一组相当不错的验证方法用于我的国家,但例如对于西班牙,我一无所知。维基百科很好,我在那里做了一些不错的研究工作,但还有很多缺失的内容。 - Alix Axel
是的,但你总是可以在网上问一些随机的人,对吧,比如论坛,stackoverflow等等。只需要动动脑筋就能搞定 :P - Nikola Sivkov

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