SSN 验证 Web 服务






3.68/5 (7投票s)
2005年2月6日
5分钟阅读

132037

1423
本文介绍了一个可用于 SSN 格式验证的 ASP.NET Web 服务的实现。
引言
作为“在实践中学习”的忠实拥护者,我决定通过编写一个简单的应用程序来学习 ASP.NET 和 ASP.NET Web 服务。本文将介绍设计一个简单的 ASP.NET Web 服务来满足业务需求的过程。
免责声明(一两句)
免责声明 #1 - 本文及计算机代码中提供的信息均来自公开可用的来源,包括 美国社会保障局网站。我对这些信息的准确性不做任何明示或暗示的保证。
免责声明 #2 - SSN 信息是高度机密的。不应以不安全格式进行电子传输。本应用程序仅供教育目的。
使用代码
要使用 Web 服务,只需在您的项目中添加对它的 Web 引用。添加 Web 引用后,您就可以像使用任何其他类一样使用它了。
Imports SsnValid
' ...
' Create a new SsnValidator object
Dim MyValidator As New SsnValid.SsnValidator
' Get the Results in an SsnResult variable
Dim MyResults As SsnValid.SsnResult = MyValidator.ValidateSsn(txtSsn.Text)
SsnValidator
是 Web 服务的主要类。它包含公共函数 .ValidateSsn()
,该函数执行 SSN 格式的实际验证。结果将作为 SsnResult
结构返回。SsnResult
结构有四个值:Code
、Result
、Comment
和 State
,这些将在后面更详细地解释。
第一步:从头开始
设计此 Web 服务的第一步是定义业务问题。在此示例中,我决定验证社会安全号码 (SSN) 的结构。我首先在 社会保障局网站上彻底研究了该主题。SSA 为雇主提供了大量信息,用于确定 SSN 的有效性。
第二步:定义规则
我使用 SSA 网站上的信息来确定 SSN 有效性的规则。这些信息包括:
- 所有 SSN 都恰好是 9 位数字,格式为“xxx-xx-xxxx”或“xxxxxxxxx”,其中“x”是数字(0 到 9)。在这两种形式中,前三位数字称为“区域号”,中间两位数字称为“组号”,最后四位数字称为“序列号”。
- 前三位数字(“区域号”)表示地理位置。
- 出于显而易见的原因,“666”区域号永远不会使用。
- “000”区域号永远不会分配。
- “900”到“999”之间的所有数字都不会分配。各种政府机构已将“900”到“999”的区域号用于内部管理目的;但对我们来说,这些被视为无效。
- 中间两位数字(“组号”)取决于区域号。此数字表示分配给某个区域的最高组数字。然而,这些数字的分配很奇怪(见下文)。“高组”代码每月更新一次,可以在 此处查看。
组代码按照以下模式分配:
- 对于每个区域号,首先分配 01 到 09 之间的奇数组代码。
- 接下来,分配 10 到 98 之间的偶数。
- 当 98 组用完时,我们将回退并使用 02 到 08 之间的偶数。
- 最后,我们使用 11 到 99 之间的所有奇数。
例如,对于区域号“277”(俄亥俄州的区号),当前的高组代码是“08”。这意味着 01 到 09 之间的所有奇数、10 到 98 之间的所有偶数以及 02 到 06 之间的所有偶数都已用完。从此区域分配的新 SSN 将具有格式:277-08-xxxx。
- SSN 的最后四位数字(“序列号”)永远不会是“0000”。它将始终是“0001”到“9999”之间的数字。序列号按顺序从“0001”到“9999”分配。
- 有些完整的 SSN 永远不会由 SSA 发行。其中一些 SSN 被用于媒体宣传或其他用途。一个例子是数字“078-05-1120”,该数字在 1938 年左右被 E.H. Ferree 公司用于广告宣传。自那时以来,已有超过 40,000 人声称拥有此号码,因此 SSA 使其无效。
第三步:预期结果
现在我们决定要返回哪些信息。根据 SSA 网站上的可用信息,我决定了四个字段:
Code
:一个数字返回码,应用程序易于解析。Result
:返回码以人类可读的格式显示。Comment
:一个注释字段,可以提供有关返回码的更多详细信息。State
:负责发放 SSN 的州/地理位置。
第四步:实现
Web 服务的实现很简单,代码也有很好的注释。我将不会深入探讨,只会提供 .ValidateSSN()
函数的简化流程图。
我创建了一个名为 Ssn.mdb 的 Access 数据库,它必须位于项目的 \bin 目录中。它包含从 SSA 网站更新的信息,截至 2004 年 2 月 1 日。
关注点
对我来说,最有趣的是实现政府在分配新 SSN 时使用的复杂逻辑。这带来了一些有趣的开发。总的来说,我非常惊讶于使用 ASP.NET 创建 Web 服务如此容易。最初,我设计此 Web 服务以在 SQL Server 数据库上运行,但将其降级为 Access 以使此演示更具可移植性。如果兴趣足够,我可以在稍后发布 SQL Server/MSDE 兼容版本。
历史
- 版本 1.0
初始发布。