regex - 如何验证美国社会保险号?

标签 regex algorithm validation

有人知道如何改进这个功能吗?我不担心缩短代码,我相信这可以用更好的正则表达式来完成,我更关心正确的逻辑。我很难找到 SSN #'s 的文档。我在下面使用的大部分规则都来自在信贷行业工作的其他程序员(未引用来源)。

  1. 是否有任何附加规则 你知道吗?

  2. 你知道这些有没有错?

  3. 你能找到你的来源吗?

    public static bool isSSN(string ssn)
    {
        Regex rxBadSSN = new Regex(@"(\d)\1\1\1\1\1\1\1\1");
    
        //Must be 9 bytes
        if(ssn.Trim().Length != 9)
            return false;
    
        //Must be numeric
        if(!isNumeric(ssn))
            return false;
    
        //Must be less than 772999999
        if( (Int32)Double.Parse(ssn.Substring(0,3)) > 772 )
        {
            //Check for Green Card Temp SSN holders
            // Could be 900700000
            //          900800000
            if(ssn.Substring(0,1) != "9")
                return false;
    
            if(ssn.Substring(3,1) != "7" && ssn.Substring(3,1) != "8")
                return false;
        }
    
        //Obviously Fake!
        if(ssn == "123456789")
            return false;
    
        //Try again!
        if(ssn == "123121234")
            return false;
    
        //No single group can have all zeros
        if(ssn.Substring(0,3) == "000")
            return false;
        if(ssn.Substring(3,2) == "00")
            return false;
        if(ssn.Substring(5,4) == "0000")
            return false;
    
        //Check to make sure the SSN number is not repeating
        if (rxBadSSN.IsMatch(ssn))
            return false;
    
        return true;
    }
    

最佳答案

更新

2011 年 6 月 25 日,SSA 将 SSN 分配流程更改为“SSN 随机化”。[27] SSN 随机化通过以下方式影响 SSN 分配过程:

它消除了 SSN 前三位数字(以前称为区域编号)的地理意义,不再将区域编号分配给特定州的个人。 它消除了最高组编号的重要性,因此,高组列表被及时卡住,可用于验证在随机化实现日期之前发布的 SSN。 以前未分配的区域编号已引入分配,但区域编号 000、666 和 900–999 除外。

新规则

  • 社会保险号是一个九位数字,格式为“AAA-GG-SSSS”。号码分为三部分。
  • 中间两位数字是组号。组号范围从 01 到 99。
  • 最后四位数字是序列号。它们代表组内从 0001 到 9999 的数字序列。
  • 一些特殊号码从未分配过:
    • 任何数字组中全为零的数字(000-##-####、###-00-####、###-##-0000)。
    • 第一位数字为 666 或 900-999(个人纳税人识别号)的号码。
  • SSN used in advertising使这些数字无效。

http://en.wikipedia.org/wiki/Social_Security_number#Structure

上一个答案

这是 most-complete description我发现的 SSN 的构成。

关于regex - 如何验证美国社会保险号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1517026/

相关文章:

algorithm - 精神崩溃后忘记了编程逻辑

java - Spring 验证不兼容的类型

php - 正则表达式有助于匹配多个字母

c# - 在保持前导零的同时增加字符串

algorithm - 当局部最优解等于全局最优?关于贪心算法的思考

javascript - 如何使用正则表达式忽略 0 值进行价格验证?

javascript - 如何使用 Nest.js 中的类验证器验证数组中每个对象的字段

javascript - 使用正则表达式匹配加入的 AmPm 小时数

python - 在文件中搜索模式并替换找到的结果

php - 从 ids 数组生成唯一的固定整数 ids