1. 背景简介
目前部分项目用到了增强的身份证号码验证,要验证15位、18位、行政区划、日期合法性、校验位(仅对18位)等特点。
当前i产品仅提供一个函数idcheck可以用来验证身份证合法性,用法为:idcheck("PID", "421122199006137777"),返回值为字符串,为根据前17位求出的第18位校验位。
例如 如果(len(E1)=18)&(idcheck("PID", E1)=right(E1, 1))成立,通常地,我们认为该身份证E1合法。
但是这个对15位的没法校验,只验证长度的话,部分用户觉得不够。
2. 解决方案一
目前暂时采用自定义函数实现,新增自定义函数:
(1)validplace 判断行政区划是否满足。具体根据项目的不同,以及行政区划代码组的完备程度,可以校验前2位,或者4位、或者6位,如421122表示湖北省黄冈市红安县,需要一个行政区划代码组。
(2)validmonth 判断生日串中的月份是否合法,即从第7(这里的7是从自然基序1开始算起的)或者9位开始的2位月份串是否为合法月份,对15位身份证,年份是2位,省略了前面两位"19",对18位身份证,是4位全的年,所以起点不一样。
(3)validdate6 判断6位日期串是否为有效的日期,即从第7位开始的6位日期串是否为合法日期。
(4)validdate8 判断8位日期串是否为有效日期串,即从第7位开始的8位日期串是否为合法日期。
(5)ispid 增强的身份证号码校验函数,判断是否为合法的身份证号,
validplace(left(str, 6 ))&(((len(str)= 15 )&validdate6(mid(str, 6 , 6 )))|((len(str)= 18 )&validdate8(mid(str, 6 , 8 ))&(idcheck( "PID" ,str)=right(str, 1 )))
|
使用方法:
(1) 把userFuncs.sys放到程序安装目录下,如果已经有该文件,并且该文件有内容了,就复制本userFuncs.sys内容到原userFuncs.sys后面
(2) userFuncs.sys中的自定义函数中使用的行政区划代码组名字改成所在任务中的行政区划代码组名字(保持一致)。
(3)之后就可以在设计任务表元公式或者审核公式时,使用函数ispid了,判断一个字符串是否合理身份证号。如ispid(D6)。
如果在设计系统中界面中修改了自定义函数,修改完后请任意修改任务(确保任务发生改变,需要保存),以将任务中使用自定义函数的公式重新生成后缀,确保客户端插件计算正确(此处有待增强)。
3. 其他说明
- 解决方法一并不是唯一方法,不是最佳的,也不是万能的, 可能需要根据具体项目不同需求进行相应调整。
- 解决方法一要求任务必须有一个行政区划代码组,至少在一级行政区划(省、直辖市、自治区)上代码要相对较为完备。
请先登录