⼩程序正则校验⾝份证号
前段时间在开发过程中涉及到⽤户⾝份证号校验,在此记录下:
  说明:我是将公共⽅法封装在⼀个js中,然后再需要使⽤的地⽅调⽤的。
1// util.js页⾯,封装的公共⽅法
2
3/**
4 * 去掉字符串头尾空格
5*/
6function trim(str) {
place(/(^\s*)|(\s*$)/g, "");
8 }
9
10/**
11 * ⾝份证号验证
12*/
13function checkIdCard(idCard) {
14  idCard = place(/ /g, "")); //去掉字符串头尾空格
15if (idCard.length == 15) {
16return isValidityBrithBy15IdCard(idCard); //进⾏15位⾝份证的验证
17  } else if (idCard.length == 18) {
18var a_idCard = idCard.split(""); // 得到⾝份证数组
19if (isValidityBrithBy18IdCard(idCard) && isTrueValidateCodeBy18IdCard(a_idCard)) { //进⾏18位⾝份证的基本验证和第18位的验证20return true;
21    } else {
22return false;
23    }
24  } else {
25return false;
26  }
27 }
28
29/**
30 * 判断⾝份证号码为18位时最后的验证位是否正确
31 * @param a_idCard ⾝份证号码数组
32 * @return
33*/
34function isTrueValidateCodeBy18IdCard(a_idCard) {
35var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因⼦
36var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];
37var sum = 0; // 声明加权求和变量
38if (a_idCard[17].toLowerCase() == 'x') {
39    a_idCard[17] = 10; // 将最后位为x的验证码替换为10⽅便后续操作
40  }
41for (var i = 0; i < 17; i++) {
正则匹配身份证42    sum += Wi[i] * a_idCard[i]; // 加权求和
43  }
44var valCodePosition = sum % 11; // 得到验证码所位置
45if (a_idCard[17] == ValideCode[valCodePosition]) {
46return true;
47  } else {
48return false;
49  }
50 }
51
52/**
53 * 验证18位数⾝份证号码中的⽣⽇是否是有效⽣⽇
54 * @param idCard 18位书⾝份证字符串
55 * @return
56*/
57function isValidityBrithBy18IdCard(idCard18) {
58var year = idCard18.substring(6, 10);
59var month = idCard18.substring(10, 12);
60var day = idCard18.substring(12, 14);
61var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
62// 这⾥⽤getFullYear()获取年份,避免千年⾍问题
63if (FullYear() != parseFloat(year) ||
64    Month() != parseFloat(month) - 1 ||
65    Date() != parseFloat(day)) {
66return false;
67  } else {
68return true;
69  }
70 }
71
72/**
73 * 验证15位数⾝份证号码中的⽣⽇是否是有效⽣⽇
74 * @param idCard15 15位书⾝份证字符串
75 * @return
76*/
77function isValidityBrithBy15IdCard(idCard15) {
78var year = idCard15.substring(6, 8);
79var month = idCard15.substring(8, 10);
80var day = idCard15.substring(10, 12);
81var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day)); 82// 对于⽼⾝份证中的你年龄则不需考虑千年⾍问题⽽使⽤getYear()⽅法83if (Year() != parseFloat(year) ||
84    Month() != parseFloat(month) - 1 ||
85    Date() != parseFloat(day)) {
86return false;
87  } else {
88return true;
89  }
90 }
91
92// 这个属性是将⽅法名暴露出来,否则需要引⽤的页⾯取不到
ports = {
94  checkIdCard,
95 }
// pages/test/test.js
const util = require('../../utils/util.js'); //路径根据⾃⼰的⽂件⽬录来
Page({
/**
* 页⾯的初始数据
*/
data: {
value: '', //输⼊的是⾝份证号
},
/**
* 获取输⼊的是⾝份证号
*/
onChange(e) {
this.setData({
value: e.detail.value
})
},
/**
* 保存
*/
save() {if (!util.checkIdCard(this.data.value)) {
wx.showToast({
title: '请输⼊正确的⾝份证号',
icon: 'none'
})
} else {
wx.showToast({
title: '通过了',
})
}
},
})

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。