断身份证号码输入的有效性
在使用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 |
|