身份证号码校验规则如何做

image.png

FineReport yzm263960 发布于 2022-6-10 11:08 (编辑于 2022-6-10 11:09)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-6-10 11:14(编辑于 2022-6-10 11:31)

下拉框你是数据集里面就过滤掉错误的身份证,不允许自定义值不就行了

--------

var sfz_ = _g().parameterEl.getWidgetByName("comboBox0").getText();

var patrn = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;

if (!patrn.test(sfz_)) {

FR.Msg.alert(FR.i18n.Alert, "请输入正确的15位或18位身份证号码!");

return false;

} else {

return true;

}

image.png

  • yzm263960 yzm263960(提问者) 不明白
    2022-06-10 11:15 
  • Z4u3z1 Z4u3z1 回复 yzm263960(提问者) 下拉框你不绑定数据集的么?
    2022-06-10 11:16 
  • yzm263960 yzm263960(提问者) 回复 Z4u3z1 这个是特殊原因,没绑定,因为样式的原因
    2022-06-10 11:16 
  • Z4u3z1 Z4u3z1 回复 yzm263960(提问者) 那还倒不如用文本控件 和你的截图没什么区别
    2022-06-10 11:18 
  • Z4u3z1 Z4u3z1 回复 yzm263960(提问者) 你如果非得用下拉 可以在查询时用JS校验。JS贴上面了
    2022-06-10 11:32 
最佳回答
0
15922204585Lv6高级互助
发布于2022-6-10 11:10

image.png

最佳回答
0
snrtuemcLv8专家互助
发布于2022-6-10 11:10(编辑于 2022-6-10 11:26)

自带

image.png

============

var code = this.getValue();

function IdentityCodeValid(code) {

var city = {

11: "北京",

12: "天津",

13: "河北",

14: "山西",

15: "内蒙古",

21: "辽宁",

22: "吉林",

23: "黑龙江 ",

31: "上海",

32: "江苏",

33: "浙江",

34: "安徽",

35: "福建",

36: "江西",

37: "山东",

41: "河南",

42: "湖北 ",

43: "湖南",

44: "广东",

45: "广西",

46: "海南",

50: "重庆",

51: "四川",

52: "贵州",

53: "云南",

54: "西藏 ",

61: "陕西",

62: "甘肃",

63: "青海",

64: "宁夏",

65: "新疆",

71: "中国台湾",

81: "中国香港",

82: "中国澳门",

91: "国外 "

};

var tip = "";

if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)) {

tip = "身份证号格式错误";

//alert(tip);

return tip;

}

if (!city[code.substr(0, 2)]) {

tip = "地址编码错误";

//alert(tip);

return tip;

}

if (code.length == 18) {

sBirthday = code.substr(6, 4) + "-" + Number(code.substr(10, 2)) + "-" + Number(code.substr(12, 2));

var d = new Date(sBirthday.replace(/-/g, "/"))

if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) {

tip = "非法生日";

//alert(tip);

return tip;

}

}

//18位身份证需要验证最后一位校验位

if (code.length == 18) {

code = code.split('');

//∑(ai×Wi)(mod 11)

//加权因子

var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];

//校验位

var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];

var sum = 0;

var ai = 0;

var wi = 0;

for (var i = 0; i < 17; i++) {

ai = code[i];

wi = factor[i];

sum += ai * wi;

}

var last = parity[sum % 11];

if (parity[sum % 11] != code[17]) {

tip = "校验位错误";

//alert(tip);

return tip;

}

}

return "准确";

}

alert(IdentityCodeValid(code));

image.png

  • yzm263960 yzm263960(提问者) 我的是下拉框
    2022-06-10 11:12 
  • snrtuemc snrtuemc 回复 yzm263960(提问者) 身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)
    2022-06-10 11:16 
  • yzm263960 yzm263960(提问者) 回复 snrtuemc 能不能截图一下,明白一点
    2022-06-10 11:17 
  • snrtuemc snrtuemc 回复 yzm263960(提问者) 这样吧,我给你一个js代码,在你下拉框的编辑结束事件,写js,看修改答案
    2022-06-10 11:26 
最佳回答
0
FuFuLv5初级互助
发布于2022-6-10 11:10

要不,你限制位数?image.png

最佳回答
0
重庆一棵草Lv4中级互助
发布于2022-6-10 11:10

image.png

  • 5关注人数
  • 383浏览人数
  • 最后回答于:2022-6-10 11:31
    请选择关闭问题的原因
    确定 取消
    返回顶部