蛋白线埋线后注意事项:判断身份证号码输入的有效性
来源:百度文库 编辑:偶看新闻 时间:2024/04/28 19:46:42
在使用Excel工作表输入身份证号码时经常要判断输入数据是否有误,如位数是否18位,前17位是否都是数字,末尾(校验码)是否正确等。以下给出一个解决方案,除了不能判断户口所在地区外,基本可以判断身份证号码输入的有效性。对于15位的老号码,使用时先在第7位插入“19”,末尾随意加上一位数,凑足18位,程序会计算出正确的校验码。
假设在工作表的第5列输入身份证号码,
首先在这个工作表workseet里建立输入事件处理过程:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then Call ves(Target.Value, Target)
End Sub
调用的ves( )过程可以放在共有模块里,参数adds是输入数据的单元格,sfz是输入单元格的内容。
Sub ves(sfz As String, adds As Range)
If sfz = "" Then End
If Len(sfz) <> 18 Then
End If
End Sub
说明:
分别对应1、0、X、9、8、7、6、5、4、3、2,作为校验码。这相当与用12减这些数字再模11。如果是10则用X表示。本文是用vba写出的计算和校验过程。
补记:
如果不使用VBA编程,可以使用名称和公式来计算校验码:
先定义3个名称
Xi ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}
Wi={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2},
Vs={1,0,X,9,8,7,6,5,4,3,2}
则校验码=Index(vs,mod(sumproduct(mid(E2,xi,1)*wi),11)+1)
其中E2是18位身份证号码。这应当是最简练的公式了。
选中E2:E65536(输入身份证号码的列),自定义有效性:
=text( Index(vs,mod(sumproduct(mid(E2,xi,1)*wi),11)+1),"0")=RIGHT(E2)
出错警告中写上:“请检查号码输入是否18位,如果确认位数正确,请检查第18位校验码是否正确。”即可完成输入有效性设置
2007年最后一天,祝读者新年好!2007-12-31