--E5单元格填写身份证号码,规则写长度18,其他校验结果以true/false形式写在F5单元格,F列隐藏
--填报属性-数据校验填写【 len(E5)> 0 && (len(F5) = 0 || F5 = "true") 】, 判断len(E5)> 0是为了校验错误后可以有警告标识符
--E5编辑结束事件:
var checkCode = function (val) {
var p = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; //不以0开头,年份为19世纪至今,12个月31天粗略校验,P共17位
var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]; //身份证号前17位数字加权求和的权数
var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];//除以11后求余数,验证第18位
var code = val.substring(17);
if(p.test(val)) {
var sum = 0;
for(var i=0;i<17;i++) {
sum += val[i]*factor[i];
}
if(parity[sum % 11] == code.toUpperCase()) {
return true;
}
}
return false;
}
var a = this.getValue();
var aa = checkCode(a);
contentPane.setCellValue(5,4,aa);
|