考生报名信息的校验方法
——利用Visual FoxPro9.0开发考生报名信息校验程序的心得
2021-03-01韩英杰
>>>韩英杰
虽然当前各类考试报名工作已推广使用身份证阅读器来采集考生的身份证号和姓名,但是有些偏远学校仍然未普及,这些学校仍然通过人工输入的方法采集考生的身份证号码和姓名信息,因此难免出现输入错误。这些错误为后期的录取工作带来隐患,为此每年须花费很多时间和精力对错误的身份证号码和姓名信息进行校验和修改。
如何在没有身份证阅读器的情况下采集到正确的信息,是信息采集工作中亟待解决的难题。为此,笔者阅读了大量的资料,编制了“身份证和姓名校验程序”提供给各县招办和报名点使用。下面是该程序的开发思路,与大家分享。
一、身份证号码校验
依据《中华人民共和国国家标准 GB 11643-1999》中有关公民身份号码的规定,二代身份证号码由18位组成,其中,由前17位经过特殊的算法后生成第18位校验位。如果按照规定的公式计算出的结果与第18位相同,那么这个身份证号码就是正确的,否则该身份证号码在某个数字上存在输入错误。
这个公式是:∑(ai×Wi)(mod 11)
其中ai是身份证上第i位的数字,Wi为第i位的“权”,
Wi=7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2(i∈ N,1≤ i≤ 17)
∑(ai×Wi)是前17位身份证数字之和,对11取余后按照下表找到余数对应的校验码就是最后一位的数字。
举例说明:某考生的身份证号码为“13040420021111081X”,利用上式计算得到前 17位的乘积和 ∑ (ai×Wi)=(1*7)+(3*9)+(0*10)+(4*5)+(0*8)+(4*4)+(2*2)+(0*1)+(0*6)+(2*3)+(1*7)+(1*9)+(1*10)+(1*5)+(0*8)+(8*4)+(1*2)=145, 然 后 用 145 除 以 11余2,从上表中查到2对应的校验数值为X。那么该身份证号的校验码就是X,经比对最后一位确实是X,故可以判定这是一个正确的身份证号码。
以下为具体实现过程,运行VF9.0,新建表单,插“身份校验”按钮对象,建立click事件,如下图运行校验程序:
程序对所有记录进行逐一校验,最后对校验未成功的记录进行列表显示,等待操作人员进行核实。
核心代码如下:
二、姓名信息校验
考生在输入姓名信息时,最常见的错误是包含了空格、全角或半角的阿拉伯数字、标点符号、特殊字符。例如:“王 明”中间包含了空格,“李小军123”包含了数字,“程&晓蕾”包含了特殊符号等等,这些记录都将被筛选出来。
那么如何判断出这些字符呢?可以通过ASCII码值范围进行限定,核心代码如下,使用循环语句对姓名字符串逐个进行筛选判断:
程序经过联编,生成可脱离VF环境的安装程序,运行后效果如下(下表为模拟数据,不涉及隐私)。由下图可以看到,凡包含有非法字符的姓名记录都已被筛选出来,等待工作人员核实。
该程序在某市某考试报名期间下发给各县招办和报名点,经实践得到招办和报名点一致好评,将错误信息消灭在报名点,减轻了招办信息员的工作量。该程序对错误身份证号码的识别率非常高,经过筛查,错误率几乎为0。
该程序也存在不足,例如:如果号码与校验位都输入错误,且恰巧计算结果又相匹配,那么这个错误的身份证号码将不会被发现。另外,在对姓名信息的校验方面,该程序只能查找非法字符,而无法校验出错别字,这方面还需要进一步完善。
该程序相比身份证阅读器,虽然无法做到快速采集,但是由于不依赖硬件,便于个性化定制,又具有识别率高的特点,仍可作为信息校验工具进行推广,从而减轻信息员的工作量。