我需要在Excel中验证社会安全号码(SSN)。我不知道从哪里开始,我在网上到处都看,但无济于事......如果可以,请帮忙。感谢。
以下是验证规则:
222-22-2222
)1 to 9
或9 to 1
的连续序列号(即123-45-6789
,9876-54-321
)0-9
)666
,000
开头的受限制的数字。(0000)
。答案 0 :(得分:1)
我注意到这种情况
不能包含1到9或9到1的连续序列号(即123-45-6789, 9876-54-321 )
已经失效:
不能包含9作为第一个数字。
使用代码
Sub OCD_Kid()
然后,您可以使用此用户定义公式(UDF)直接测试电子表格中的值。
A1
有070-22-2794
,B1
输入= OCD_Kid(A1)
以测试A1
主要代码
Function OCD_Kid(strIn As String) As Boolean
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "^(?!\b(\d)\1+-(\d)\1+-(\d)\1+\b)(?!123-45-6789)(?!666|000|9\d{2})\d{3}-\d{2}-(?!0{4})\d{4}$"
OCD_Kid = .test(strIn)
End With
End Function
测试
Sub Tested()
Debug.Print OCD_Kid("222-22-2222") ' Invalid
Debug.Print OCD_Kid("070-22-2794") ' Valid
Debug.Print OCD_Kid("823-45-6789") ' Valid
Debug.Print OCD_Kid("123-45-6789") ' Invalid
Debug.Print OCD_Kid("123-45-5789") ' Valid
End Sub
答案 1 :(得分:0)
这不是一个完整的答案。
但是,它会为您提供一个模板,您可以扩展以满足更多条件。这是用户定义函数(UDF)
Public Function SSNCheck(s As String) As String
Dim i As Long
SSNCheck = "Bad"
If Len(s) <> 11 Then Exit Function
ary = Split(s, "-")
If UBound(ary) <> 2 Then Exit Function
For i = 0 To 2
If Not IsNumeric(ary(i)) Then Exit Function
Next i
If Len(ary(0)) <> 3 Then Exit Function
If Len(ary(1)) <> 2 Then Exit Function
If Len(ary(2)) <> 4 Then Exit Function
If ary(2) = "0000" Then Exit Function
If ary(0) & ary(1) & ary(2) = "123456789" Then Exit Function
SSNCheck = "Good"
End Function
用户定义函数(UDF)非常易于安装和使用:
如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除UDF:
从Excel使用UDF:
= SSNCheck(A1)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
和
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
有关UDF的详细信息
必须启用宏才能使其生效!