ijijin_builder
Version:
ijijin FE build tools.
377 lines (355 loc) • 13.3 kB
JavaScript
/*
* 信息验证
* @author: Micheal Wang
* @build time: 2017.10.10
*/
/*
* 简单验证身份证
* @param {String} str: 身份证字符串
* @return {Boolean}
*/
export function isIdCard(str) {
return /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/.test(str)
}
/*
* 身份证校验
* @params {String} idcard: 身份证;
* @return {String} 验证信息
*/
export function checkIdcard(idcard) {
var Errors2 = [
"身份证验证通过!",
"身份证号码位数不对!",
"身份证号码出生日期超出范围或含有非法字符!",
"身份证号码校验错误!",
"身份证地区非法!",
"未满18岁暂不支持开户!"
];
var Errors = [
"身份证验证通过!",
"请填写正确的身份证号码",
"请填写正确的身份证号码",
"请填写正确的身份证号码",
"请填写正确的身份证号码",
"未满18岁暂不支持开户!"
];
var t = new Date();
var y = t.getFullYear() + '';
//获取当前月份(0-11,0代表1月)
var mo = t.getMonth() + 1 + '';
var d = t.getDate() + '';
if (mo.length < 2) {
mo = '0' + mo;
}
if (d.length < 2) {
d = '0' + d;
}
var checkFullGrownDate = y - 18 + mo + d;
var birthdayValue;
var area = {
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 idcard,
Y,
JYM;
var S,
M;
var ereg;
var idcard_array = [];
idcard_array = idcard.split('');
//地区检验
if (area[parseInt(idcard.substr(0, 2))] == null)
return Errors[4];
//身份号码位数及格式检验
switch (idcard.length) {
case 15:
if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)) {
ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/; //测试出生日期的合法性
} else {
ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/; //测试出生日期的合法性
}
if (ereg.test(idcard)) {
birthdayValue = idcard.charAt(6) + idcard.charAt(7);
if (parseInt(birthdayValue) < 10) {
birthdayValue = '20' + birthdayValue;
} else {
birthdayValue = '19' + birthdayValue;
}
birthdayValue = birthdayValue + idcard.charAt(8) + idcard.charAt(9) + idcard.charAt(10) + idcard.charAt(11);
if (birthdayValue > checkFullGrownDate) {
return Errors[5];
} else {
return Errors[0];
}
} else {
return Errors[2];
}
break;
case 18:
//18位身份号码检测
//出生日期的合法性检查
//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if (parseInt(idcard.substr(6, 4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4)) % 4 == 0)) {
ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/; //闰年出生日期的合法性正则表达式
} else {
ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/; //平年出生日期的合法性正则表达式
}
if (ereg.test(idcard)) { //测试出生日期的合法性
//计算校验位
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 +
(parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 +
(parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 +
(parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 +
(parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 +
(parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 +
(parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 +
parseInt(idcard_array[7]) * 1 +
parseInt(idcard_array[8]) * 6 +
parseInt(idcard_array[9]) * 3;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y, 1); //判断校验位
if (M == idcard_array[17]) {
birthdayValue = idcard.charAt(6) + idcard.charAt(7) + idcard.charAt(8) + idcard.charAt(9) + idcard.charAt(10) + idcard.charAt(11) + idcard.charAt(12) + idcard.charAt(13);
if (birthdayValue > checkFullGrownDate) {
return Errors[5];
} else {
return Errors[0];
}
} else {
return Errors[3];
}
} else
return Errors[2];
break;
default:
return Errors[1];
break;
}
}
/*
* 校验证件有效期
* @params {String} certValidDate: 证件有效期;
* @return {String} 错误信息或字符串‘true’
*/
export function checkCertValidDate(certValidDate) {
if (certValidDate == null || certValidDate == "") {
return '证件有效期不能为空'
}
var t = new Date();
var y = t.getFullYear() + '';
var m = t.getMonth() + 1 + '';
if (m.length < 2) {
m = '0' + m;
}
var d = t.getDate() + '';
if (d.length < 2) {
d = '0' + d;
}
var cTime = y + '-' + m + '-' + d;
if (opinionTimeNoEqual(cTime, certValidDate)) {
return '证件有效期无效,必须大于当前时间';
}
return 'true';
}
/*
* 邮箱校验
* @params {String} strEmail: 邮箱;
* @return {String} 错误信息或字符串‘true’
*/
export function checkEmail(strEmail) {
return /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(str);
}
/*
* 校验(国内)邮政编码
* @params {String} postcode: 邮政编码;
* @return {String} 错误信息或字符串‘true’
*/
export function checkPostalCode(postcode) {
if (postcode == null || postcode == "") {
return '邮政编码不能为空'
}
var pattern = /^[0-9]{6}$/;
if (!pattern.exec(postcode)) {
return '邮政编码格式不正确'
}
return 'true';
}
/*
* 校验手机,电话号码,必须2选1
* @params {String} vcMobiletelno: 手机号码;
* @params {String} vcHometelno: 电话号码;
* @return {String} 错误信息或字符串‘true’
*/
export function checkHometelnoAndMobiletelno(vcHometelno, vcMobiletelno) {
var checkvcHometelnoFlag = 'false';
var checkvcMobiletelnoFlag = 'false';
if (vcHometelno != null && vcHometelno != "") {
checkvcHometelnoFlag = 'true';
}
if (vcMobiletelno != null && vcMobiletelno != "") {
checkvcMobiletelnoFlag = 'true';
}
if (checkvcHometelnoFlag == 'false' && checkvcMobiletelnoFlag == 'false') {
return '电话号码和手机号码必须填写一项';
}
var pattern = /^[0-9]*$/;
if (checkvcHometelnoFlag == 'true') {
if (!pattern.exec(vcHometelno)) {
return '电话号码格式不正确'
}
}
if (checkvcMobiletelnoFlag == 'true') {
if (!pattern.exec(vcMobiletelno)) {
return '手机号码格式不正确'
}
}
return 'true';
}
/*
* 校验手机号码(双重判断)
* (need getPhoneNumberType)
* @params {String} vcMobiletelno: 手机号码;
* @return {String} 错误信息或字符串‘true’
*/
export function checkMobiletelno(vcMobiletelno) {
if (vcMobiletelno == null || vcMobiletelno == "") {
return '手机号码不能为空'
}
var pattern = /^1+[0-9]{10}$/;
if (!pattern.exec(vcMobiletelno) || getPhoneNumberType(vcMobiletelno) < 0) {
return '手机号码格式不正确'
}
return 'true';
}
/*
* 校验手机号码
* @params {String} vcMobiletelno: 手机号码;
* @return {String} 运营商或-1
*/
export function getPhoneNumberType(number) {
if(number.length != 11 || parseInt(number) != number) return -1;
var yidong = "134|135|136|137|138|139|147|150|151|152|157|158|159|178|182|183|184|187|188|198";
var liantong = "130|131|132|155|156|176|185|186|145|166";
var dianxin = "133|153|177|180|181|189|199|173";
var xuni = "170";
var prefix = number.substr(0,3);
if(yidong.indexOf(prefix) != -1){
return 0;//移动
} else if(liantong.indexOf(prefix) != -1) {
return 1;//联通
} else if(dianxin.indexOf(prefix) != -1) {
return 2;//电信
} else if (xuni.indexOf(prefix) != -1) {
return 3;//虚拟运营商
} else {
return -1;
}
}
/*
* 校验电话号码
* @params {String} vcHometelno: 电话号码;
* @return {String} 错误信息或字符串‘true’
*/
export function checkHometelno(vcHometelno) {
if (vcHometelno == null || vcHometelno == "") {
return '电话号码不能为空'
}
var pattern = /^[0-9]*$/;
if (!pattern.exec(vcHometelno)) {
return '电话号码格式不正确'
}
return 'true';
}
/*
* 判断是否为URL地址
* @param {String}: url字符串
* @return {Boolean}
*/
export function isUrl(str) {
return /[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/i.test(str);
}
/*
* 前端校验密码
* @params {String} pwd: 密码;
* @return {String || Number} 错误信息或密码强弱程度
*/
export function checkpwdstrength(pwd) {
if (pwd == null || pwd == '' || pwd.length < 6 || pwd.length > 12) {
return '密码长度必须在6-12位之间';
}
var pattern1 = pwd.match(/^([\w`=\\\[\];\',.\/~!@#$%^&*()_+|{}:<>?]){6,12}$/i);
var pattern2 = pwd.match(/^([\w`=\\\[\];\',.\/~!@#$%^&*()_+|{}:"<>?])\1{5,11}$/i);
var pattern3 = pwd.match(/^[a-zA-Z]*$/);
var pattern4 = pwd.match(/^\d*$/);
var pattern5 = pwd.match(/^[-`=\\\[\];',.\/~!@#$%^&*()_+|{}:\"<>?]*$/);
var pattern6 = pwd.match(/[-`=\\\[\];',.\/~!@#$%^&*()_+|{}:\"<>?]/);
var pattern7 = pwd.match(/\d/);
var pattern8 = pwd.match(/[a-zA-Z]/);
if (pattern1 != null) {
if (pattern2 == null) {
if (pattern4 != null) {
return '密码不能使用全数字';
} else {
if (pattern3 != null) {
return '密码不能使用全字母';
} else {
if (pattern5 != null) {
return '密码不能使用全符号';
} else {
//这里是强度,好像我们的规矩不允许为弱密码
if (pattern6 != null &&
pattern7 != null &&
pattern8 != null) {
return 3; //强
} else if ((pattern6 != null && pattern7 != null) || (pattern6 != null && pattern8 != null) || (pattern7 != null && pattern8 != null)) {
return 2; //中
} else {
return 1; //弱
}
}
}
}
} else {
return '密码不能使用全部相同符号';
}
} else {
return '密码不能包含非法字符,如双引号等';
}
}