/**
* ========================正則表達式校驗========================
*/
var validExpUtil = {
// 身份證驗證
isCid:idCardNoUtil.checkIdCardNo,
// 港澳臺胞驗證
isQid:/^(H|h|M|m)?\d{10}$/,
// 中國護照驗證
isHid:/^(G|E)\d{8}$/,
// 軍官證士兵證驗證
isJid:/(^[\u4e00-\u9fa5]{3,5}\d{6,12})$/,
// 混合姓名驗證
isName:/^(([A-z]|[\u4E00-\u9FA5\uF900-\uFA2D]){1,10}[.|·]?){1,5}(([A-z]{2,10})|([\u4E00-\u9FA5\uF900-\uFA2D]{1,10}))$/,
// 中文姓名驗證
isNameZh:/^([\u4E00-\u9FA5\uF900-\uFA2D]{1,10}[.|·]?){1,5}([\u4E00-\u9FA5\uF900-\uFA2D]){1,10}$/,
// 英文姓名驗證
isNameEe:/^([A-z]{1,20}[.|·]?){1,5}([A-z]){2,20}$/,
// Email驗證
isEmail:/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/,
// mobile驗證
isMobile:/^0*(86)*(13|14|15|16|17|18|19)\d{9}$/, //目前只校驗位數,不作1*開頭的校驗
// 固定電話正則
isFixtel:/^0\d{2,3}-?\d{7,8}$/,
// 數字驗證
isNum:/^[0-9]+$/, //注意:必須有起始符,否則校驗有問題
// 字母數字驗證
isEeN:/(^[a-zA-Z0-9]+)$/,
// 漢字帶全角符號驗證
isZhP:/(^[\u0391-\uFFE5]+)$/,
// 漢字驗證
isZh:/(^[\u4e00-\u9fa5]+)$/,
// 中英文
isZhEn:/^[\u4e00-\u9fa5a-zA-Z]+$/,
// URL
isUrl: /(http|https):\/\/([\w.]+\/?)\S*/
};
/**
* 身份證校驗
* @type {Object}
*/
var idCardNoUtil = {
/*省,直轄市代碼表:前2位*/
"provinceAndCitys": {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:"國外"},
/*每位加權因子*/
"powers": ["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"],
/*第18位校檢碼:第18位*/
"parityBit": ["1","0","X","9","8","7","6","5","4","3","2"],
/*性別:倒數第2位,奇數男,偶數女*/
"genders": {male:"男",female:"女"},
/*校驗地址碼:前6位*/
"checkAddressCode": function(addressCode){
var check = /^[1-9]\d{5}$/.test(addressCode);
if(!check) return false;
if(this.provinceAndCitys[parseInt(addressCode.substring(0,2))]){
return true;
}else{
return false;
}
},
/*校驗日期碼:第7-15位*/
"checkBirthDayCode": function(birDayCode){
var check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
if(!check) return false;
var yyyy = parseInt(birDayCode.substring(0,4),10);
var mm = parseInt(birDayCode.substring(4,6),10);
var dd = parseInt(birDayCode.substring(6),10);
var xdata = new Date(yyyy,mm-1,dd);
if(xdata > new Date()){
return false;//生日不能大於當前日期
}else if ( ( xdata.getFullYear() == yyyy ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == dd ) ){
return true;
}else{
return false;
}
},
/*計算校檢碼*/
"getParityBit": function(idCardNo){
var id17 = idCardNo.substring(0,17);
/*加權 */
var power = 0;
for(var i=0;i<17;i++){
power += parseInt(id17.charAt(i),10) * parseInt(this.powers[i]);
}
/*取模*/
var mod = power % 11;
return this.parityBit[mod];
},
/*驗證校檢碼*/
"checkParityBit": function(idCardNo){
var parityBit = idCardNo.charAt(17).toUpperCase();
if(this.getParityBit(idCardNo) == parityBit){
return true;
}else{
return false;
}
},
/*校驗15位或18位的身份證號碼*/
"checkIdCardNo": function(idCardNo){
//15位和18位身份證號碼的基本校驗
var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
if(!check) return false;
//判斷長度爲15位或18位
if(idCardNo.length==15){
return this.check15IdCardNo(idCardNo);
return false;
}else if(idCardNo.length==18){
return this.check18IdCardNo(idCardNo);
}else{
return false;
}
},
//校驗15位的身份證號碼
"check15IdCardNo": function(idCardNo){
//15位身份證號碼的基本校驗
var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
if(!check) return false;
//校驗地址碼
var addressCode = idCardNo.substring(0,6);
check = this.checkAddressCode(addressCode);
if(!check) return false;
var birDayCode = '19' + idCardNo.substring(6,12);
//校驗日期碼
return this.checkBirthDayCode(birDayCode);
},
//校驗18位的身份證號碼
"check18IdCardNo": function(idCardNo){
//18位身份證號碼的基本格式校驗
var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
if(!check) return false;
//校驗地址碼
var addressCode = idCardNo.substring(0,6);
check = this.checkAddressCode(addressCode);
if(!check) return false;
//校驗日期碼
var birDayCode = idCardNo.substring(6,14);
check = this.checkBirthDayCode(birDayCode);
if(!check) return false;
//驗證校檢碼
return this.checkParityBit(idCardNo);
},
//轉換日期格式
"formateDateCN": function(day){
var yyyy =day.substring(0,4);
var mm = day.substring(4,6);
var dd = day.substring(6);
return yyyy + '-' + mm +'-' + dd;
},
/**
* 功能: 通過身份證號獲取相關信息
address : 地域
gender : 性別
birthday : 出生日期
* @param idCardNo
* @returns {{birthday: string, address: string, gender: string}}
*/
"getIdCardInfo": function(idCardNo){
var idCardInfo = {
address:"", //地域
gender:"", //性別
birthday:"" // 出生日期(yyyy-mm-dd)
};
if(idCardNo.length==15){
var aday = '19' + idCardNo.substring(6,12);
idCardInfo.birthday=this.formateDateCN(aday);
if(parseInt(idCardNo.charAt(14))%2==0){
idCardInfo.gender=this.genders.female;
}else{
idCardInfo.gender=this.genders.male;
}
}else if(idCardNo.length==18){
var aday = idCardNo.substring(6,14);
idCardInfo.birthday=this.formateDateCN(aday);
if(parseInt(idCardNo.charAt(16))%2==0){
idCardInfo.gender=this.genders.female;
}else{
idCardInfo.gender=this.genders.male;
}
}
var adr = idCardNo.substring(0,2);
idCardInfo.address=this.provinceAndCitys[adr];
return idCardInfo;
},
/*18位轉15位*/
"getId15": function(idCardNo){
if(idCardNo.length==15){
return idCardNo;
}else if(idCardNo.length==18){
return idCardNo.substring(0,6) + idCardNo.substring(8,17);
}else{
return null;
}
},
/*15位轉18位*/
"getId18": function(idCardNo){
if(idCardNo.length==15){
var id17 = idCardNo.substring(0,6) + '19' + idCardNo.substring(6);
var parityBit = this.getParityBit(id17);
return id17 + parityBit;
}else if(idCardNo.length==18){
return idCardNo;
}else{
return null;
}
}
};
/*******身份證校驗 結束*******/
util-2.正則表達式校驗(validExpUtil)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.